From 1fba9c57c5195190ff42bf04621c2f5e95425e18 Mon Sep 17 00:00:00 2001
From: Aaron Dodson
Date: Fri, 31 Jan 2025 09:02:30 -0800
Subject: [PATCH 01/33] refactor!: Update and modernize plugins for Blockly
v12. (#2468)
* refactor: Update ContinuousFlyout for compatibility with new flyout API.
* chore: Rename ContinuousFlyout.js to ContinuousFlyout.ts.
* chore: Rename ContinuousToolbox.js to ContinuousToolbox.ts.
* chore: Rename ContinuousMetricsFlyout.js to ContinuousMetricsFlyout.ts.
* chore: Rename ContinuousCategory.js to ContinuousCategory.ts.
* chore: Rename ContinuousMetrics.js to ContinuousMetrics.ts.
* chore: Rename index.js to index.ts.
* refactor: Convert ContinuousToolbox to Typescript
* chore: Name RecyclableBlockFlyoutInflater.ts consistently with other files.
* refactor: Add and use a function for registering the continuous toolbox.
* chore: Improve docs.
* feat: Add support for autoclosing continuous toolboxes.
* fix: Fix bug when making configuration changes in the playground.
* refactor: Update visibility on RecyclableBlockFlyoutInflater.
* fix: Use the recycleEligibilityChecker callback if set.
* refactor: Make converting toolbox items to flyout items more extensible.
* chore: Remove debugging.
* fix: Debounce flyout refreshes.
* chore: Remove unused import.
* chore: Fix TSDoc args.
* chore: Add TSDoc for registration function.
* refactor: Clean up implementation of recordScrollPositions.
* chore: Fix TSDoc.
* chore: Remove unneeded underscores in symbol names.
* chore: Suppress unavoidable lint errors.
* fix: Fix alignment when jumping to a category.
* fix: Fix injection options and documentation.
* chore: Fix typo.
* refactor: Make the ContinuousFlyoutMetrics class and file name consistent.
* fix: Update flyout contents in response to procedure mutations.
* refactor: Make the RecyclableBlockFlyoutInflater inert for non-continuous flyouts.
* fix: Fix alignment of toolbox labels.
* chore: Update to use Blockly v12 beta.
* chore: Update plugins for compatibility with Blockly v12.
* fix: Fix tests for v12 compatibility.
* fix: Fix bug that could cause scroll jank when interrupting an animated scroll.
* chore: Revert errant test change.
* refactor: Update continuous-toolbox for latest flyout API changes.
* chore: Update Blockly dependency to 12.0.0-beta.1.
* chore: Clarify comments.
* chore: Make guard clauses single-line.
* refactor: Improve typings for getViewMetrics().
* fix: Fix missing return.
* chore: Add comment clarifying FlyoutButton weirdness.
* chore: Improve formatting.
* refactor: Use direct field access instead of pass-through setters.
* fix: Check for modern mutations when determining block recyclability.
* chore: Add comment clarifying flyout positioning checks.
* fix: Remove explicit public visibility annotations.
* fix: Don't recycle blocks with any mutation-related methods.
* chore: Add some information about block recycling to the README.
* chore: Improve continuous toolbox README.
---
package-lock.json | 360 ++---
package.json | 2 +-
.../src/observable_parameter_model.ts | 12 +-
.../test/procedure_blocks.mocha.js | 1 +
plugins/content-highlight/src/index.ts | 2 +-
plugins/continuous-toolbox/README.md | 42 +-
plugins/continuous-toolbox/package-lock.json | 1392 +++++++++++++----
plugins/continuous-toolbox/package.json | 2 +-
.../src/ContinuousCategory.js | 67 -
.../src/ContinuousCategory.ts | 78 +
.../src/ContinuousFlyout.js | 312 ----
.../src/ContinuousFlyout.ts | 297 ++++
.../src/ContinuousFlyoutMetrics.ts | 47 +
...tinuousMetrics.js => ContinuousMetrics.ts} | 32 +-
.../src/ContinuousMetricsFlyout.js | 43 -
.../src/ContinuousToolbox.js | 174 ---
.../src/ContinuousToolbox.ts | 195 +++
.../src/RecyclableBlockFlyoutInflater.ts | 172 ++
plugins/continuous-toolbox/src/index.js | 14 -
plugins/continuous-toolbox/src/index.ts | 90 ++
plugins/continuous-toolbox/test/index.js | 29 +-
plugins/continuous-toolbox/tsconfig.json | 16 +
plugins/field-bitmap/src/field-bitmap.ts | 1 -
plugins/field-colour/src/field_colour.ts | 3 -
plugins/field-date/src/field_date.ts | 5 -
plugins/keyboard-navigation/src/navigation.js | 10 +-
.../src/navigation_controller.js | 8 +-
.../test/navigation_test.mocha.js | 15 +-
plugins/workspace-minimap/src/focus_region.ts | 2 +-
plugins/workspace-minimap/src/minimap.ts | 2 +-
30 files changed, 2181 insertions(+), 1244 deletions(-)
delete mode 100644 plugins/continuous-toolbox/src/ContinuousCategory.js
create mode 100644 plugins/continuous-toolbox/src/ContinuousCategory.ts
delete mode 100644 plugins/continuous-toolbox/src/ContinuousFlyout.js
create mode 100644 plugins/continuous-toolbox/src/ContinuousFlyout.ts
create mode 100644 plugins/continuous-toolbox/src/ContinuousFlyoutMetrics.ts
rename plugins/continuous-toolbox/src/{ContinuousMetrics.js => ContinuousMetrics.ts} (75%)
delete mode 100644 plugins/continuous-toolbox/src/ContinuousMetricsFlyout.js
delete mode 100644 plugins/continuous-toolbox/src/ContinuousToolbox.js
create mode 100644 plugins/continuous-toolbox/src/ContinuousToolbox.ts
create mode 100644 plugins/continuous-toolbox/src/RecyclableBlockFlyoutInflater.ts
delete mode 100644 plugins/continuous-toolbox/src/index.js
create mode 100644 plugins/continuous-toolbox/src/index.ts
create mode 100644 plugins/continuous-toolbox/tsconfig.json
diff --git a/package-lock.json b/package-lock.json
index 9b1cc3ac5e..e850941a98 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
"@eslint/js": "^8.49.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "blockly": "^11.0.0",
+ "blockly": "^12.0.0-beta.1",
"conventional-changelog-conventionalcommits": "^5.0.0",
"eslint": "^8.49.0",
"eslint-config-google": "^0.14.0",
@@ -911,12 +911,12 @@
}
},
"node_modules/blockly": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-11.0.0.tgz",
- "integrity": "sha512-6Ie7HuZWZLaETIVKFEP4FPDz267Pubn6+weQNZvXzqnkOYp9sKPSsPue8QIMCV9Qb5F4wYhqivgiDcZJcE1UlQ==",
+ "version": "12.0.0-beta.1",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.1.tgz",
+ "integrity": "sha512-lECwZ4K+YuLXMM0yxWTz1lwkmDl424sst7h/dhtSefuCki8afjI/F87byYK/ZIZsMKBEz2+8wEJ1Wlx5cYWIAg==",
"dev": true,
"dependencies": {
- "jsdom": "23.0.0"
+ "jsdom": "25.0.1"
},
"engines": {
"node": ">=18"
@@ -1288,15 +1288,15 @@
}
},
"node_modules/cssstyle": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz",
- "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
+ "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
"dev": true,
"dependencies": {
- "rrweb-cssom": "^0.6.0"
+ "rrweb-cssom": "^0.7.1"
},
"engines": {
- "node": ">=14"
+ "node": ">=18"
}
},
"node_modules/data-urls": {
@@ -2227,9 +2227,9 @@
}
},
"node_modules/form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
"dev": true,
"dependencies": {
"asynckit": "^0.4.0",
@@ -3057,6 +3057,18 @@
"node": ">= 6"
}
},
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
@@ -3539,38 +3551,38 @@
}
},
"node_modules/jsdom": {
- "version": "23.0.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.0.tgz",
- "integrity": "sha512-cbL/UCtohJguhFC7c2/hgW6BeZCNvP7URQGnx9tSJRYKCdnfbfWOrtuLTMfiB2VxKsx5wPHVsh/J0aBy9lIIhQ==",
+ "version": "25.0.1",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
+ "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
"dev": true,
"dependencies": {
- "cssstyle": "^3.0.0",
+ "cssstyle": "^4.1.0",
"data-urls": "^5.0.0",
"decimal.js": "^10.4.3",
"form-data": "^4.0.0",
"html-encoding-sniffer": "^4.0.0",
- "http-proxy-agent": "^7.0.0",
- "https-proxy-agent": "^7.0.2",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.5",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.7",
+ "nwsapi": "^2.2.12",
"parse5": "^7.1.2",
- "rrweb-cssom": "^0.6.0",
+ "rrweb-cssom": "^0.7.1",
"saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
- "tough-cookie": "^4.1.3",
+ "tough-cookie": "^5.0.0",
"w3c-xmlserializer": "^5.0.0",
"webidl-conversions": "^7.0.0",
"whatwg-encoding": "^3.1.1",
"whatwg-mimetype": "^4.0.0",
"whatwg-url": "^14.0.0",
- "ws": "^8.14.2",
+ "ws": "^8.18.0",
"xml-name-validator": "^5.0.0"
},
"engines": {
"node": ">=18"
},
"peerDependencies": {
- "canvas": "^3.0.0"
+ "canvas": "^2.11.2"
},
"peerDependenciesMeta": {
"canvas": {
@@ -3603,9 +3615,9 @@
}
},
"node_modules/jsdom/node_modules/https-proxy-agent": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
- "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"dev": true,
"dependencies": {
"agent-base": "^7.0.2",
@@ -3615,18 +3627,6 @@
"node": ">= 14"
}
},
- "node_modules/jsdom/node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/jsdom/node_modules/whatwg-encoding": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
@@ -4055,9 +4055,9 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.10",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz",
- "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==",
+ "version": "2.2.16",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz",
+ "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==",
"dev": true
},
"node_modules/object-assign": {
@@ -4263,12 +4263,12 @@
}
},
"node_modules/parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
+ "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
"dev": true,
"dependencies": {
- "entities": "^4.4.0"
+ "entities": "^4.5.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
@@ -4447,12 +4447,6 @@
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
- "node_modules/psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
- "dev": true
- },
"node_modules/pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -4497,12 +4491,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "dev": true
- },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -4772,9 +4760,9 @@
}
},
"node_modules/rrweb-cssom": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
- "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
+ "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
"dev": true
},
"node_modules/run-parallel": {
@@ -5178,6 +5166,24 @@
"xtend": "~4.0.1"
}
},
+ "node_modules/tldts": {
+ "version": "6.1.65",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.65.tgz",
+ "integrity": "sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ==",
+ "dev": true,
+ "dependencies": {
+ "tldts-core": "^6.1.65"
+ },
+ "bin": {
+ "tldts": "bin/cli.js"
+ }
+ },
+ "node_modules/tldts-core": {
+ "version": "6.1.65",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.65.tgz",
+ "integrity": "sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg==",
+ "dev": true
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -5203,27 +5209,15 @@
}
},
"node_modules/tough-cookie": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
- "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
+ "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
"dev": true,
"dependencies": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
+ "tldts": "^6.1.32"
},
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/tough-cookie/node_modules/universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
+ "node": ">=16"
}
},
"node_modules/tr46": {
@@ -5369,16 +5363,6 @@
"integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
"dev": true
},
- "node_modules/url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -5525,18 +5509,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/vinyl-fs/node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/vinyl-sourcemap": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz",
@@ -5587,18 +5559,6 @@
"node": ">=12"
}
},
- "node_modules/whatwg-encoding/node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/whatwg-mimetype": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
@@ -5609,9 +5569,9 @@
}
},
"node_modules/whatwg-url": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
- "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz",
+ "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==",
"dev": true,
"dependencies": {
"tr46": "^5.0.0",
@@ -6407,12 +6367,12 @@
"dev": true
},
"blockly": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-11.0.0.tgz",
- "integrity": "sha512-6Ie7HuZWZLaETIVKFEP4FPDz267Pubn6+weQNZvXzqnkOYp9sKPSsPue8QIMCV9Qb5F4wYhqivgiDcZJcE1UlQ==",
+ "version": "12.0.0-beta.1",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.1.tgz",
+ "integrity": "sha512-lECwZ4K+YuLXMM0yxWTz1lwkmDl424sst7h/dhtSefuCki8afjI/F87byYK/ZIZsMKBEz2+8wEJ1Wlx5cYWIAg==",
"dev": true,
"requires": {
- "jsdom": "23.0.0"
+ "jsdom": "25.0.1"
}
},
"brace-expansion": {
@@ -6707,12 +6667,12 @@
}
},
"cssstyle": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz",
- "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
+ "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
"dev": true,
"requires": {
- "rrweb-cssom": "^0.6.0"
+ "rrweb-cssom": "^0.7.1"
}
},
"data-urls": {
@@ -7383,9 +7343,9 @@
}
},
"form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
"dev": true,
"requires": {
"asynckit": "^0.4.0",
@@ -8014,6 +7974,15 @@
"debug": "4"
}
},
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ }
+ },
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
@@ -8365,31 +8334,31 @@
"dev": true
},
"jsdom": {
- "version": "23.0.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.0.tgz",
- "integrity": "sha512-cbL/UCtohJguhFC7c2/hgW6BeZCNvP7URQGnx9tSJRYKCdnfbfWOrtuLTMfiB2VxKsx5wPHVsh/J0aBy9lIIhQ==",
+ "version": "25.0.1",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
+ "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
"dev": true,
"requires": {
- "cssstyle": "^3.0.0",
+ "cssstyle": "^4.1.0",
"data-urls": "^5.0.0",
"decimal.js": "^10.4.3",
"form-data": "^4.0.0",
"html-encoding-sniffer": "^4.0.0",
- "http-proxy-agent": "^7.0.0",
- "https-proxy-agent": "^7.0.2",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.5",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.7",
+ "nwsapi": "^2.2.12",
"parse5": "^7.1.2",
- "rrweb-cssom": "^0.6.0",
+ "rrweb-cssom": "^0.7.1",
"saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
- "tough-cookie": "^4.1.3",
+ "tough-cookie": "^5.0.0",
"w3c-xmlserializer": "^5.0.0",
"webidl-conversions": "^7.0.0",
"whatwg-encoding": "^3.1.1",
"whatwg-mimetype": "^4.0.0",
"whatwg-url": "^14.0.0",
- "ws": "^8.14.2",
+ "ws": "^8.18.0",
"xml-name-validator": "^5.0.0"
},
"dependencies": {
@@ -8412,24 +8381,15 @@
}
},
"https-proxy-agent": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
- "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"dev": true,
"requires": {
"agent-base": "^7.0.2",
"debug": "4"
}
},
- "iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
- },
"whatwg-encoding": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
@@ -8763,9 +8723,9 @@
}
},
"nwsapi": {
- "version": "2.2.10",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz",
- "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==",
+ "version": "2.2.16",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz",
+ "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==",
"dev": true
},
"object-assign": {
@@ -8919,12 +8879,12 @@
"dev": true
},
"parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
+ "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
"dev": true,
"requires": {
- "entities": "^4.4.0"
+ "entities": "^4.5.0"
}
},
"path-exists": {
@@ -9051,12 +9011,6 @@
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
- "psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
- "dev": true
- },
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -9088,12 +9042,6 @@
"side-channel": "^1.0.4"
}
},
- "querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "dev": true
- },
"queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -9290,9 +9238,9 @@
}
},
"rrweb-cssom": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
- "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
+ "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
"dev": true
},
"run-parallel": {
@@ -9617,6 +9565,21 @@
"xtend": "~4.0.1"
}
},
+ "tldts": {
+ "version": "6.1.65",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.65.tgz",
+ "integrity": "sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ==",
+ "dev": true,
+ "requires": {
+ "tldts-core": "^6.1.65"
+ }
+ },
+ "tldts-core": {
+ "version": "6.1.65",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.65.tgz",
+ "integrity": "sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg==",
+ "dev": true
+ },
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -9636,23 +9599,12 @@
}
},
"tough-cookie": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
- "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
+ "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
"dev": true,
"requires": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
- "dependencies": {
- "universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "dev": true
- }
+ "tldts": "^6.1.32"
}
},
"tr46": {
@@ -9765,16 +9717,6 @@
"integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
"dev": true
},
- "url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "requires": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -9889,17 +9831,6 @@
"value-or-function": "^4.0.0",
"vinyl": "^3.0.0",
"vinyl-sourcemap": "^2.0.0"
- },
- "dependencies": {
- "iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
- }
}
},
"vinyl-sourcemap": {
@@ -9938,17 +9869,6 @@
"dev": true,
"requires": {
"iconv-lite": "0.6.3"
- },
- "dependencies": {
- "iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
- }
}
},
"whatwg-mimetype": {
@@ -9958,9 +9878,9 @@
"dev": true
},
"whatwg-url": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
- "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz",
+ "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==",
"dev": true,
"requires": {
"tr46": "^5.0.0",
diff --git a/package.json b/package.json
index 177396cc5d..be5e65263e 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,7 @@
"@eslint/js": "^8.49.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "blockly": "^11.0.0",
+ "blockly": "^12.0.0-beta.1",
"conventional-changelog-conventionalcommits": "^5.0.0",
"eslint": "^8.49.0",
"eslint-config-google": "^0.14.0",
diff --git a/plugins/block-shareable-procedures/src/observable_parameter_model.ts b/plugins/block-shareable-procedures/src/observable_parameter_model.ts
index 4e14647c55..b253874af9 100644
--- a/plugins/block-shareable-procedures/src/observable_parameter_model.ts
+++ b/plugins/block-shareable-procedures/src/observable_parameter_model.ts
@@ -13,7 +13,7 @@ export class ObservableParameterModel
implements Blockly.procedures.IParameterModel
{
private id: string;
- private variable: Blockly.VariableModel;
+ private variable: Blockly.IVariableModel;
private shouldFireEvents = false;
private procedureModel: Blockly.procedures.IProcedureModel | null = null;
@@ -44,8 +44,8 @@ export class ObservableParameterModel
* @returns This parameter model.
*/
setName(name: string, id?: string): this {
- if (name === this.variable.name) return this;
- const oldName = this.variable.name;
+ if (name === this.variable.getName()) return this;
+ const oldName = this.variable.getName();
this.variable =
this.workspace.getVariable(name) ??
this.workspace.createVariable(name, '', id);
@@ -73,7 +73,7 @@ export class ObservableParameterModel
protected createBackingVariable(
name: string,
varId?: string,
- ): Blockly.VariableModel {
+ ): Blockly.IVariableModel {
this.variable =
this.workspace.getVariable(name) ??
this.workspace.createVariable(name, '', varId);
@@ -100,7 +100,7 @@ export class ObservableParameterModel
* @returns the name of this parameter.
*/
getName(): string {
- return this.variable.name;
+ return this.variable.getName();
}
/**
@@ -123,7 +123,7 @@ export class ObservableParameterModel
/**
* @returns the variable model associated with the parameter model.
*/
- getVariableModel(): Blockly.VariableModel {
+ getVariableModel(): Blockly.IVariableModel {
return this.variable;
}
diff --git a/plugins/block-shareable-procedures/test/procedure_blocks.mocha.js b/plugins/block-shareable-procedures/test/procedure_blocks.mocha.js
index 8733ff18c9..8b0694a6eb 100644
--- a/plugins/block-shareable-procedures/test/procedure_blocks.mocha.js
+++ b/plugins/block-shareable-procedures/test/procedure_blocks.mocha.js
@@ -1237,6 +1237,7 @@ suite('Procedures', function () {
'if a procedure caller block was already disabled before ' +
'its definition was disabled, it is not reenabled',
function () {
+ this.workspace.options.disable = true;
const defBlock = createProcDefBlock(this.workspace);
const callBlock = createProcCallBlock(this.workspace);
globalThis.clock.runAll();
diff --git a/plugins/content-highlight/src/index.ts b/plugins/content-highlight/src/index.ts
index 4ec5a2d23f..f8a072b908 100644
--- a/plugins/content-highlight/src/index.ts
+++ b/plugins/content-highlight/src/index.ts
@@ -13,7 +13,7 @@ import * as Blockly from 'blockly/core';
/**
* List of events that cause a change in content area size.
*/
-const contentChangeEvents = [
+const contentChangeEvents: string[] = [
Blockly.Events.VIEWPORT_CHANGE,
Blockly.Events.BLOCK_MOVE,
Blockly.Events.BLOCK_DELETE,
diff --git a/plugins/continuous-toolbox/README.md b/plugins/continuous-toolbox/README.md
index 81504bed6c..34fecd2113 100644
--- a/plugins/continuous-toolbox/README.md
+++ b/plugins/continuous-toolbox/README.md
@@ -21,30 +21,50 @@ npm install @blockly/continuous-toolbox --save
## Usage
-Include the toolbox, flyout, and metrics manager classes from the plugin in the options struct used when injecting Blockly. This style of flyout works best with a toolbox definition that does not use collapsible categories.
+Import and call the `registerContinuousToolbox()` function before injecting
+Blockly. This style of flyout works best with a toolbox definition that does
+not use collapsible categories.
-Note that this plugin uses APIs introduced in the `3.20200924.3` release of Blockly, so you will need to use at least this version or higher.
+Note that this plugin uses APIs introduced in the `v12` release of Blockly, so
+you will need to use at least this version or higher.
```js
import * as Blockly from 'blockly';
-import {
- ContinuousToolbox,
- ContinuousFlyout,
- ContinuousMetrics,
-} from '@blockly/continuous-toolbox';
+import {registerContinuousToolbox} from '@blockly/continuous-toolbox';
// Inject Blockly.
+registerContinuousToolbox();
const workspace = Blockly.inject('blocklyDiv', {
+ toolbox: toolboxCategories,
plugins: {
- toolbox: ContinuousToolbox,
- flyoutsVerticalToolbox: ContinuousFlyout,
- metricsManager: ContinuousMetrics,
+ flyoutsVerticalToolbox: 'ContinuousFlyout',
+ metricsManager: 'ContinuousMetrics',
+ toolbox: 'ContinuousToolbox',
},
- toolbox: toolboxCategories,
// ... your other options here ...
});
```
+## Block Recycling
+
+As a performance optimization, by default the continuous toolbox "recycles"
+blocks to avoid having to create DOM elements for potentially hundreds of blocks
+every time the flyout is shown. With the default set of blocks, this drops the
+time to show the flyout from roughly 35ms to 25ms; the effect is naturally
+larger with larger block sets.
+
+Recycling is unrelated to Blockly's Trash feature; instead, it entails moving
+the blocks offscreen when the flyout is hidden, and then simply repositioning
+them when the flyout is shown again. Not all block types are amenable to this;
+in particular, blocks with dynamic behavior (e.g. those that reference
+variables, support mutations, or have dynamic dropdown fields) are excluded by
+default.
+
+This feature can be toggled by calling `setRecyclingEnabled()` on an instance of
+`ContinuousFlyout`, and the default ruleset for determining which blocks are
+safe for recycling can be replaced with a custom callback by passing that
+function to `setBlockIsRecyclable()`.
+
## License
Apache 2.0
diff --git a/plugins/continuous-toolbox/package-lock.json b/plugins/continuous-toolbox/package-lock.json
index dff8845f3d..c79367ebc4 100644
--- a/plugins/continuous-toolbox/package-lock.json
+++ b/plugins/continuous-toolbox/package-lock.json
@@ -16,7 +16,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0-beta.0"
}
},
"node_modules/@babel/code-frame": {
@@ -261,19 +261,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/@blockly/block-test": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-6.0.6.tgz",
- "integrity": "sha512-qxX3nuMRP3pirq8Pwo6TInZWQZnwVNGuRiwIcfKHvpd80eBXEhNGVLvqTPMKu+GU64oTChqm+qSa8QJ0y8j9xg==",
- "dev": true,
- "license": "Apache 2.0",
- "engines": {
- "node": ">=8.17.0"
- },
- "peerDependencies": {
- "blockly": "^11.0.0"
- }
- },
"node_modules/@blockly/dev-scripts": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/@blockly/dev-scripts/-/dev-scripts-4.0.5.tgz",
@@ -311,17 +298,16 @@
}
},
"node_modules/@blockly/dev-tools": {
- "version": "8.0.7",
- "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.0.7.tgz",
- "integrity": "sha512-/gtLu2tu4ZGaqVCfvivKJ5kWk8lUMQzJh8qtn6Z/U2SJng0nQXcXBEcFVlFAUPt1dE4lNMR7ZYScJw/V+38bgg==",
+ "version": "8.0.12",
+ "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.0.12.tgz",
+ "integrity": "sha512-jE0y/Z7ggmM2JS4l0Xf2ic3eecuM+ZDjUZNCcM2k6yy0VDJoxOPN63Cq2soswXQRuKHfzRMHY48rCvoKL3MqPA==",
"dev": true,
- "license": "Apache-2.0",
"dependencies": {
- "@blockly/block-test": "^6.0.6",
- "@blockly/theme-dark": "^7.0.5",
- "@blockly/theme-deuteranopia": "^6.0.5",
- "@blockly/theme-highcontrast": "^6.0.5",
- "@blockly/theme-tritanopia": "^6.0.5",
+ "@blockly/block-test": "^6.0.11",
+ "@blockly/theme-dark": "^7.0.10",
+ "@blockly/theme-deuteranopia": "^6.0.10",
+ "@blockly/theme-highcontrast": "^6.0.10",
+ "@blockly/theme-tritanopia": "^6.0.10",
"chai": "^4.2.0",
"dat.gui": "^0.7.7",
"lodash.assign": "^4.2.0",
@@ -336,31 +322,23 @@
"blockly": "^11.0.0"
}
},
- "node_modules/@blockly/eslint-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@blockly/eslint-config/-/eslint-config-4.0.1.tgz",
- "integrity": "sha512-yY6aeX6gv0T/+lFwxP35yVbZT2Q6kOgeDfBXTmIsul+S6Qr0ZqMJIkwrCzl1z45YRrB1WBGUJw40rimFwspeyg==",
+ "node_modules/@blockly/dev-tools/node_modules/@blockly/block-test": {
+ "version": "6.0.11",
+ "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-6.0.11.tgz",
+ "integrity": "sha512-aIgcxkof1gLJtJXKSvmnug9iSXbv5Qilnov4Sa/QNURiWJRxvMNqWiTZJVu/reuCQK4Qm4jadg9R9l+eu7ujvw==",
"dev": true,
- "dependencies": {
- "@typescript-eslint/eslint-plugin": "^5.0.0",
- "@typescript-eslint/parser": "^5.0.0",
- "babel-eslint": "^10.1.0",
- "eslint-config-google": "^0.14.0",
- "eslint-plugin-jsdoc": "^46.8.0"
- },
"engines": {
- "node": ">=10.0.0"
+ "node": ">=8.17.0"
},
"peerDependencies": {
- "eslint": "7.x"
+ "blockly": "^11.0.0"
}
},
- "node_modules/@blockly/theme-dark": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.5.tgz",
- "integrity": "sha512-TUS7X+UM5AvTe4Z1mtb371psViAeZSSmTzWuFrdNolX2i9P6XbNA9iKFDF0MObO307pOrtXodmsXpvbtgLeCUw==",
+ "node_modules/@blockly/dev-tools/node_modules/@blockly/theme-dark": {
+ "version": "7.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.10.tgz",
+ "integrity": "sha512-Wc6n115vt9alxzPkEwYtvBBGoPUV3gaYE00dvSKhqXTNoy1Xioujj9kT9VkGmdMO2mhgnJNczSpvxG8tcd4zLQ==",
"dev": true,
- "license": "Apache-2.0",
"engines": {
"node": ">=8.17.0"
},
@@ -368,12 +346,11 @@
"blockly": "^11.0.0"
}
},
- "node_modules/@blockly/theme-deuteranopia": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-6.0.5.tgz",
- "integrity": "sha512-z2hcsmRd5yaKf96gNZ1qM7IDqPb2M492FZhomRz6PgFYw/2rFXmQk6WcI84mmcTLrwfOfLkq/HIaPd23Wc3Hcw==",
+ "node_modules/@blockly/dev-tools/node_modules/@blockly/theme-deuteranopia": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-6.0.10.tgz",
+ "integrity": "sha512-im5nIvf/Z0f1vJ9DK5Euu6URfY8G44xeFsat2b7TySF0BfAUWkGsagK3C6D5NatigPxKZqz3exC9zeXEtprAcg==",
"dev": true,
- "license": "Apache-2.0",
"engines": {
"node": ">=8.17.0"
},
@@ -381,12 +358,11 @@
"blockly": "^11.0.0"
}
},
- "node_modules/@blockly/theme-highcontrast": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-6.0.5.tgz",
- "integrity": "sha512-rLhFM1+M6okikeSGHbZfxqJB7quWFm+RBXCi8ht8bjSkspdh5PCUOs10U4/GbI+YXSuAd2uFdg20xINL+X3KfQ==",
+ "node_modules/@blockly/dev-tools/node_modules/@blockly/theme-highcontrast": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-6.0.10.tgz",
+ "integrity": "sha512-s1hehl/b50IhebCs20hm2hFWbUTqJ2YSGdR0gnp2NLfNNRWwyZHZk+q4aG3k4L0YBWjNfE3XiRCkDISy83dBIA==",
"dev": true,
- "license": "Apache-2.0",
"engines": {
"node": ">=8.17.0"
},
@@ -394,12 +370,11 @@
"blockly": "^11.0.0"
}
},
- "node_modules/@blockly/theme-tritanopia": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-6.0.5.tgz",
- "integrity": "sha512-FVZmKfTQt1OQGsoZP78ET6V9xw83dd2vlJbTdjL1V6xlh0hixFGnqsze+Pw/FXiSWWLgeNKxTqQ6ImwhTHf5wA==",
+ "node_modules/@blockly/dev-tools/node_modules/@blockly/theme-tritanopia": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-6.0.10.tgz",
+ "integrity": "sha512-QNIvUHokGMLnCWUzERRZa6sSkD5RIUynWDI+KNurBH21NeWnSNScQiNu0dS/w5MSkZ/Iqqbi79UZoF49SzEayg==",
"dev": true,
- "license": "Apache-2.0",
"engines": {
"node": ">=8.17.0"
},
@@ -407,6 +382,25 @@
"blockly": "^11.0.0"
}
},
+ "node_modules/@blockly/eslint-config": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@blockly/eslint-config/-/eslint-config-4.0.1.tgz",
+ "integrity": "sha512-yY6aeX6gv0T/+lFwxP35yVbZT2Q6kOgeDfBXTmIsul+S6Qr0ZqMJIkwrCzl1z45YRrB1WBGUJw40rimFwspeyg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "^5.0.0",
+ "@typescript-eslint/parser": "^5.0.0",
+ "babel-eslint": "^10.1.0",
+ "eslint-config-google": "^0.14.0",
+ "eslint-plugin-jsdoc": "^46.8.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "7.x"
+ }
+ },
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
@@ -475,6 +469,22 @@
"node": "^10.12.0 || >=12.0.0"
}
},
+ "node_modules/@eslint/eslintrc/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
"node_modules/@eslint/eslintrc/node_modules/globals": {
"version": "13.24.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
@@ -499,6 +509,12 @@
"node": ">= 4"
}
},
+ "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
"node_modules/@humanwhocodes/config-array": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
@@ -1480,9 +1496,9 @@
}
},
"node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -1509,16 +1525,28 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
+ "node_modules/agent-base": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+ "peer": true,
+ "dependencies": {
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
@@ -1542,28 +1570,6 @@
}
}
},
- "node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-formats/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
"node_modules/ajv-keywords": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
@@ -1687,6 +1693,12 @@
"node": ">=8"
}
},
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "peer": true
+ },
"node_modules/babel-eslint": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
@@ -1751,6 +1763,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/blockly": {
+ "version": "12.0.0-beta.0",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.0.tgz",
+ "integrity": "sha512-Z9cULe95wgQGj87DQZ9RBJRu5oMLQEUTz0beZVcZL/ddVuga6qtZZ9DbaDfCvt4ffVz1O/kyNzPJ+cqvovSjGg==",
+ "peer": true,
+ "dependencies": {
+ "jsdom": "25.0.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/body-parser": {
"version": "1.20.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
@@ -2125,6 +2149,18 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "peer": true,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -2289,17 +2325,41 @@
"node": ">= 8"
}
},
+ "node_modules/cssstyle": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
+ "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
+ "peer": true,
+ "dependencies": {
+ "rrweb-cssom": "^0.7.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/dat.gui": {
"version": "0.7.9",
"resolved": "https://registry.npmjs.org/dat.gui/-/dat.gui-0.7.9.tgz",
"integrity": "sha512-sCNc1OHobc+Erc1HqiswYgHdVNpSJUlk/Hz8vzOCsER7rl+oF/4+v8GXFUyCgtXpoCX6+bnmg07DedLvBLwYKQ==",
"dev": true
},
+ "node_modules/data-urls": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
+ "peer": true,
+ "dependencies": {
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/debug": {
"version": "4.3.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.1.2"
@@ -2326,6 +2386,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/decimal.js": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
+ "peer": true
+ },
"node_modules/deep-eql": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz",
@@ -2427,6 +2493,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "peer": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -2573,6 +2648,18 @@
"node": ">=8.6"
}
},
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "peer": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
"node_modules/envinfo": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
@@ -2826,6 +2913,22 @@
"@babel/highlight": "^7.10.4"
}
},
+ "node_modules/eslint/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
"node_modules/eslint/node_modules/eslint-visitor-keys": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
@@ -2859,6 +2962,12 @@
"node": ">= 4"
}
},
+ "node_modules/eslint/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
"node_modules/espree": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
@@ -2873,6 +2982,18 @@
"node": "^10.12.0 || >=12.0.0"
}
},
+ "node_modules/espree/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/espree/node_modules/eslint-visitor-keys": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
@@ -3330,6 +3451,22 @@
"webpack": "^5.11.0"
}
},
+ "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
"node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
@@ -3339,6 +3476,12 @@
"ajv": "^6.9.1"
}
},
+ "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
"node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
@@ -3357,6 +3500,20 @@
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/form-data": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "peer": true,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -3707,6 +3864,18 @@
"safe-buffer": "~5.1.0"
}
},
+ "node_modules/html-encoding-sniffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
+ "peer": true,
+ "dependencies": {
+ "whatwg-encoding": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/html-entities": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
@@ -3770,6 +3939,19 @@
"node": ">=8.0.0"
}
},
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "peer": true,
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/http-proxy-middleware": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
@@ -3795,6 +3977,19 @@
}
}
},
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+ "peer": true,
+ "dependencies": {
+ "agent-base": "^7.0.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@@ -3819,7 +4014,6 @@
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
@@ -4079,6 +4273,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "peer": true
+ },
"node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -4216,6 +4416,46 @@
"node": ">=12.0.0"
}
},
+ "node_modules/jsdom": {
+ "version": "25.0.1",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
+ "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
+ "peer": true,
+ "dependencies": {
+ "cssstyle": "^4.1.0",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.4.3",
+ "form-data": "^4.0.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.5",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.12",
+ "parse5": "^7.1.2",
+ "rrweb-cssom": "^0.7.1",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^5.0.0",
+ "w3c-xmlserializer": "^5.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0",
+ "ws": "^8.18.0",
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "canvas": "^2.11.2"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
"node_modules/jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -4241,9 +4481,9 @@
"dev": true
},
"node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
"node_modules/json-stable-stringify-without-jsonify": {
@@ -4511,7 +4751,6 @@
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true,
"engines": {
"node": ">= 0.6"
}
@@ -4520,7 +4759,6 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
"dependencies": {
"mime-db": "1.52.0"
},
@@ -4699,8 +4937,7 @@
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/multicast-dns": {
"version": "7.2.5",
@@ -4801,6 +5038,12 @@
"node": ">=8"
}
},
+ "node_modules/nwsapi": {
+ "version": "2.2.16",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz",
+ "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==",
+ "peer": true
+ },
"node_modules/object-inspect": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
@@ -5002,6 +5245,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/parse5": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
+ "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
+ "peer": true,
+ "dependencies": {
+ "entities": "^4.5.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -5230,7 +5485,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
"engines": {
"node": ">=6"
}
@@ -5492,6 +5746,12 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/rrweb-cssom": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
+ "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
+ "peer": true
+ },
"node_modules/run-applescript": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
@@ -5551,8 +5811,19 @@
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "node_modules/saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "peer": true,
+ "dependencies": {
+ "xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=v12.22.7"
+ }
},
"node_modules/schema-utils": {
"version": "4.2.0",
@@ -5573,28 +5844,6 @@
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/schema-utils/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/schema-utils/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
"node_modules/select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
@@ -5983,6 +6232,22 @@
"webpack": "^4.0.0 || ^5.0.0"
}
},
+ "node_modules/source-map-loader/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
"node_modules/source-map-loader/node_modules/ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
@@ -5992,6 +6257,12 @@
"ajv": "^6.9.1"
}
},
+ "node_modules/source-map-loader/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
"node_modules/source-map-loader/node_modules/schema-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
@@ -6208,6 +6479,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "peer": true
+ },
"node_modules/table": {
"version": "6.8.2",
"resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
@@ -6224,28 +6501,6 @@
"node": ">=10.0.0"
}
},
- "node_modules/table/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/table/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
"node_modules/tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -6307,6 +6562,22 @@
}
}
},
+ "node_modules/terser-webpack-plugin/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
"node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
@@ -6330,6 +6601,12 @@
"node": ">= 10.13.0"
}
},
+ "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
"node_modules/terser-webpack-plugin/node_modules/schema-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
@@ -6363,18 +6640,6 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "node_modules/terser/node_modules/acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -6401,6 +6666,24 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/tldts": {
+ "version": "6.1.65",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.65.tgz",
+ "integrity": "sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ==",
+ "peer": true,
+ "dependencies": {
+ "tldts-core": "^6.1.65"
+ },
+ "bin": {
+ "tldts": "bin/cli.js"
+ }
+ },
+ "node_modules/tldts-core": {
+ "version": "6.1.65",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.65.tgz",
+ "integrity": "sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg==",
+ "peer": true
+ },
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -6432,6 +6715,30 @@
"node": ">=0.6"
}
},
+ "node_modules/tough-cookie": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
+ "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
+ "peer": true,
+ "dependencies": {
+ "tldts": "^6.1.32"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
+ "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
+ "peer": true,
+ "dependencies": {
+ "punycode": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/tree-dump": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz",
@@ -6479,9 +6786,9 @@
}
},
"node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"dev": true
},
"node_modules/tsutils": {
@@ -6499,6 +6806,12 @@
"typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
}
},
+ "node_modules/tsutils/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -6546,6 +6859,20 @@
"node": ">= 0.6"
}
},
+ "node_modules/typescript": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
+ "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
@@ -6653,6 +6980,18 @@
"node": ">= 0.8"
}
},
+ "node_modules/w3c-xmlserializer": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+ "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
+ "peer": true,
+ "dependencies": {
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/watchpack": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
@@ -6676,6 +7015,15 @@
"minimalistic-assert": "^1.0.0"
}
},
+ "node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/webpack": {
"version": "5.93.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz",
@@ -6829,13 +7177,6 @@
"url": "https://github.com/sponsors/streamich"
}
},
- "node_modules/webpack-dev-middleware/node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "dev": true,
- "license": "0BSD"
- },
"node_modules/webpack-dev-server": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz",
@@ -6983,16 +7324,20 @@
"node": ">=10.13.0"
}
},
- "node_modules/webpack/node_modules/acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "node_modules/webpack/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
- "bin": {
- "acorn": "bin/acorn"
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
},
- "engines": {
- "node": ">=0.4.0"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/webpack/node_modules/ajv-keywords": {
@@ -7004,6 +7349,12 @@
"ajv": "^6.9.1"
}
},
+ "node_modules/webpack/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
"node_modules/webpack/node_modules/schema-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
@@ -7047,6 +7398,40 @@
"node": ">=0.8.0"
}
},
+ "node_modules/whatwg-encoding": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "peer": true,
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-url": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz",
+ "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==",
+ "peer": true,
+ "dependencies": {
+ "tr46": "^5.0.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -7132,7 +7517,6 @@
"version": "8.18.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
"integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
@@ -7150,6 +7534,21 @@
}
}
},
+ "node_modules/xml-name-validator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "peer": true
+ },
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
@@ -7426,12 +7825,6 @@
"to-fast-properties": "^2.0.0"
}
},
- "@blockly/block-test": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-6.0.6.tgz",
- "integrity": "sha512-qxX3nuMRP3pirq8Pwo6TInZWQZnwVNGuRiwIcfKHvpd80eBXEhNGVLvqTPMKu+GU64oTChqm+qSa8QJ0y8j9xg==",
- "dev": true
- },
"@blockly/dev-scripts": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/@blockly/dev-scripts/-/dev-scripts-4.0.5.tgz",
@@ -7454,22 +7847,59 @@
}
},
"@blockly/dev-tools": {
- "version": "8.0.7",
- "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.0.7.tgz",
- "integrity": "sha512-/gtLu2tu4ZGaqVCfvivKJ5kWk8lUMQzJh8qtn6Z/U2SJng0nQXcXBEcFVlFAUPt1dE4lNMR7ZYScJw/V+38bgg==",
+ "version": "8.0.12",
+ "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.0.12.tgz",
+ "integrity": "sha512-jE0y/Z7ggmM2JS4l0Xf2ic3eecuM+ZDjUZNCcM2k6yy0VDJoxOPN63Cq2soswXQRuKHfzRMHY48rCvoKL3MqPA==",
"dev": true,
"requires": {
- "@blockly/block-test": "^6.0.6",
- "@blockly/theme-dark": "^7.0.5",
- "@blockly/theme-deuteranopia": "^6.0.5",
- "@blockly/theme-highcontrast": "^6.0.5",
- "@blockly/theme-tritanopia": "^6.0.5",
+ "@blockly/block-test": "^6.0.11",
+ "@blockly/theme-dark": "^7.0.10",
+ "@blockly/theme-deuteranopia": "^6.0.10",
+ "@blockly/theme-highcontrast": "^6.0.10",
+ "@blockly/theme-tritanopia": "^6.0.10",
"chai": "^4.2.0",
"dat.gui": "^0.7.7",
"lodash.assign": "^4.2.0",
"lodash.merge": "^4.6.2",
"monaco-editor": "^0.20.0",
"sinon": "^9.0.2"
+ },
+ "dependencies": {
+ "@blockly/block-test": {
+ "version": "6.0.11",
+ "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-6.0.11.tgz",
+ "integrity": "sha512-aIgcxkof1gLJtJXKSvmnug9iSXbv5Qilnov4Sa/QNURiWJRxvMNqWiTZJVu/reuCQK4Qm4jadg9R9l+eu7ujvw==",
+ "dev": true,
+ "requires": {}
+ },
+ "@blockly/theme-dark": {
+ "version": "7.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.10.tgz",
+ "integrity": "sha512-Wc6n115vt9alxzPkEwYtvBBGoPUV3gaYE00dvSKhqXTNoy1Xioujj9kT9VkGmdMO2mhgnJNczSpvxG8tcd4zLQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "@blockly/theme-deuteranopia": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-6.0.10.tgz",
+ "integrity": "sha512-im5nIvf/Z0f1vJ9DK5Euu6URfY8G44xeFsat2b7TySF0BfAUWkGsagK3C6D5NatigPxKZqz3exC9zeXEtprAcg==",
+ "dev": true,
+ "requires": {}
+ },
+ "@blockly/theme-highcontrast": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-6.0.10.tgz",
+ "integrity": "sha512-s1hehl/b50IhebCs20hm2hFWbUTqJ2YSGdR0gnp2NLfNNRWwyZHZk+q4aG3k4L0YBWjNfE3XiRCkDISy83dBIA==",
+ "dev": true,
+ "requires": {}
+ },
+ "@blockly/theme-tritanopia": {
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-6.0.10.tgz",
+ "integrity": "sha512-QNIvUHokGMLnCWUzERRZa6sSkD5RIUynWDI+KNurBH21NeWnSNScQiNu0dS/w5MSkZ/Iqqbi79UZoF49SzEayg==",
+ "dev": true,
+ "requires": {}
+ }
}
},
"@blockly/eslint-config": {
@@ -7485,30 +7915,6 @@
"eslint-plugin-jsdoc": "^46.8.0"
}
},
- "@blockly/theme-dark": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.5.tgz",
- "integrity": "sha512-TUS7X+UM5AvTe4Z1mtb371psViAeZSSmTzWuFrdNolX2i9P6XbNA9iKFDF0MObO307pOrtXodmsXpvbtgLeCUw==",
- "dev": true
- },
- "@blockly/theme-deuteranopia": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-6.0.5.tgz",
- "integrity": "sha512-z2hcsmRd5yaKf96gNZ1qM7IDqPb2M492FZhomRz6PgFYw/2rFXmQk6WcI84mmcTLrwfOfLkq/HIaPd23Wc3Hcw==",
- "dev": true
- },
- "@blockly/theme-highcontrast": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-6.0.5.tgz",
- "integrity": "sha512-rLhFM1+M6okikeSGHbZfxqJB7quWFm+RBXCi8ht8bjSkspdh5PCUOs10U4/GbI+YXSuAd2uFdg20xINL+X3KfQ==",
- "dev": true
- },
- "@blockly/theme-tritanopia": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-6.0.5.tgz",
- "integrity": "sha512-FVZmKfTQt1OQGsoZP78ET6V9xw83dd2vlJbTdjL1V6xlh0hixFGnqsze+Pw/FXiSWWLgeNKxTqQ6ImwhTHf5wA==",
- "dev": true
- },
"@discoveryjs/json-ext": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
@@ -7558,6 +7964,18 @@
"strip-json-comments": "^3.1.1"
},
"dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
"globals": {
"version": "13.24.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
@@ -7572,6 +7990,12 @@
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
}
}
},
@@ -7710,7 +8134,8 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
"integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@jsonjoy.com/json-pack": {
"version": "1.1.0",
@@ -7728,7 +8153,8 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz",
"integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@leichtgewicht/ip-codec": {
"version": "2.0.5",
@@ -8272,19 +8698,22 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
"integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@webpack-cli/info": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
"integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@webpack-cli/serve": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
"integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@xtuc/ieee754": {
"version": "1.2.0",
@@ -8315,33 +8744,44 @@
}
},
"acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"dev": true
},
"acorn-import-attributes": {
"version": "1.9.5",
"resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
"integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
+ },
+ "agent-base": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+ "peer": true,
+ "requires": {
+ "debug": "^4.3.4"
+ }
},
"ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
}
},
"ajv-formats": {
@@ -8351,26 +8791,6 @@
"dev": true,
"requires": {
"ajv": "^8.0.0"
- },
- "dependencies": {
- "ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- }
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- }
}
},
"ajv-keywords": {
@@ -8458,6 +8878,12 @@
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true
},
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "peer": true
+ },
"babel-eslint": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
@@ -8504,6 +8930,15 @@
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"dev": true
},
+ "blockly": {
+ "version": "12.0.0-beta.0",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.0.tgz",
+ "integrity": "sha512-Z9cULe95wgQGj87DQZ9RBJRu5oMLQEUTz0beZVcZL/ddVuga6qtZZ9DbaDfCvt4ffVz1O/kyNzPJ+cqvovSjGg==",
+ "peer": true,
+ "requires": {
+ "jsdom": "25.0.1"
+ }
+ },
"body-parser": {
"version": "1.20.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
@@ -8760,6 +9195,15 @@
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"dev": true
},
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "peer": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -8888,17 +9332,35 @@
"which": "^2.0.1"
}
},
+ "cssstyle": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
+ "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
+ "peer": true,
+ "requires": {
+ "rrweb-cssom": "^0.7.1"
+ }
+ },
"dat.gui": {
"version": "0.7.9",
"resolved": "https://registry.npmjs.org/dat.gui/-/dat.gui-0.7.9.tgz",
"integrity": "sha512-sCNc1OHobc+Erc1HqiswYgHdVNpSJUlk/Hz8vzOCsER7rl+oF/4+v8GXFUyCgtXpoCX6+bnmg07DedLvBLwYKQ==",
"dev": true
},
+ "data-urls": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
+ "peer": true,
+ "requires": {
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
+ }
+ },
"debug": {
"version": "4.3.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
- "dev": true,
"requires": {
"ms": "2.1.2"
}
@@ -8909,6 +9371,12 @@
"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
"dev": true
},
+ "decimal.js": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
+ "peer": true
+ },
"deep-eql": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz",
@@ -8972,6 +9440,12 @@
"integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
"dev": true
},
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "peer": true
+ },
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -9079,6 +9553,12 @@
"strip-ansi": "^6.0.1"
}
},
+ "entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "peer": true
+ },
"envinfo": {
"version": "7.13.0",
"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
@@ -9190,6 +9670,18 @@
"@babel/highlight": "^7.10.4"
}
},
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
"eslint-visitor-keys": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
@@ -9210,6 +9702,12 @@
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
}
}
},
@@ -9217,7 +9715,8 @@
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz",
"integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"eslint-plugin-jsdoc": {
"version": "46.10.1",
@@ -9293,6 +9792,12 @@
"eslint-visitor-keys": "^1.3.0"
},
"dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ },
"eslint-visitor-keys": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
@@ -9638,10 +10143,29 @@
"tapable": "^2.2.1"
},
"dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"schema-utils": {
@@ -9657,6 +10181,17 @@
}
}
},
+ "form-data": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "peer": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
"forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -9910,6 +10445,15 @@
}
}
},
+ "html-encoding-sniffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
+ "peer": true,
+ "requires": {
+ "whatwg-encoding": "^3.1.1"
+ }
+ },
"html-entities": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
@@ -9952,6 +10496,16 @@
"requires-port": "^1.0.0"
}
},
+ "http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "peer": true,
+ "requires": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ }
+ },
"http-proxy-middleware": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
@@ -9965,6 +10519,16 @@
"micromatch": "^4.0.2"
}
},
+ "https-proxy-agent": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+ "peer": true,
+ "requires": {
+ "agent-base": "^7.0.2",
+ "debug": "4"
+ }
+ },
"human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@@ -9981,7 +10545,6 @@
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
}
@@ -10142,6 +10705,12 @@
"isobject": "^3.0.1"
}
},
+ "is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "peer": true
+ },
"is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -10235,6 +10804,35 @@
"integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
"dev": true
},
+ "jsdom": {
+ "version": "25.0.1",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
+ "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
+ "peer": true,
+ "requires": {
+ "cssstyle": "^4.1.0",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.4.3",
+ "form-data": "^4.0.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.5",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.12",
+ "parse5": "^7.1.2",
+ "rrweb-cssom": "^0.7.1",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^5.0.0",
+ "w3c-xmlserializer": "^5.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0",
+ "ws": "^8.18.0",
+ "xml-name-validator": "^5.0.0"
+ }
+ },
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -10254,9 +10852,9 @@
"dev": true
},
"json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
"json-stable-stringify-without-jsonify": {
@@ -10461,14 +11059,12 @@
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
"requires": {
"mime-db": "1.52.0"
}
@@ -10600,8 +11196,7 @@
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"multicast-dns": {
"version": "7.2.5",
@@ -10683,6 +11278,12 @@
"path-key": "^3.0.0"
}
},
+ "nwsapi": {
+ "version": "2.2.16",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz",
+ "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==",
+ "peer": true
+ },
"object-inspect": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
@@ -10816,6 +11417,15 @@
"lines-and-columns": "^1.1.6"
}
},
+ "parse5": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
+ "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
+ "peer": true,
+ "requires": {
+ "entities": "^4.5.0"
+ }
+ },
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -10976,8 +11586,7 @@
"punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
},
"qs": {
"version": "6.11.0",
@@ -11146,6 +11755,12 @@
"glob": "^7.1.3"
}
},
+ "rrweb-cssom": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
+ "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
+ "peer": true
+ },
"run-applescript": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
@@ -11170,8 +11785,16 @@
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "peer": true,
+ "requires": {
+ "xmlchars": "^2.2.0"
+ }
},
"schema-utils": {
"version": "4.2.0",
@@ -11183,26 +11806,6 @@
"ajv": "^8.9.0",
"ajv-formats": "^2.1.1",
"ajv-keywords": "^5.1.0"
- },
- "dependencies": {
- "ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- }
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- }
}
},
"select-hose": {
@@ -11500,10 +12103,29 @@
"whatwg-mimetype": "^2.3.0"
},
"dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"schema-utils": {
@@ -11672,6 +12294,12 @@
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true
},
+ "symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "peer": true
+ },
"table": {
"version": "6.8.2",
"resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
@@ -11683,26 +12311,6 @@
"slice-ansi": "^4.0.0",
"string-width": "^4.2.3",
"strip-ansi": "^6.0.1"
- },
- "dependencies": {
- "ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- }
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- }
}
},
"tapable": {
@@ -11721,14 +12329,6 @@
"acorn": "^8.8.2",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
- },
- "dependencies": {
- "acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
- "dev": true
- }
}
},
"terser-webpack-plugin": {
@@ -11744,11 +12344,24 @@
"terser": "^5.26.0"
},
"dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"jest-worker": {
"version": "27.5.1",
@@ -11761,6 +12374,12 @@
"supports-color": "^8.0.0"
}
},
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
"schema-utils": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
@@ -11793,7 +12412,8 @@
"version": "1.21.0",
"resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz",
"integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"thunky": {
"version": "1.1.0",
@@ -11801,6 +12421,21 @@
"integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
"dev": true
},
+ "tldts": {
+ "version": "6.1.65",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.65.tgz",
+ "integrity": "sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ==",
+ "peer": true,
+ "requires": {
+ "tldts-core": "^6.1.65"
+ }
+ },
+ "tldts-core": {
+ "version": "6.1.65",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.65.tgz",
+ "integrity": "sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg==",
+ "peer": true
+ },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -11822,11 +12457,30 @@
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
"dev": true
},
+ "tough-cookie": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
+ "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
+ "peer": true,
+ "requires": {
+ "tldts": "^6.1.32"
+ }
+ },
+ "tr46": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
+ "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
+ "peer": true,
+ "requires": {
+ "punycode": "^2.3.1"
+ }
+ },
"tree-dump": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz",
"integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"ts-loader": {
"version": "9.5.1",
@@ -11850,9 +12504,9 @@
}
},
"tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"dev": true
},
"tsutils": {
@@ -11862,6 +12516,14 @@
"dev": true,
"requires": {
"tslib": "^1.8.1"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ }
}
},
"type-check": {
@@ -11895,6 +12557,13 @@
"mime-types": "~2.1.24"
}
},
+ "typescript": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz",
+ "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==",
+ "dev": true,
+ "peer": true
+ },
"undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
@@ -11962,6 +12631,15 @@
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
"dev": true
},
+ "w3c-xmlserializer": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+ "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
+ "peer": true,
+ "requires": {
+ "xml-name-validator": "^5.0.0"
+ }
+ },
"watchpack": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
@@ -11981,6 +12659,12 @@
"minimalistic-assert": "^1.0.0"
}
},
+ "webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "peer": true
+ },
"webpack": {
"version": "5.93.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz",
@@ -12013,16 +12697,29 @@
"webpack-sources": "^3.2.3"
},
"dependencies": {
- "acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
- "dev": true
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
},
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"schema-utils": {
@@ -12092,12 +12789,6 @@
"tree-dump": "^1.0.1",
"tslib": "^2.0.0"
}
- },
- "tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "dev": true
}
}
},
@@ -12216,6 +12907,31 @@
"integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
"dev": true
},
+ "whatwg-encoding": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "peer": true,
+ "requires": {
+ "iconv-lite": "0.6.3"
+ }
+ },
+ "whatwg-mimetype": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "peer": true
+ },
+ "whatwg-url": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz",
+ "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==",
+ "peer": true,
+ "requires": {
+ "tr46": "^5.0.0",
+ "webidl-conversions": "^7.0.0"
+ }
+ },
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -12275,7 +12991,19 @@
"version": "8.18.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
"integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
- "dev": true
+ "requires": {}
+ },
+ "xml-name-validator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "peer": true
+ },
+ "xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "peer": true
},
"y18n": {
"version": "5.0.8",
@@ -12337,4 +13065,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/continuous-toolbox/package.json b/plugins/continuous-toolbox/package.json
index 3b3d256e11..6421327cac 100644
--- a/plugins/continuous-toolbox/package.json
+++ b/plugins/continuous-toolbox/package.json
@@ -43,7 +43,7 @@
"@blockly/dev-tools": "^8.0.11"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0-beta.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/continuous-toolbox/src/ContinuousCategory.js b/plugins/continuous-toolbox/src/ContinuousCategory.js
deleted file mode 100644
index f0c29fe6f5..0000000000
--- a/plugins/continuous-toolbox/src/ContinuousCategory.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * @license
- * Copyright 2020 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Toolbox category with styling for continuous toolbox.
- */
-
-import * as Blockly from 'blockly/core';
-
-/** Toolbox category for continuous toolbox. */
-export class ContinuousCategory extends Blockly.ToolboxCategory {
- /**
- * Constructor for ContinuousCategory which is used in ContinuousToolbox.
- * @override
- */
- constructor(categoryDef, toolbox) {
- super(categoryDef, toolbox);
- }
-
- /** @override */
- createLabelDom_(name) {
- const label = document.createElement('div');
- label.setAttribute('id', this.getId() + '.label');
- label.textContent = name;
- label.classList.add(this.cssConfig_['label']);
- return label;
- }
-
- /** @override */
- createIconDom_() {
- const icon = document.createElement('div');
- icon.classList.add('categoryBubble');
- icon.style.backgroundColor = this.colour_;
- return icon;
- }
-
- /** @override */
- addColourBorder_() {
- // No-op
- }
-
- /** @override */
- setSelected(isSelected) {
- if (isSelected) {
- this.rowDiv_.style.backgroundColor = 'gray';
- Blockly.utils.dom.addClass(this.rowDiv_, this.cssConfig_['selected']);
- } else {
- this.rowDiv_.style.backgroundColor = '';
- Blockly.utils.dom.removeClass(this.rowDiv_, this.cssConfig_['selected']);
- }
- Blockly.utils.aria.setState(
- /** @type {!Element} */ (this.htmlDiv_),
- Blockly.utils.aria.State.SELECTED,
- isSelected,
- );
- }
-}
-
-Blockly.registry.register(
- Blockly.registry.Type.TOOLBOX_ITEM,
- Blockly.ToolboxCategory.registrationName,
- ContinuousCategory,
- true,
-);
diff --git a/plugins/continuous-toolbox/src/ContinuousCategory.ts b/plugins/continuous-toolbox/src/ContinuousCategory.ts
new file mode 100644
index 0000000000..6a5da76c9c
--- /dev/null
+++ b/plugins/continuous-toolbox/src/ContinuousCategory.ts
@@ -0,0 +1,78 @@
+/**
+ * @license
+ * Copyright 2020 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @fileoverview Toolbox category with styling for continuous toolbox.
+ */
+
+import * as Blockly from 'blockly/core';
+
+/** Toolbox category for continuous toolbox. */
+export class ContinuousCategory extends Blockly.ToolboxCategory {
+ /**
+ * Creates a DOM element to display the category's label.
+ *
+ * @param name The name of this category.
+ * @returns The newly created category label DOM element.
+ */
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ override createLabelDom_(name: string): Element {
+ const label = document.createElement('div');
+ label.setAttribute('id', this.getId() + '.label');
+ label.textContent = name;
+ label.classList.add(this.cssConfig_['label'] ?? '');
+ return label;
+ }
+
+ /**
+ * Creates a DOM element to display the category's icon. This category uses
+ * color swatches instead of graphical icons.
+ *
+ * @returns The newly created category icon DOM element.
+ */
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ override createIconDom_(): Element {
+ const icon = document.createElement('div');
+ icon.classList.add('categoryBubble');
+ icon.style.backgroundColor = this.colour_;
+ return icon;
+ }
+
+ /**
+ * Adds a color indicator to the toolbox category. Intentionally a no-op.
+ */
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ override addColourBorder_() {
+ // No-op
+ }
+
+ /**
+ * Sets whether or not this category is selected in the toolbox.
+ *
+ * @param isSelected True if this category is selected, otherwise false.
+ */
+ override setSelected(isSelected: boolean) {
+ if (!this.rowDiv_ || !this.htmlDiv_) return;
+ if (isSelected) {
+ this.rowDiv_.style.backgroundColor = 'gray';
+ Blockly.utils.dom.addClass(
+ this.rowDiv_,
+ this.cssConfig_['selected'] ?? '',
+ );
+ } else {
+ this.rowDiv_.style.backgroundColor = '';
+ Blockly.utils.dom.removeClass(
+ this.rowDiv_,
+ this.cssConfig_['selected'] ?? '',
+ );
+ }
+ Blockly.utils.aria.setState(
+ this.htmlDiv_,
+ Blockly.utils.aria.State.SELECTED,
+ isSelected,
+ );
+ }
+}
diff --git a/plugins/continuous-toolbox/src/ContinuousFlyout.js b/plugins/continuous-toolbox/src/ContinuousFlyout.js
deleted file mode 100644
index 32b063bb6a..0000000000
--- a/plugins/continuous-toolbox/src/ContinuousFlyout.js
+++ /dev/null
@@ -1,312 +0,0 @@
-/**
- * @license
- * Copyright 2020 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Flyout that supports always-open continuous scrolling.
- */
-
-import * as Blockly from 'blockly/core';
-import {ContinuousToolbox} from './ContinuousToolbox';
-import {ContinuousFlyoutMetrics} from './ContinuousMetricsFlyout';
-
-/**
- * Class for continuous flyout.
- */
-export class ContinuousFlyout extends Blockly.VerticalFlyout {
- /** @override */
- constructor(workspaceOptions) {
- super(workspaceOptions);
-
- /**
- * List of scroll positions for each category.
- * @type {!Array<{name: string, position: !Object}>}
- */
- this.scrollPositions = [];
-
- /**
- * Target scroll position, used to smoothly scroll to a given category
- * location when selected.
- * @type {?number}
- */
- this.scrollTarget = null;
-
- /**
- * The percentage of the distance to the scrollTarget that should be
- * scrolled at a time. Lower values will produce a smoother, slower scroll.
- * @type {number}
- */
- this.scrollAnimationFraction = 0.3;
-
- /**
- * Whether to recycle blocks when refreshing the flyout. When false, do not
- * allow anything to be recycled. The default is to recycle.
- * @type {boolean}
- * @private
- */
- this.recyclingEnabled_ = true;
-
- this.workspace_.setMetricsManager(
- new ContinuousFlyoutMetrics(this.workspace_, this),
- );
-
- this.workspace_.addChangeListener((e) => {
- if (e.type === Blockly.Events.VIEWPORT_CHANGE) {
- this.selectCategoryByScrollPosition_(-this.workspace_.scrollY);
- }
- });
-
- this.autoClose = false;
- }
-
- /**
- * Gets parent toolbox.
- * Since we registered the ContinuousToolbox, we know that's its type.
- * @returns {!ContinuousToolbox} Toolbox that owns this flyout.
- * @private
- */
- getParentToolbox_() {
- const toolbox = this.targetWorkspace.getToolbox();
- return /** @type {!ContinuousToolbox} */ (toolbox);
- }
-
- /**
- * Records scroll position for each category in the toolbox.
- * The scroll position is determined by the coordinates of each category's
- * label after the entire flyout has been rendered.
- * @package
- */
- recordScrollPositions() {
- this.scrollPositions = [];
- const categoryLabels = this.buttons_.filter(
- (button) =>
- button.isLabel() &&
- this.getParentToolbox_().getCategoryByName(button.getButtonText()),
- );
- for (const [index, button] of categoryLabels.entries()) {
- if (button.isLabel()) {
- const position = button.getPosition();
- const adjustedPosition = new Blockly.utils.Coordinate(
- position.x,
- position.y - this.labelGaps[index],
- );
- this.scrollPositions.push({
- name: button.getButtonText(),
- position: adjustedPosition,
- });
- }
- }
- }
-
- /**
- * Returns the scroll position for the given category name.
- * @param {string} name Category name.
- * @returns {?Object} Scroll position for given category, or null if not
- * found.
- * @package
- */
- getCategoryScrollPosition(name) {
- for (const scrollInfo of this.scrollPositions) {
- if (scrollInfo.name === name) {
- return scrollInfo.position;
- }
- }
- console.warn(`Scroll position not recorded for category ${name}`);
- return null;
- }
-
- /**
- * Selects an item in the toolbox based on the scroll position of the flyout.
- * @param {number} position Current scroll position of the workspace.
- * @private
- */
- selectCategoryByScrollPosition_(position) {
- // If we are currently auto-scrolling, due to selecting a category by
- // clicking on it, do not update the category selection.
- if (this.scrollTarget !== null) {
- return;
- }
- const scaledPosition = Math.round(position / this.workspace_.scale);
- // Traverse the array of scroll positions in reverse, so we can select the
- // furthest category that the scroll position is beyond.
- for (let i = this.scrollPositions.length - 1; i >= 0; i--) {
- const category = this.scrollPositions[i];
- if (scaledPosition >= category.position.y) {
- this.getParentToolbox_().selectCategoryByName(category.name);
- return;
- }
- }
- }
-
- /**
- * Scrolls flyout to given position.
- * @param {number} position The Y coordinate to scroll to.
- */
- scrollTo(position) {
- // Set the scroll target to either the scaled position or the lowest
- // possible scroll point, whichever is smaller.
- const metrics = this.workspace_.getMetrics();
- this.scrollTarget = Math.min(
- position * this.workspace_.scale,
- metrics.scrollHeight - metrics.viewHeight,
- );
-
- this.stepScrollAnimation_();
- }
-
- /**
- * Step the scrolling animation by scrolling a fraction of the way to
- * a scroll target, and request the next frame if necessary.
- * @private
- */
- stepScrollAnimation_() {
- if (this.scrollTarget === null) {
- return;
- }
-
- const currentScrollPos = -this.workspace_.scrollY;
- const diff = this.scrollTarget - currentScrollPos;
- if (Math.abs(diff) < 1) {
- this.workspace_.scrollbar.setY(this.scrollTarget);
- this.scrollTarget = null;
- return;
- }
- this.workspace_.scrollbar.setY(
- currentScrollPos + diff * this.scrollAnimationFraction,
- );
-
- requestAnimationFrame(this.stepScrollAnimation_.bind(this));
- }
-
- /**
- * Add additional padding to the bottom of the flyout if needed,
- * in order to make it possible to scroll to the top of the last category.
- * @param {!Blockly.MetricsManager.ContainerRegion} contentMetrics Content
- * metrics for the flyout.
- * @param {!Blockly.MetricsManager.ContainerRegion} viewMetrics View metrics
- * for the flyout.
- * @returns {number} Additional bottom padding.
- */
- calculateBottomPadding(contentMetrics, viewMetrics) {
- if (this.scrollPositions.length > 0) {
- const lastCategory =
- this.scrollPositions[this.scrollPositions.length - 1];
- const lastPosition = lastCategory.position.y * this.workspace_.scale;
- const lastCategoryHeight = contentMetrics.height - lastPosition;
- if (lastCategoryHeight < viewMetrics.height) {
- return viewMetrics.height - lastCategoryHeight;
- }
- }
- return 0;
- }
-
- /** @override */
- getX() {
- if (
- this.isVisible() &&
- this.targetWorkspace.toolboxPosition === this.toolboxPosition_ &&
- this.targetWorkspace.getToolbox() &&
- this.toolboxPosition_ !== Blockly.utils.toolbox.Position.LEFT
- ) {
- // This makes it so blocks cannot go under the flyout in RTL mode.
- return this.targetWorkspace.getMetricsManager().getViewMetrics().width;
- }
-
- return super.getX();
- }
-
- /**
- * @override
- */
- show(flyoutDef) {
- super.show(flyoutDef);
- this.recordScrollPositions();
- this.workspace_.resizeContents();
- if (!this.getParentToolbox_().getSelectedItem()) {
- this.selectCategoryByScrollPosition_(0);
- }
- }
-
- /**
- * Determine if this block can be recycled in the flyout. Blocks that have no
- * variables and are not dynamic shadows can be recycled.
- * @param {!Blockly.BlockSvg} block The block to attempt to recycle.
- * @returns {boolean} True if the block can be recycled.
- * @protected
- */
- blockIsRecyclable_(block) {
- if (!this.recyclingEnabled_) {
- return false;
- }
-
- // If the block needs to parse mutations, never recycle.
- if (block.mutationToDom && block.domToMutation) {
- return false;
- }
-
- if (!block.isEnabled()) {
- return false;
- }
-
- for (const input of block.inputList) {
- for (const field of input.fieldRow) {
- // No variables.
- if (field.referencesVariables()) {
- return false;
- }
- if (field instanceof Blockly.FieldDropdown) {
- if (field.isOptionListDynamic()) {
- return false;
- }
- }
- }
- // Check children.
- if (input.connection) {
- const targetBlock =
- /** @type {Blockly.BlockSvg} */
- (input.connection.targetBlock());
- if (targetBlock && !this.blockIsRecyclable_(targetBlock)) {
- return false;
- }
- }
- }
- return true;
- }
-
- /**
- * Sets the function used to determine whether a block is recyclable.
- * @param {function(!Blockly.BlockSvg):boolean} func The function used to
- * determine if a block is recyclable.
- * @public
- */
- setBlockIsRecyclable(func) {
- this.blockIsRecyclable_ = func;
- }
-
- /**
- * Set whether the flyout can recycle blocks.
- * @param {boolean} isEnabled True to allow blocks to be recycled, false
- * otherwise.
- * @public
- */
- setRecyclingEnabled(isEnabled) {
- this.recyclingEnabled_ = isEnabled;
- }
-
- /**
- * Lay out the blocks in the flyout.
- * @param {Array} contents The blocks and buttons to lay out.
- * @param {Array} gaps The visible gaps between blocks.
- */
- layout_(contents, gaps) {
- super.layout_(contents, gaps);
- this.labelGaps = [];
- for (const [index, item] of contents.entries()) {
- if (item.type === 'button' && item.button.isLabel()) {
- this.labelGaps.push(gaps[index - 1] ?? this.MARGIN);
- }
- }
- }
-}
diff --git a/plugins/continuous-toolbox/src/ContinuousFlyout.ts b/plugins/continuous-toolbox/src/ContinuousFlyout.ts
new file mode 100644
index 0000000000..94ca0a7828
--- /dev/null
+++ b/plugins/continuous-toolbox/src/ContinuousFlyout.ts
@@ -0,0 +1,297 @@
+/**
+ * @license
+ * Copyright 2020 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @fileoverview Flyout that supports always-open continuous scrolling.
+ */
+
+import * as Blockly from 'blockly/core';
+import {ContinuousToolbox} from './ContinuousToolbox';
+import {ContinuousFlyoutMetrics} from './ContinuousFlyoutMetrics';
+import {RecyclableBlockFlyoutInflater} from './RecyclableBlockFlyoutInflater';
+
+interface LabelFlyoutItem extends Blockly.FlyoutItem {
+ // Blockly.FlyoutButton represents both buttons and labels; a label is just
+ // a borderless, non-clickable button.
+ getElement(): Blockly.FlyoutButton;
+}
+
+/**
+ * Class for continuous flyout.
+ */
+export class ContinuousFlyout extends Blockly.VerticalFlyout {
+ /**
+ * Target scroll position, used to smoothly scroll to a given category
+ * location when selected.
+ */
+ private scrollTarget?: number;
+
+ /**
+ * Map from category name to its position in the flyout.
+ */
+ private scrollPositions = new Map();
+
+ /**
+ * The percentage of the distance to the scrollTarget that should be
+ * scrolled at a time. Lower values will produce a smoother, slower scroll.
+ */
+ protected scrollAnimationFraction = 0.3;
+
+ /**
+ * Prevents the flyout from closing automatically when a block is dragged out.
+ */
+ override autoClose = false;
+
+ /**
+ * Creates a new ContinuousFlyout.
+ *
+ * @param workspaceOptions The injection options for the flyout's workspace.
+ */
+ constructor(workspaceOptions: Blockly.Options) {
+ super(workspaceOptions);
+
+ this.getWorkspace().setMetricsManager(
+ new ContinuousFlyoutMetrics(this.getWorkspace(), this),
+ );
+
+ this.getWorkspace().addChangeListener((e: Blockly.Events.Abstract) => {
+ if (e.type === Blockly.Events.VIEWPORT_CHANGE) {
+ this.selectCategoryByScrollPosition(-this.getWorkspace().scrollY);
+ }
+ });
+
+ this.setRecyclingEnabled(true);
+ }
+
+ /**
+ * Gets parent toolbox.
+ * Since we registered the ContinuousToolbox, we know that's its type.
+ *
+ * @returns Toolbox that owns this flyout.
+ */
+ private getParentToolbox(): ContinuousToolbox {
+ return this.targetWorkspace.getToolbox() as ContinuousToolbox;
+ }
+
+ /**
+ * Records scroll position for each category in the toolbox.
+ * The scroll position is determined by the coordinates of each category's
+ * label after the entire flyout has been rendered.
+ */
+ private recordScrollPositions() {
+ this.scrollPositions.clear();
+ this.getContents()
+ .filter(this.toolboxItemIsLabel.bind(this))
+ .map((item) => item.getElement())
+ .forEach((label) => {
+ this.scrollPositions.set(
+ label.getButtonText(),
+ label.getPosition().y - label.height,
+ );
+ });
+ }
+
+ /**
+ * Validates and typechecks that the given toolbox item represents a label.
+ *
+ * @param item The toolbox item to check.
+ * @returns True if the item represents a label in the flyout, and is a
+ * Blockly.FlyoutButton.
+ */
+ protected toolboxItemIsLabel(
+ item: Blockly.FlyoutItem,
+ ): item is LabelFlyoutItem {
+ const element = item.getElement();
+ return !!(
+ item.getType() === 'label' &&
+ // Note that `FlyoutButton` represents both buttons and labels.
+ element instanceof Blockly.FlyoutButton &&
+ element.isLabel() &&
+ this.getParentToolbox().getCategoryByName(element.getButtonText())
+ );
+ }
+
+ /**
+ * Selects an item in the toolbox based on the scroll position of the flyout.
+ *
+ * @param position Current scroll position of the workspace.
+ */
+ private selectCategoryByScrollPosition(position: number) {
+ // If we are currently auto-scrolling, due to selecting a category by
+ // clicking on it, do not update the category selection.
+ if (this.scrollTarget) return;
+
+ const scaledPosition = Math.round(position / this.getWorkspace().scale);
+ // Traverse the array of scroll positions in reverse, so we can select the
+ // furthest category that the scroll position is beyond.
+ for (const [name, position] of [
+ ...this.scrollPositions.entries(),
+ ].reverse()) {
+ if (scaledPosition >= position) {
+ this.getParentToolbox().selectCategoryByName(name);
+ return;
+ }
+ }
+ }
+
+ /**
+ * Scrolls the flyout to given position.
+ *
+ * @param position The Y coordinate to scroll to.
+ */
+ scrollTo(position: number) {
+ // Set the scroll target to either the scaled position or the lowest
+ // possible scroll point, whichever is smaller.
+ const metrics = this.getWorkspace().getMetrics();
+ this.scrollTarget = Math.min(
+ position * this.getWorkspace().scale,
+ metrics.scrollHeight - metrics.viewHeight,
+ );
+
+ this.stepScrollAnimation();
+ }
+
+ /**
+ * Scrolls the flyout to display the given category at the top.
+ *
+ * @param category The toolbox category to scroll to in the flyout.
+ */
+ scrollToCategory(category: Blockly.ISelectableToolboxItem) {
+ const position = this.scrollPositions.get(category.getName());
+ if (!position) {
+ console.warn(`Scroll position not recorded for category ${name}`);
+ return;
+ }
+ this.scrollTo(position);
+ }
+
+ /**
+ * Step the scrolling animation by scrolling a fraction of the way to
+ * a scroll target, and request the next frame if necessary.
+ */
+ private stepScrollAnimation() {
+ if (!this.scrollTarget) return;
+
+ const currentScrollPos = -this.getWorkspace().scrollY;
+ const diff = this.scrollTarget - currentScrollPos;
+ if (Math.abs(diff) < 1) {
+ this.getWorkspace().scrollbar?.setY(this.scrollTarget);
+ this.scrollTarget = undefined;
+ return;
+ }
+ this.getWorkspace().scrollbar?.setY(
+ currentScrollPos + diff * this.scrollAnimationFraction,
+ );
+
+ requestAnimationFrame(this.stepScrollAnimation.bind(this));
+ }
+
+ /**
+ * Handles mouse wheel events.
+ *
+ * @param e The mouse wheel event to handle.
+ */
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ protected override wheel_(e: WheelEvent) {
+ // Don't scroll in response to mouse wheel events if we're currently
+ // animating scrolling to a category.
+ if (this.scrollTarget) return;
+
+ super.wheel_(e);
+ }
+
+ /**
+ * Calculates the additional padding needed at the bottom of the flyout in
+ * order to make it possible to scroll to the top of the last category.
+ *
+ * @param contentMetrics Content metrics for the flyout.
+ * @param viewMetrics View metrics for the flyout.
+ * @returns The additional bottom padding needed.
+ */
+ calculateBottomPadding(
+ contentMetrics: Blockly.MetricsManager.ContainerRegion,
+ viewMetrics: Blockly.MetricsManager.ContainerRegion,
+ ): number {
+ if (this.scrollPositions.size === 0) return 0;
+
+ const lastPosition =
+ ([...this.scrollPositions.values()].pop() ?? 0) *
+ this.getWorkspace().scale;
+ const lastCategoryHeight = contentMetrics.height - lastPosition;
+ if (lastCategoryHeight < viewMetrics.height) {
+ return viewMetrics.height - lastCategoryHeight;
+ }
+
+ return 0;
+ }
+
+ /**
+ * Returns the X coordinate for the flyout's position.
+ */
+ override getX(): number {
+ if (
+ this.isVisible() &&
+ // Make sure that this flyout is associated with a toolbox and not e.g.
+ // a simple flyout or the trashcan flyout.
+ this.targetWorkspace.toolboxPosition === this.toolboxPosition_ &&
+ this.targetWorkspace.getToolbox() &&
+ this.toolboxPosition_ !== Blockly.utils.toolbox.Position.LEFT
+ ) {
+ // This makes it so blocks cannot go under the flyout in RTL mode.
+ return this.targetWorkspace.getMetricsManager().getViewMetrics().width;
+ }
+
+ return super.getX();
+ }
+
+ /**
+ * Displays the given contents in the flyout.
+ *
+ * @param flyoutDef A string or JSON object specifying the contents of the
+ * flyout.
+ */
+ override show(flyoutDef: Blockly.utils.toolbox.FlyoutDefinition | string) {
+ super.show(flyoutDef);
+ this.recordScrollPositions();
+ this.getWorkspace().resizeContents();
+ if (!this.getParentToolbox().getSelectedItem()) {
+ this.selectCategoryByScrollPosition(0);
+ }
+ this.getRecyclableInflater().emptyRecycledBlocks();
+ }
+
+ /**
+ * Sets the function used to determine whether a block is recyclable.
+ *
+ * @param func The function used to determine if a block is recyclable.
+ */
+ setBlockIsRecyclable(func: (block: Blockly.Block) => boolean) {
+ this.getRecyclableInflater().recycleEligibilityChecker = func;
+ }
+
+ /**
+ * Set whether the flyout can recycle blocks.
+ *
+ * @param isEnabled True to allow blocks to be recycled, false otherwise.
+ */
+ setRecyclingEnabled(isEnabled: boolean) {
+ this.getRecyclableInflater().recyclingEnabled = isEnabled;
+ }
+
+ /**
+ * Returns the recyclable block flyout inflater.
+ *
+ * @returns The recyclable inflater.
+ */
+ protected getRecyclableInflater(): RecyclableBlockFlyoutInflater {
+ const inflater = this.getInflaterForType('block');
+ if (!(inflater instanceof RecyclableBlockFlyoutInflater)) {
+ throw new Error('The RecyclableBlockFlyoutInflater is not registered.');
+ }
+
+ return inflater;
+ }
+}
diff --git a/plugins/continuous-toolbox/src/ContinuousFlyoutMetrics.ts b/plugins/continuous-toolbox/src/ContinuousFlyoutMetrics.ts
new file mode 100644
index 0000000000..bd5fea5cdc
--- /dev/null
+++ b/plugins/continuous-toolbox/src/ContinuousFlyoutMetrics.ts
@@ -0,0 +1,47 @@
+/**
+ * @license
+ * Copyright 2021 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import * as Blockly from 'blockly/core';
+import type {ContinuousFlyout} from './ContinuousFlyout';
+
+/** Adds additional padding to the bottom of the flyout if needed. */
+export class ContinuousFlyoutMetrics extends Blockly.FlyoutMetricsManager {
+ /**
+ * Returns the metrics for the scroll area of the continuous flyout's
+ * workspace. Adds additional padding to the bottom of the flyout if needed in
+ * order to make it possible to scroll to the top of the last category.
+ *
+ * @param getWorkspaceCoordinates True to get the scroll metrics in
+ * workspace coordinates, false to get them in pixel coordinates.
+ * @param cachedViewMetrics The view metrics if they have been previously
+ * computed.
+ * @param cachedContentMetrics The content metrics if they have been
+ * previously computed.
+ * @returns The metrics for the scroll container.
+ */
+ override getScrollMetrics(
+ getWorkspaceCoordinates?: boolean,
+ cachedViewMetrics?: Blockly.MetricsManager.ContainerRegion,
+ cachedContentMetrics?: Blockly.MetricsManager.ContainerRegion,
+ ) {
+ const scrollMetrics = super.getScrollMetrics(
+ getWorkspaceCoordinates,
+ cachedViewMetrics,
+ cachedContentMetrics,
+ );
+ const contentMetrics =
+ cachedContentMetrics || this.getContentMetrics(getWorkspaceCoordinates);
+ const viewMetrics =
+ cachedViewMetrics || this.getViewMetrics(getWorkspaceCoordinates);
+
+ if (scrollMetrics) {
+ scrollMetrics.height += (
+ this.flyout_ as ContinuousFlyout
+ ).calculateBottomPadding(contentMetrics, viewMetrics);
+ }
+ return scrollMetrics;
+ }
+}
diff --git a/plugins/continuous-toolbox/src/ContinuousMetrics.js b/plugins/continuous-toolbox/src/ContinuousMetrics.ts
similarity index 75%
rename from plugins/continuous-toolbox/src/ContinuousMetrics.js
rename to plugins/continuous-toolbox/src/ContinuousMetrics.ts
index 97b9a72812..3355f40d0d 100644
--- a/plugins/continuous-toolbox/src/ContinuousMetrics.js
+++ b/plugins/continuous-toolbox/src/ContinuousMetrics.ts
@@ -12,16 +12,18 @@ import * as Blockly from 'blockly/core';
/** Computes metrics for a toolbox with an always open flyout. */
export class ContinuousMetrics extends Blockly.MetricsManager {
- /** @override */
- constructor(workspace) {
- super(workspace);
- }
/**
* Computes the viewport size to not include the toolbox and the flyout.
* The default viewport includes the flyout.
- * @override
+ *
+ * @param getWorkspaceCoordinates True to get the view metrics in workspace
+ * coordinates, false to get them in pixel coordinates.
+ * @returns The width, height, top and left of the viewport in either
+ * workspace coordinates or pixel coordinates.
*/
- getViewMetrics(getWorkspaceCoordinates = undefined) {
+ override getViewMetrics(
+ getWorkspaceCoordinates = false,
+ ): Blockly.MetricsManager.ContainerRegion {
const scale = getWorkspaceCoordinates ? this.workspace_.scale : 1;
const svgMetrics = this.getSvgMetrics();
const toolboxMetrics = this.getToolboxMetrics();
@@ -29,7 +31,7 @@ export class ContinuousMetrics extends Blockly.MetricsManager {
const toolboxPosition = toolboxMetrics.position;
if (this.workspace_.getToolbox()) {
- // Note: Not actually supported at this time due to ContinunousToolbox
+ // Note: Not actually supported at this time due to ContinuousToolbox
// only supporting a vertical flyout. But included for completeness.
if (
toolboxPosition == Blockly.TOOLBOX_AT_TOP ||
@@ -52,11 +54,13 @@ export class ContinuousMetrics extends Blockly.MetricsManager {
}
/**
- * Moves the absoluteLeft and absoluteTop so they no longer include the
- * flyout.
- * @override
+ * Gets the absolute left and absolute top in pixel coordinates.
+ * This is where the visible workspace starts in relation to the SVG
+ * container, adjusted to not include the area behind the flyout.
+ *
+ * @returns The absolute metrics for the workspace.
*/
- getAbsoluteMetrics() {
+ override getAbsoluteMetrics(): Blockly.MetricsManager.AbsoluteMetrics {
const toolboxMetrics = this.getToolboxMetrics();
const flyoutMetrics = this.getFlyoutMetrics(false);
const toolboxPosition = toolboxMetrics.position;
@@ -81,9 +85,3 @@ export class ContinuousMetrics extends Blockly.MetricsManager {
};
}
}
-
-Blockly.registry.register(
- Blockly.registry.Type.METRICS_MANAGER,
- 'CustomMetricsManager',
- ContinuousMetrics,
-);
diff --git a/plugins/continuous-toolbox/src/ContinuousMetricsFlyout.js b/plugins/continuous-toolbox/src/ContinuousMetricsFlyout.js
deleted file mode 100644
index 90b84a872e..0000000000
--- a/plugins/continuous-toolbox/src/ContinuousMetricsFlyout.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-import * as Blockly from 'blockly/core';
-
-/** Adds additional padding to the bottom of the flyout if needed. */
-export class ContinuousFlyoutMetrics extends Blockly.FlyoutMetricsManager {
- /** @override */
- constructor(workspace, flyout) {
- super(workspace, flyout);
- }
- /**
- * Adds additional padding to the bottom of the flyout if needed,
- * in order to make it possible to scroll to the top of the last category.
- * @override
- */
- getScrollMetrics(
- getWorkspaceCoordinates = undefined,
- cachedViewMetrics = undefined,
- cachedContentMetrics = undefined,
- ) {
- const scrollMetrics = super.getScrollMetrics(
- getWorkspaceCoordinates,
- cachedViewMetrics,
- cachedContentMetrics,
- );
- const contentMetrics =
- cachedContentMetrics || this.getContentMetrics(getWorkspaceCoordinates);
- const viewMetrics =
- cachedViewMetrics || this.getViewMetrics(getWorkspaceCoordinates);
-
- if (scrollMetrics) {
- scrollMetrics.height += this.flyout_.calculateBottomPadding(
- contentMetrics,
- viewMetrics,
- );
- }
- return scrollMetrics;
- }
-}
diff --git a/plugins/continuous-toolbox/src/ContinuousToolbox.js b/plugins/continuous-toolbox/src/ContinuousToolbox.js
deleted file mode 100644
index 634f9a2033..0000000000
--- a/plugins/continuous-toolbox/src/ContinuousToolbox.js
+++ /dev/null
@@ -1,174 +0,0 @@
-/**
- * @license
- * Copyright 2020 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Toolbox that uses a continuous scrolling flyout.
- */
-
-import * as Blockly from 'blockly/core';
-import {ContinuousFlyout} from './ContinuousFlyout';
-
-/**
- * Class for continuous toolbox.
- */
-export class ContinuousToolbox extends Blockly.Toolbox {
- /** @override */
- constructor(workspace) {
- super(workspace);
- }
-
- /** @override */
- init() {
- super.init();
-
- // Populate the flyout with all blocks and show it immediately.
- const flyout = this.getFlyout();
- flyout.show(this.getInitialFlyoutContents_());
- flyout.recordScrollPositions();
-
- this.workspace_.addChangeListener((e) => {
- if (
- e.type === Blockly.Events.BLOCK_CREATE ||
- e.type === Blockly.Events.BLOCK_DELETE
- ) {
- this.refreshSelection();
- }
- });
- }
-
- /** @override */
- getFlyout() {
- return /** @type {ContinuousFlyout} */ (super.getFlyout());
- }
-
- /**
- * Gets the contents that should be shown in the flyout immediately.
- * This includes all blocks and labels for each category of block.
- * @returns {!Blockly.utils.toolbox.FlyoutItemInfoArray} Flyout contents.
- * @private
- */
- getInitialFlyoutContents_() {
- /** @type {!Blockly.utils.toolbox.FlyoutItemInfoArray} */
- let contents = [];
- for (const toolboxItem of this.contents_) {
- if (toolboxItem instanceof Blockly.ToolboxCategory) {
- // Create a label node to go at the top of the category
- contents.push({kind: 'LABEL', text: toolboxItem.getName()});
- /**
- * @type {string|Blockly.utils.toolbox.FlyoutItemInfoArray|
- * Blockly.utils.toolbox.FlyoutItemInfo}
- */
- let itemContents = toolboxItem.getContents();
-
- // Handle custom categories (e.g. variables and functions)
- if (typeof itemContents === 'string') {
- itemContents =
- /** @type {!Blockly.utils.toolbox.DynamicCategoryInfo} */ ({
- custom: itemContents,
- kind: 'CATEGORY',
- });
- }
- contents = contents.concat(itemContents);
- }
- }
- return contents;
- }
-
- /** @override */
- refreshSelection() {
- this.getFlyout().show(this.getInitialFlyoutContents_());
- }
-
- /** @override */
- updateFlyout_(_oldItem, newItem) {
- if (newItem) {
- const target = this.getFlyout().getCategoryScrollPosition(
- newItem.name_,
- ).y;
- this.getFlyout().scrollTo(target);
- }
- }
-
- /** @override */
- shouldDeselectItem_(oldItem, newItem) {
- // Should not deselect if the same category is clicked again.
- return oldItem && oldItem !== newItem;
- }
-
- /**
- * Gets a category by name.
- * @param {string} name Name of category to get.
- * @returns {?Blockly.ToolboxCategory} Category, or null if not
- * found.
- * @package
- */
- getCategoryByName(name) {
- const category = this.contents_.find(
- (item) =>
- item instanceof Blockly.ToolboxCategory &&
- item.isSelectable() &&
- name === item.getName(),
- );
- if (category) {
- return /** @type {!Blockly.ToolboxCategory} */ (category);
- }
- return null;
- }
-
- /**
- * Selects the category with the given name.
- * Similar to setSelectedItem, but importantly, does not call updateFlyout
- * because this is called while the flyout is being scrolled.
- * @param {string} name Name of category to select.
- * @package
- */
- selectCategoryByName(name) {
- const newItem = this.getCategoryByName(name);
- if (!newItem) {
- return;
- }
- const oldItem = this.selectedItem_;
-
- if (this.shouldDeselectItem_(oldItem, newItem)) {
- this.deselectItem_(oldItem);
- }
-
- if (this.shouldSelectItem_(oldItem, newItem)) {
- this.selectItem_(oldItem, newItem);
- }
- }
-
- /** @override */
- getClientRect() {
- // If the flyout never closes, it should be the deletable area.
- const flyout = this.getFlyout();
- if (flyout && !flyout.autoClose) {
- return flyout.getClientRect();
- }
- return super.getClientRect();
- }
-}
-
-Blockly.Css.register(`
-.categoryBubble {
- margin: 0 auto 0.125rem;
- border-radius: 100%;
- border: 1px solid;
- width: 1.25rem;
- height: 1.25rem;
-}
-.blocklyTreeRow {
- height: initial;
- padding: 3px 0;
-}
-.blocklyTreeRowContentContainer {
- display: flex;
- flex-direction: column;
-}
-.blocklyTreeLabel {
- margin: auto;
-}
-`);
diff --git a/plugins/continuous-toolbox/src/ContinuousToolbox.ts b/plugins/continuous-toolbox/src/ContinuousToolbox.ts
new file mode 100644
index 0000000000..67267b8dde
--- /dev/null
+++ b/plugins/continuous-toolbox/src/ContinuousToolbox.ts
@@ -0,0 +1,195 @@
+/**
+ * @license
+ * Copyright 2020 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @fileoverview Toolbox that uses a continuous scrolling flyout.
+ */
+
+import * as Blockly from 'blockly/core';
+import {ContinuousFlyout} from './ContinuousFlyout';
+
+/**
+ * Class for continuous toolbox.
+ */
+export class ContinuousToolbox extends Blockly.Toolbox {
+ /**
+ * Timeout ID used to prevent refreshing the flyout during extensive block
+ * changes.
+ */
+ private refreshDebouncer?: ReturnType;
+
+ /**
+ * Initializes the continuous toolbox.
+ */
+ override init() {
+ super.init();
+
+ // Populate the flyout with all blocks and show it immediately.
+ const flyout = this.getFlyout();
+ flyout.show(this.getInitialFlyoutContents());
+
+ this.getWorkspace().addChangeListener((e: Blockly.Events.Abstract) => {
+ if (
+ e.type === Blockly.Events.BLOCK_CREATE ||
+ e.type === Blockly.Events.BLOCK_DELETE ||
+ e.type === Blockly.Events.BLOCK_CHANGE
+ ) {
+ this.refreshSelection();
+ }
+ });
+ }
+
+ /**
+ * Returns the continuous toolbox's flyout.
+ *
+ * @returns The toolbox's flyout.
+ */
+ override getFlyout(): ContinuousFlyout {
+ return super.getFlyout() as ContinuousFlyout;
+ }
+
+ /**
+ * Gets the contents that should be shown in the flyout immediately.
+ * This includes all blocks and labels for each category of block.
+ *
+ * @returns Flyout contents.
+ */
+ private getInitialFlyoutContents(): Blockly.utils.toolbox.FlyoutItemInfoArray {
+ return this.getToolboxItems().flatMap(this.convertToolboxItemToFlyoutItems);
+ }
+
+ /**
+ * Converts a given toolbox item to an array of flyout items, generally a
+ * label followed by the category's blocks.
+ *
+ * @param toolboxItem The toolbox item/category to convert.
+ * @returns An array of flyout items contained in the given toolbox item.
+ */
+ protected convertToolboxItemToFlyoutItems(
+ toolboxItem: Blockly.IToolboxItem,
+ ): Blockly.utils.toolbox.FlyoutItemInfoArray {
+ let contents: Blockly.utils.toolbox.FlyoutItemInfoArray = [];
+ if (toolboxItem instanceof Blockly.ToolboxCategory) {
+ // Create a label node to go at the top of the category
+ contents.push({kind: 'LABEL', text: toolboxItem.getName()});
+ let itemContents = toolboxItem.getContents();
+
+ // Handle custom categories (e.g. variables and functions)
+ if (typeof itemContents === 'string') {
+ itemContents = [{custom: itemContents, kind: 'CATEGORY'}];
+ }
+ contents = contents.concat(itemContents);
+ }
+ return contents;
+ }
+
+ /**
+ * Updates the flyout's contents if it is visible.
+ */
+ override refreshSelection() {
+ if (this.getFlyout().isVisible()) {
+ if (this.refreshDebouncer) {
+ clearTimeout(this.refreshDebouncer);
+ }
+ this.refreshDebouncer = setTimeout(() => {
+ this.getFlyout().show(this.getInitialFlyoutContents());
+ }, 100);
+ }
+ }
+
+ /**
+ * Scrolls the flyout to display the newly selected category's contents.
+ *
+ * @param oldItem The previously selected toolbox category.
+ * @param newItem The newly selected toolbox category.
+ */
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ override updateFlyout_(
+ oldItem: Blockly.ISelectableToolboxItem | null,
+ newItem: Blockly.ISelectableToolboxItem | null,
+ ) {
+ if (newItem) {
+ this.getFlyout().scrollToCategory(newItem);
+ if (!this.getFlyout().isVisible()) {
+ this.getFlyout().show(this.getInitialFlyoutContents());
+ }
+ } else if (this.getFlyout().autoClose) {
+ this.getFlyout().hide();
+ }
+ }
+
+ /**
+ * Returns whether or not the toolbox should deselect the old category.
+ *
+ * @param oldItem The previously selected toolbox category.
+ * @param newItem The newly selected toolbox category.
+ */
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ override shouldDeselectItem_(
+ oldItem: Blockly.ISelectableToolboxItem | null,
+ newItem: Blockly.ISelectableToolboxItem | null,
+ ): boolean {
+ // Should not deselect if the same category is clicked again.
+ return !!(oldItem && oldItem !== newItem);
+ }
+
+ /**
+ * Gets a category by name.
+ *
+ * @param name Name of category to get.
+ * @returns Category, or null if not found.
+ * @internal
+ */
+ getCategoryByName(name: string): Blockly.ISelectableToolboxItem | null {
+ const category = this.getToolboxItems().find(
+ (item) =>
+ item instanceof Blockly.ToolboxCategory &&
+ item.isSelectable() &&
+ name === item.getName(),
+ );
+ if (!category) return null;
+ return category as Blockly.ISelectableToolboxItem;
+ }
+
+ /**
+ * Selects the category with the given name.
+ * Similar to setSelectedItem, but importantly, does not call updateFlyout
+ * because this is called while the flyout is being scrolled.
+ *
+ * @param name Name of category to select.
+ * @internal
+ */
+ selectCategoryByName(name: string) {
+ const newItem = this.getCategoryByName(name);
+ if (!newItem) return;
+
+ const oldItem = this.selectedItem_;
+
+ if (oldItem && this.shouldDeselectItem_(oldItem, newItem)) {
+ this.deselectItem_(oldItem);
+ }
+
+ if (this.shouldSelectItem_(oldItem, newItem)) {
+ this.selectItem_(oldItem, newItem);
+ }
+ }
+
+ /**
+ * Returns the bounding rectangle of the drag target/deletion area in pixels
+ * relative to the viewport.
+ *
+ * @returns The toolbox's bounding box. Null if drag target area should be
+ * ignored.
+ */
+ override getClientRect(): Blockly.utils.Rect | null {
+ // If the flyout never closes, it should be the deletable area.
+ const flyout = this.getFlyout();
+ if (flyout && !flyout.autoClose) {
+ return flyout.getClientRect();
+ }
+ return super.getClientRect();
+ }
+}
diff --git a/plugins/continuous-toolbox/src/RecyclableBlockFlyoutInflater.ts b/plugins/continuous-toolbox/src/RecyclableBlockFlyoutInflater.ts
new file mode 100644
index 0000000000..96b62bbf94
--- /dev/null
+++ b/plugins/continuous-toolbox/src/RecyclableBlockFlyoutInflater.ts
@@ -0,0 +1,172 @@
+/**
+ * @license
+ * Copyright 2024 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import * as Blockly from 'blockly/core';
+
+/**
+ * A block inflater that caches and reuses blocks to improve performance.
+ */
+export class RecyclableBlockFlyoutInflater extends Blockly.BlockFlyoutInflater {
+ /**
+ * Whether or not block recycling is enabled.
+ */
+ recyclingEnabled = false;
+
+ /**
+ * Map from block type to block instance.
+ */
+ private recycledBlocks = new Map();
+
+ /**
+ * Custom function to use for checking whether or not blocks can be recycled.
+ */
+ recycleEligibilityChecker?: (block: Blockly.Block) => boolean;
+
+ /**
+ * Creates a new block from the given block definition.
+ *
+ * @param blockDefinition The definition to create a block from.
+ * @param workspace The workspace to create the block on.
+ * @returns The newly created block.
+ */
+ override createBlock(
+ blockDefinition: Blockly.utils.toolbox.BlockInfo,
+ workspace: Blockly.WorkspaceSvg,
+ ): Blockly.BlockSvg {
+ const blockType = this.getTypeFromDefinition(blockDefinition);
+ return (
+ this.getRecycledBlock(blockType) ??
+ super.createBlock(blockDefinition, workspace)
+ );
+ }
+
+ /**
+ * Returns the type of a block from an XML or JSON block definition.
+ *
+ * @param blockDefinition The block definition to parse.
+ * @returns The block type.
+ */
+ private getTypeFromDefinition(
+ blockDefinition: Blockly.utils.toolbox.BlockInfo,
+ ): string {
+ let type: string | null | undefined;
+ if (blockDefinition['blockxml']) {
+ const xml =
+ typeof blockDefinition['blockxml'] === 'string'
+ ? Blockly.utils.xml.textToDom(blockDefinition['blockxml'])
+ : (blockDefinition['blockxml'] as Element);
+ type = xml.getAttribute('type');
+ } else {
+ type = blockDefinition['type'];
+ }
+
+ if (!type) {
+ throw new Error(
+ `Block type is not specified in block definition: ${JSON.stringify(
+ blockDefinition,
+ )}`,
+ );
+ }
+ return type;
+ }
+
+ /**
+ * Puts a previously created block into the recycle bin and moves it to the
+ * top of the workspace. Used during large workspace swaps to limit the number
+ * of new DOM elements we need to create.
+ *
+ * @param block The block to recycle.
+ */
+ private recycleBlock(block: Blockly.BlockSvg) {
+ const xy = block.getRelativeToSurfaceXY();
+ block.moveBy(-xy.x, -xy.y);
+ this.recycledBlocks.set(block.type, block);
+ }
+
+ /**
+ * Returns a block from the cache of recycled blocks with the given type, or
+ * undefined if one cannot be found.
+ *
+ * @param blockType The type of the block to try to recycle.
+ * @returns The recycled block, or undefined if one could not be recycled.
+ */
+ private getRecycledBlock(blockType: string): Blockly.BlockSvg | undefined {
+ const block = this.recycledBlocks.get(blockType);
+ this.recycledBlocks.delete(blockType);
+ return block;
+ }
+
+ /**
+ * Returns whether the given block can be recycled or not.
+ *
+ * @param block The block to check for recyclability.
+ * @returns True if the block can be recycled. False otherwise.
+ */
+ protected blockIsRecyclable(block: Blockly.Block): boolean {
+ if (!this.recyclingEnabled) return false;
+
+ if (this.recycleEligibilityChecker) {
+ return this.recycleEligibilityChecker(block);
+ }
+
+ // If the block needs to parse mutations, never recycle.
+ if (
+ block.mutationToDom ||
+ block.domToMutation ||
+ block.saveExtraState ||
+ block.loadExtraState
+ ) {
+ return false;
+ }
+
+ if (!block.isEnabled()) return false;
+
+ for (const input of block.inputList) {
+ for (const field of input.fieldRow) {
+ // No variables.
+ if (field.referencesVariables()) return false;
+
+ if (field instanceof Blockly.FieldDropdown) {
+ if (field.isOptionListDynamic()) return false;
+ }
+ }
+ // Check children.
+ if (input.connection) {
+ const targetBlock = input.connection.targetBlock();
+ if (targetBlock && !this.blockIsRecyclable(targetBlock)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Disposes of the provided block.
+ *
+ * @param item The block to dispose of.
+ */
+ override disposeItem(item: Blockly.FlyoutItem) {
+ const element = item.getElement();
+ if (
+ element instanceof Blockly.BlockSvg &&
+ this.blockIsRecyclable(element)
+ ) {
+ this.removeListeners(element.id);
+ this.recycleBlock(element);
+ } else {
+ super.disposeItem(item);
+ }
+ }
+
+ /**
+ * Clears the cache of recycled blocks.
+ */
+ emptyRecycledBlocks() {
+ this.recycledBlocks.forEach((block) => block.dispose(false, false));
+ this.recycledBlocks.clear();
+ }
+}
diff --git a/plugins/continuous-toolbox/src/index.js b/plugins/continuous-toolbox/src/index.js
deleted file mode 100644
index 6197eca06c..0000000000
--- a/plugins/continuous-toolbox/src/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * @license
- * Copyright 2020 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Continuous-scroll toolbox and flyout that is always open.
- */
-
-export * from './ContinuousCategory';
-export * from './ContinuousFlyout';
-export * from './ContinuousMetrics';
-export * from './ContinuousToolbox';
diff --git a/plugins/continuous-toolbox/src/index.ts b/plugins/continuous-toolbox/src/index.ts
new file mode 100644
index 0000000000..6319793295
--- /dev/null
+++ b/plugins/continuous-toolbox/src/index.ts
@@ -0,0 +1,90 @@
+/**
+ * @license
+ * Copyright 2020 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * @fileoverview Continuous-scroll toolbox and flyout that is always open.
+ */
+
+import * as Blockly from 'blockly/core';
+
+import {ContinuousCategory} from './ContinuousCategory';
+import {ContinuousFlyout} from './ContinuousFlyout';
+import {ContinuousMetrics} from './ContinuousMetrics';
+import {ContinuousToolbox} from './ContinuousToolbox';
+import {RecyclableBlockFlyoutInflater} from './RecyclableBlockFlyoutInflater';
+
+export {
+ ContinuousCategory,
+ ContinuousFlyout,
+ ContinuousMetrics,
+ ContinuousToolbox,
+ RecyclableBlockFlyoutInflater,
+};
+
+/**
+ * Registers the components of the continuous toolbox, replacing Blockly's
+ * built-in defaults.
+ */
+export function registerContinuousToolbox() {
+ Blockly.registry.register(
+ Blockly.registry.Type.TOOLBOX_ITEM,
+ Blockly.ToolboxCategory.registrationName,
+ ContinuousCategory,
+ true,
+ );
+
+ Blockly.registry.register(
+ Blockly.registry.Type.METRICS_MANAGER,
+ 'ContinuousMetrics',
+ ContinuousMetrics,
+ true,
+ );
+
+ Blockly.registry.register(
+ Blockly.registry.Type.FLYOUTS_VERTICAL_TOOLBOX,
+ 'ContinuousFlyout',
+ ContinuousFlyout,
+ true,
+ );
+
+ Blockly.registry.register(
+ Blockly.registry.Type.TOOLBOX,
+ 'ContinuousToolbox',
+ ContinuousToolbox,
+ true,
+ );
+
+ Blockly.registry.register(
+ Blockly.registry.Type.FLYOUT_INFLATER,
+ 'block',
+ RecyclableBlockFlyoutInflater,
+ true,
+ );
+
+ Blockly.Css.register(`
+ .categoryBubble {
+ margin: 0 auto 0.125rem;
+ border-radius: 100%;
+ border: 1px solid;
+ width: 1.25rem;
+ height: 1.25rem;
+ }
+ .blocklyToolboxCategory {
+ height: initial;
+ padding: 3px 0;
+ }
+ .blocklyTreeRowContentContainer {
+ display: flex;
+ flex-direction: column;
+ }
+ .blocklyTreeLabel {
+ margin: auto;
+ }
+ .blocklyToolboxCategoryLabel {
+ text-align: center;
+ }
+ `);
+}
diff --git a/plugins/continuous-toolbox/test/index.js b/plugins/continuous-toolbox/test/index.js
index 57b17ef701..f78f44a60c 100644
--- a/plugins/continuous-toolbox/test/index.js
+++ b/plugins/continuous-toolbox/test/index.js
@@ -9,12 +9,8 @@
*/
import * as Blockly from 'blockly';
-import {toolboxCategories, createPlayground} from '@blockly/dev-tools';
-import {
- ContinuousToolbox,
- ContinuousFlyout,
- ContinuousMetrics,
-} from '../src/index';
+import {createPlayground} from '@blockly/dev-tools';
+import {registerContinuousToolbox} from '../src/index';
/**
* Create a workspace.
@@ -23,23 +19,16 @@ import {
* @returns {!Blockly.WorkspaceSvg} The created workspace.
*/
function createWorkspace(blocklyDiv, options) {
- const workspace = Blockly.inject(blocklyDiv, options);
-
- return workspace;
+ return Blockly.inject(blocklyDiv, options);
}
document.addEventListener('DOMContentLoaded', function () {
- const defaultOptions = {
- toolbox: toolboxCategories,
+ registerContinuousToolbox();
+ createPlayground(document.getElementById('root'), createWorkspace, {
plugins: {
- toolbox: ContinuousToolbox,
- flyoutsVerticalToolbox: ContinuousFlyout,
- metricsManager: ContinuousMetrics,
+ flyoutsVerticalToolbox: 'ContinuousFlyout',
+ metricsManager: 'ContinuousMetrics',
+ toolbox: 'ContinuousToolbox',
},
- };
- createPlayground(
- document.getElementById('root'),
- createWorkspace,
- defaultOptions,
- );
+ });
});
diff --git a/plugins/continuous-toolbox/tsconfig.json b/plugins/continuous-toolbox/tsconfig.json
new file mode 100644
index 0000000000..b849232f2b
--- /dev/null
+++ b/plugins/continuous-toolbox/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "compilerOptions": {
+ "baseUrl": "./",
+ "outDir": "dist",
+ "declaration": true,
+ "declarationMap": true,
+ "sourceMap": true,
+ "module": "es2015",
+ "moduleResolution": "bundler",
+ "target": "es6",
+ "strict": true
+ },
+ // NOTE: `test/**/*` is automatically included in `blockly-scripts start`.
+ // Only src matters for production builds.
+ "include": ["src"]
+}
diff --git a/plugins/field-bitmap/src/field-bitmap.ts b/plugins/field-bitmap/src/field-bitmap.ts
index 70b4fea421..8cf361160f 100644
--- a/plugins/field-bitmap/src/field-bitmap.ts
+++ b/plugins/field-bitmap/src/field-bitmap.ts
@@ -59,7 +59,6 @@ export class FieldBitmap extends Blockly.Field {
super(value, validator, config);
this.SERIALIZABLE = true;
- this.CURSOR = 'default';
this.buttonOptions = {...DEFAULT_BUTTONS, ...config?.buttons};
this.pixelColours = {...DEFAULT_PIXEL_COLOURS, ...config?.colours};
diff --git a/plugins/field-colour/src/field_colour.ts b/plugins/field-colour/src/field_colour.ts
index dc5c88dfe4..4d125853d2 100644
--- a/plugins/field-colour/src/field_colour.ts
+++ b/plugins/field-colour/src/field_colour.ts
@@ -33,9 +33,6 @@ export class FieldColour extends Blockly.Field {
*/
override SERIALIZABLE = true;
- /** Mouse cursor style when over the hotspot that initiates the editor. */
- override CURSOR = 'default';
-
/**
* Used to tell if the field needs to be rendered the next time the block is
* rendered. Colour fields are statically sized, and only need to be
diff --git a/plugins/field-date/src/field_date.ts b/plugins/field-date/src/field_date.ts
index 9b2a9ff8b8..0ec7c4846a 100644
--- a/plugins/field-date/src/field_date.ts
+++ b/plugins/field-date/src/field_date.ts
@@ -20,11 +20,6 @@ export class FieldDate extends Blockly.FieldTextInput {
*/
SERIALIZABLE = true;
- /**
- * Mouse cursor style when over the hotspot that initiates the editor.
- */
- CURSOR = 'text';
-
/**
* Class for a date input field. Derived from the Closure library date
* picker.
diff --git a/plugins/keyboard-navigation/src/navigation.js b/plugins/keyboard-navigation/src/navigation.js
index 9fc285ba8d..e78edb897f 100644
--- a/plugins/keyboard-navigation/src/navigation.js
+++ b/plugins/keyboard-navigation/src/navigation.js
@@ -503,13 +503,15 @@ export class Navigation {
const flyoutContents = flyout.getContents();
const firstFlyoutItem = flyoutContents[0];
if (!firstFlyoutItem) return;
- if (firstFlyoutItem.button) {
+ if (firstFlyoutItem.element instanceof Blockly.FlyoutButton) {
const astNode = Blockly.ASTNode.createButtonNode(
- firstFlyoutItem.button,
+ firstFlyoutItem.element,
);
this.getFlyoutCursor(workspace).setCurNode(astNode);
- } else if (firstFlyoutItem.block) {
- const astNode = Blockly.ASTNode.createStackNode(firstFlyoutItem.block);
+ } else if (firstFlyoutItem.element instanceof Blockly.BlockSvg) {
+ const astNode = Blockly.ASTNode.createStackNode(
+ firstFlyoutItem.element,
+ );
this.getFlyoutCursor(workspace).setCurNode(astNode);
}
}
diff --git a/plugins/keyboard-navigation/src/navigation_controller.js b/plugins/keyboard-navigation/src/navigation_controller.js
index 8f3820a906..d3eaa4c1c1 100644
--- a/plugins/keyboard-navigation/src/navigation_controller.js
+++ b/plugins/keyboard-navigation/src/navigation_controller.js
@@ -126,13 +126,13 @@ export class NavigationController {
}
switch (shortcut.name) {
case Constants.SHORTCUT_NAMES.PREVIOUS:
- return this.selectPrevious_();
+ return this.selectPrevious();
case Constants.SHORTCUT_NAMES.OUT:
- return this.selectParent_();
+ return this.selectParent();
case Constants.SHORTCUT_NAMES.NEXT:
- return this.selectNext_();
+ return this.selectNext();
case Constants.SHORTCUT_NAMES.IN:
- return this.selectChild_();
+ return this.selectChild();
default:
return false;
}
diff --git a/plugins/keyboard-navigation/test/navigation_test.mocha.js b/plugins/keyboard-navigation/test/navigation_test.mocha.js
index ed5c67e989..81705b850d 100644
--- a/plugins/keyboard-navigation/test/navigation_test.mocha.js
+++ b/plugins/keyboard-navigation/test/navigation_test.mocha.js
@@ -83,22 +83,22 @@ suite('Navigation', function () {
[
'Calls toolbox selectNext',
createKeyDownEvent(Blockly.utils.KeyCodes.S, 'NotAField'),
- 'selectNext_',
+ 'selectNext',
],
[
'Calls toolbox selectPrevious',
createKeyDownEvent(Blockly.utils.KeyCodes.W, 'NotAField'),
- 'selectPrevious_',
+ 'selectPrevious',
],
[
'Calls toolbox selectParent',
createKeyDownEvent(Blockly.utils.KeyCodes.D, 'NotAField'),
- 'selectChild_',
+ 'selectChild',
],
[
'Calls toolbox selectChild',
createKeyDownEvent(Blockly.utils.KeyCodes.A, 'NotAField'),
- 'selectParent_',
+ 'selectParent',
],
];
@@ -109,7 +109,7 @@ suite('Navigation', function () {
test(testCaseName, function () {
const toolbox = this.workspace.getToolbox();
const selectStub = sinon.stub(toolbox, stubName);
- toolbox.selectedItem_ = toolbox.contents_[0];
+ toolbox.selectedItem_ = toolbox.contents.values().next().value;
Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
sinon.assert.called(selectStub);
});
@@ -554,7 +554,10 @@ suite('Navigation', function () {
Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, tEvent);
- const firstCategory = this.workspace.getToolbox().contents_[0];
+ const firstCategory = this.workspace
+ .getToolbox()
+ .contents.values()
+ .next().value;
chai.assert.isTrue(keyDownSpy.returned(true));
chai.assert.equal(
this.workspace.getToolbox().getSelectedItem(),
diff --git a/plugins/workspace-minimap/src/focus_region.ts b/plugins/workspace-minimap/src/focus_region.ts
index bb71f07918..70b5b6fba7 100644
--- a/plugins/workspace-minimap/src/focus_region.ts
+++ b/plugins/workspace-minimap/src/focus_region.ts
@@ -12,7 +12,7 @@
import * as Blockly from 'blockly/core';
-const blockEvents = new Set([
+const blockEvents = new Set([
Blockly.Events.VIEWPORT_CHANGE,
Blockly.Events.BLOCK_CHANGE,
Blockly.Events.BLOCK_CREATE,
diff --git a/plugins/workspace-minimap/src/minimap.ts b/plugins/workspace-minimap/src/minimap.ts
index f61b7a4d8f..041701d418 100644
--- a/plugins/workspace-minimap/src/minimap.ts
+++ b/plugins/workspace-minimap/src/minimap.ts
@@ -15,7 +15,7 @@ import * as Blockly from 'blockly/core';
import {FocusRegion} from './focus_region';
// Events that should be send over to the minimap from the primary workspace
-const blockEvents = new Set([
+const blockEvents = new Set([
Blockly.Events.BLOCK_CHANGE,
Blockly.Events.BLOCK_CREATE,
Blockly.Events.BLOCK_DELETE,
From 7476290ff118105c2b6fa39c747b0871cf5ea411 Mon Sep 17 00:00:00 2001
From: Aaron Dodson
Date: Mon, 3 Feb 2025 12:56:55 -0800
Subject: [PATCH 02/33] fix: Fix scrolling and API issues with the continuous
toolbox plugin. (#2485)
* fix: Fix bugs when scrolling between categories.
* feat: Readd `getCategoryScrollPosition`.
* chore: Placate the linter.
* chore: Note units in docstring.
---
.../src/ContinuousFlyout.ts | 22 +++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/plugins/continuous-toolbox/src/ContinuousFlyout.ts b/plugins/continuous-toolbox/src/ContinuousFlyout.ts
index 94ca0a7828..5b33bce5fc 100644
--- a/plugins/continuous-toolbox/src/ContinuousFlyout.ts
+++ b/plugins/continuous-toolbox/src/ContinuousFlyout.ts
@@ -89,7 +89,7 @@ export class ContinuousFlyout extends Blockly.VerticalFlyout {
.forEach((label) => {
this.scrollPositions.set(
label.getButtonText(),
- label.getPosition().y - label.height,
+ Math.max(0, label.getPosition().y - this.GAP_Y / 2),
);
});
}
@@ -114,6 +114,21 @@ export class ContinuousFlyout extends Blockly.VerticalFlyout {
);
}
+ /**
+ * Returns the scroll position for the given category name.
+ *
+ * @param name Category name.
+ * @returns Scroll position for given category in workspace units, or null if
+ * not found.
+ */
+ getCategoryScrollPosition(name: string): number | null {
+ const position = this.scrollPositions.get(name);
+ if (position === undefined) {
+ console.warn(`Scroll position not recorded for category ${name}`);
+ }
+ return position ?? null;
+ }
+
/**
* Selects an item in the toolbox based on the scroll position of the flyout.
*
@@ -161,7 +176,7 @@ export class ContinuousFlyout extends Blockly.VerticalFlyout {
*/
scrollToCategory(category: Blockly.ISelectableToolboxItem) {
const position = this.scrollPositions.get(category.getName());
- if (!position) {
+ if (position === undefined) {
console.warn(`Scroll position not recorded for category ${name}`);
return;
}
@@ -173,8 +188,7 @@ export class ContinuousFlyout extends Blockly.VerticalFlyout {
* a scroll target, and request the next frame if necessary.
*/
private stepScrollAnimation() {
- if (!this.scrollTarget) return;
-
+ if (this.scrollTarget === undefined) return;
const currentScrollPos = -this.getWorkspace().scrollY;
const diff = this.scrollTarget - currentScrollPos;
if (Math.abs(diff) < 1) {
From e35406bf1fa9d3649db3ab506fa3d5bcd8e70c22 Mon Sep 17 00:00:00 2001
From: Aaron Dodson
Date: Thu, 13 Feb 2025 11:41:53 -0800
Subject: [PATCH 03/33] feat!: Improve accessibility of the grid field. (#2488)
* feat!: Improve accessibility of the grid field.
* chore: Fix lint problems.
* chore: Clarify comments.
* refactor: Limit imports.
* refactor: Include `field` in CSS class names.
* refactor: Move grid item population into its own function.
* refactor: Use null instead of undefined for selection callback.
---
plugins/field-grid-dropdown/src/grid.ts | 292 +++++++++++++++++++
plugins/field-grid-dropdown/src/grid_item.ts | 189 ++++++++++++
plugins/field-grid-dropdown/src/index.ts | 115 ++++----
3 files changed, 547 insertions(+), 49 deletions(-)
create mode 100644 plugins/field-grid-dropdown/src/grid.ts
create mode 100644 plugins/field-grid-dropdown/src/grid_item.ts
diff --git a/plugins/field-grid-dropdown/src/grid.ts b/plugins/field-grid-dropdown/src/grid.ts
new file mode 100644
index 0000000000..c02d7600e9
--- /dev/null
+++ b/plugins/field-grid-dropdown/src/grid.ts
@@ -0,0 +1,292 @@
+/**
+ * @license
+ * Copyright 2025 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import {utils, browserEvents, MenuOption} from 'blockly/core';
+import {GridItem} from './grid_item';
+
+/**
+ * Class for managing a group of items displayed in a grid.
+ */
+export class Grid {
+ /** Mapping from grid item ID to index in the items list. */
+ private itemIndices = new Map();
+
+ /** List of items displayed in this grid. */
+ private items = new Array();
+
+ /** Root DOM element of this grid. */
+ private root: HTMLDivElement;
+
+ /** Identifier for keydown handler to be unregistered in dispose(). */
+ private keyDownHandler: browserEvents.Data | null = null;
+
+ /** Identifier for pointermove handler to be unregistered in dispose(). */
+ private pointerMoveHandler: browserEvents.Data | null = null;
+
+ /** Function to be called when an item in this grid is selected. */
+ private selectionCallback?: (selectedItem: GridItem) => void;
+
+ /**
+ * Creates a new Grid instance.
+ *
+ * @param container The parent element of this grid in the DOM.
+ * @param options A list of MenuOption objects representing the items to be
+ * shown in this grid.
+ * @param columns The number of columns to display items in.
+ * @param rtl True if this grid is being shown in a right-to-left environment.
+ * @param selectionCallback Function to be called when an item in the grid is
+ * selected.
+ */
+ constructor(
+ container: HTMLElement,
+ options: MenuOption[],
+ private readonly columns: number,
+ private readonly rtl: boolean,
+ selectionCallback: (selectedItem: GridItem) => void,
+ ) {
+ this.selectionCallback = selectionCallback;
+
+ this.root = document.createElement('div');
+ this.root.className = 'blocklyFieldGrid';
+ this.root.tabIndex = 0;
+ utils.aria.setRole(this.root, utils.aria.Role.GRID);
+ container.appendChild(this.root);
+
+ this.populateItems(options);
+
+ this.keyDownHandler = browserEvents.conditionalBind(
+ this.root,
+ 'keydown',
+ this,
+ this.onKeyDown,
+ );
+
+ this.pointerMoveHandler = browserEvents.conditionalBind(
+ this.root,
+ 'pointermove',
+ this,
+ this.onPointerMove,
+ true,
+ );
+
+ if (columns >= 1) {
+ this.columns = columns;
+ this.root.style.setProperty('--grid-columns', `${this.columns}`);
+ } else {
+ throw new Error(`Number of columns must be >= 1; got ${columns}`);
+ }
+ }
+
+ /**
+ * Creates grid items in the DOM given a list of model objects.
+ *
+ * @param options A list of grid item model objects.
+ */
+ private populateItems(options: MenuOption[]) {
+ let row = document.createElement('div');
+ for (const [index, item] of options.entries()) {
+ if (index % this.columns === 0) {
+ row = document.createElement('div');
+ row.className = 'blocklyFieldGridRow';
+ utils.aria.setRole(row, utils.aria.Role.ROW);
+ this.root.appendChild(row);
+ }
+
+ const [label, value] = item;
+ const content = (() => {
+ if (typeof label === 'object') {
+ // Convert ImageProperties to an HTMLImageElement.
+ const image = new Image(label['width'], label['height']);
+ image.src = label['src'];
+ image.alt = label['alt'] || '';
+ return image;
+ }
+ return label;
+ })();
+
+ const gridItem = new GridItem(
+ row,
+ content,
+ value,
+ (selectedItem: GridItem) => {
+ this.setSelectedValue(selectedItem.getValue());
+ this.selectionCallback?.(selectedItem);
+ },
+ );
+ this.itemIndices.set(gridItem.getId(), this.itemIndices.size);
+ this.items.push(gridItem);
+ }
+ }
+
+ /**
+ * Disposes of this grid.
+ */
+ dispose() {
+ this.selectionCallback = undefined;
+ for (const item of this.items) {
+ item.dispose();
+ }
+ this.itemIndices.clear();
+ this.items.length = 0;
+ if (this.keyDownHandler) {
+ browserEvents.unbind(this.keyDownHandler);
+ this.keyDownHandler = null;
+ }
+
+ if (this.pointerMoveHandler) {
+ browserEvents.unbind(this.pointerMoveHandler);
+ this.pointerMoveHandler = null;
+ }
+ this.root.remove();
+ }
+
+ /**
+ * Handles a keydown event in the grid, generally by moving focus.
+ *
+ * @param e The keydown event to handle.
+ */
+ private onKeyDown(e: KeyboardEvent) {
+ if (
+ !this.items.length ||
+ e.shiftKey ||
+ e.ctrlKey ||
+ e.metaKey ||
+ e.altKey
+ ) {
+ return;
+ }
+
+ switch (e.key) {
+ case 'ArrowUp':
+ this.moveFocus(-1 * this.columns, true);
+ break;
+ case 'ArrowDown':
+ this.moveFocus(this.columns, true);
+ break;
+ case 'ArrowLeft':
+ this.moveFocus(-1 * (this.rtl ? -1 : 1), true);
+ break;
+ case 'ArrowRight':
+ this.moveFocus(1 * (this.rtl ? -1 : 1), true);
+ break;
+ case 'PageUp':
+ case 'Home':
+ this.moveFocus(0, false);
+ break;
+ case 'PageDown':
+ case 'End':
+ this.moveFocus(this.items.length - 1, false);
+ break;
+ default:
+ // Not a key the grid is interested in.
+ return;
+ }
+ // The grid used this key, don't let it have secondary effects.
+ e.preventDefault();
+ e.stopPropagation();
+ }
+
+ /**
+ * Handles a pointermove event in the grid by focusing the hovered item.
+ *
+ * @param e The pointermove event to handle.
+ */
+ private onPointerMove(e: PointerEvent) {
+ // Don't highlight grid items on "pointermove" if the pointer didn't
+ // actually move (but the content under it did due to e.g. scrolling into
+ // view), or if the target isn't an Element, which should never happen, but
+ // TS needs to be reassured of that.
+ if (!(e.movementX || e.movementY) || !(e.target instanceof Element)) return;
+
+ const gridItem = e.target.closest('.blocklyFieldGridItem');
+ if (!gridItem) return;
+
+ const targetId = gridItem.id;
+ const targetIndex = this.itemIndices.get(targetId);
+ if (targetIndex === undefined) return;
+ this.moveFocus(targetIndex, false);
+ }
+
+ /**
+ * Selects the item with the given value in the grid.
+ *
+ * @param value The value of the grid item to select.
+ */
+ setSelectedValue(value: string) {
+ for (const [index, item] of this.items.entries()) {
+ const selected = item.getValue() === value;
+ item.setSelected(selected);
+ if (selected) {
+ this.moveFocus(index, false);
+ }
+ }
+ }
+
+ /**
+ * Moves browser focus to the grid item at the given index.
+ *
+ * @param index The index of the item to focus.
+ * @param relative True to interpret the index as relative to the currently
+ * focused item, false to move focus to it as an absolute value.
+ */
+ private moveFocus(index: number, relative: boolean) {
+ let targetIndex = index;
+
+ if (relative) {
+ const focusedItem = this.getFocusedItem();
+ if (!focusedItem) return;
+ targetIndex += this.indexOfItem(focusedItem);
+ }
+
+ const targetItem = this.itemAtIndex(targetIndex);
+ if (!targetItem) return;
+
+ targetItem.focus();
+ utils.aria.setState(
+ this.root,
+ utils.aria.State.ACTIVEDESCENDANT,
+ targetItem.getId(),
+ );
+ }
+
+ /**
+ * Returns the index of the given item within the grid.
+ *
+ * @param item The item to return the index of.
+ * @returns The index of the given item within the grid.
+ */
+ private indexOfItem(item: GridItem): number {
+ return this.itemIndices.get(item.getId()) ?? -1;
+ }
+
+ /**
+ * Returns the GridItem object at the given index in the grid.
+ *
+ * @param index The index to retrieve the grid item at.
+ * @returns The GridItem at the given index, or undefined if the index is
+ * invalid.
+ */
+ private itemAtIndex(index: number): GridItem | undefined {
+ return this.items[index];
+ }
+
+ /**
+ * Returns the currently focused grid item, if any.
+ *
+ * @returns The focused grid item, or undefined if no item is focused.
+ */
+ private getFocusedItem(): GridItem | undefined {
+ const element =
+ this.root.querySelector('.blocklyFieldGridItem:focus') ??
+ this.root.querySelector('.blocklyFieldGridItem');
+ if (!element || !element.id) return undefined;
+
+ const index = this.itemIndices.get(element.id);
+ if (index === undefined) return undefined;
+
+ return this.itemAtIndex(index);
+ }
+}
diff --git a/plugins/field-grid-dropdown/src/grid_item.ts b/plugins/field-grid-dropdown/src/grid_item.ts
new file mode 100644
index 0000000000..7dedc38205
--- /dev/null
+++ b/plugins/field-grid-dropdown/src/grid_item.ts
@@ -0,0 +1,189 @@
+/**
+ * @license
+ * Copyright 2025 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import {browserEvents, utils} from 'blockly/core';
+
+/**
+ * Class representing an item in a grid.
+ */
+export class GridItem {
+ /** The DOM element for the grid item. */
+ private element: HTMLButtonElement;
+
+ /** Identifier for a click handler to unregister during dispose(). */
+ private clickHandler: browserEvents.Data | null;
+
+ /** Callback to invoke when this item is selected. */
+ private selectionCallback: ((selectedItem: GridItem) => void) | null;
+
+ /** Whether or not this item is currently selected. */
+ private selected = false;
+
+ /**
+ * Creates a new GridItem.
+ *
+ * @param container The parent element of this grid item in the DOM.
+ * @param content The content to display in this grid item.
+ * @param value The programmatic value of this grid item.
+ * @param selectionCallback Function to call when this item is selected.
+ */
+ constructor(
+ container: HTMLElement,
+ content: string | HTMLElement,
+ private readonly value: string,
+ selectionCallback: (selectedItem: GridItem) => void,
+ ) {
+ this.selectionCallback = selectionCallback;
+
+ this.element = document.createElement('button');
+ this.element.id = utils.idGenerator.getNextUniqueId();
+ this.element.className = 'blocklyFieldGridItem';
+ this.clickHandler = browserEvents.conditionalBind(
+ this.element,
+ 'click',
+ this,
+ this.onClick,
+ true,
+ );
+ container.appendChild(this.element);
+
+ const contentDom =
+ typeof content === 'string' ? document.createTextNode(content) : content;
+ this.element.appendChild(contentDom);
+
+ utils.aria.setRole(this.element, utils.aria.Role.GRIDCELL);
+ }
+
+ /**
+ * Disposes of this grid item.
+ */
+ dispose() {
+ this.selectionCallback = null;
+ this.element.remove();
+ if (this.clickHandler) {
+ browserEvents.unbind(this.clickHandler);
+ this.clickHandler = null;
+ }
+ }
+
+ /**
+ * Gets the unique (within the grid) ID for this grid item.
+ *
+ * @returns This item's unique ID.
+ */
+ getId(): string {
+ return this.element.id;
+ }
+
+ /**
+ * Gets the value associated with this grid item.
+ *
+ * @returns Value associated with this grid item.
+ */
+ getValue(): string {
+ return this.value;
+ }
+
+ /**
+ * Returns whether or not this grid item is selected.
+ *
+ * @returns True if this grid item is selected, otherwise false.
+ */
+ isSelected() {
+ return this.selected;
+ }
+
+ /**
+ * Sets whether or not this grid item is selected.
+ *
+ * @param selected True if this grid item should be selected, otherwise false.
+ */
+ setSelected(selected: boolean) {
+ this.selected = selected;
+ utils.aria.setState(this.element, utils.aria.State.SELECTED, this.selected);
+ this.element.classList.toggle(
+ 'blocklyFieldGridItemSelected',
+ this.selected,
+ );
+ if (this.isSelected()) {
+ this.focus();
+ }
+ }
+
+ /**
+ * Handles clicks on this grid item by marking it as selected.
+ */
+ private onClick() {
+ this.setSelected(true);
+ this.selectionCallback?.(this);
+ }
+
+ /**
+ * Makes this grid item the browser focus target, and scrolls it into view
+ * if needed.
+ */
+ focus() {
+ // Focus the element, but don't scroll the document since that's too
+ // aggressive.
+ this.element.focus({preventScroll: true});
+
+ const scrollingParent = this.element.offsetParent;
+ if (!scrollingParent) return;
+ const offsetTop = this.element.offsetTop;
+ const scrollTop = scrollingParent.scrollTop;
+ const spacing = this.getInterItemSpacing();
+
+ // Scroll the element into view if it's offscreen above the grid's viewport.
+ if (offsetTop < scrollTop) {
+ scrollingParent.scrollTo(0, offsetTop - spacing);
+ } else if (
+ offsetTop + this.element.offsetHeight >
+ scrollTop + scrollingParent.clientHeight
+ ) {
+ // Scroll into view if this item is below the grid's viewport.
+ scrollingParent.scrollBy(
+ 0,
+ offsetTop +
+ this.element.clientHeight -
+ (scrollTop + scrollingParent.clientHeight) +
+ spacing,
+ );
+ }
+ }
+
+ /**
+ * Returns the vertical spacing between grid items in pixels.
+ *
+ * This value can be specified by the user in CSS, so we can't just use a
+ * hardcoded value. Moreover, while we could check our computed style, the
+ * grid gap can be specified in several units. Instead, this somewhat hackily
+ * finds all the sibling items in this grid and loops through them until it
+ * encounters one with a different vertical location from its predecessor,
+ * then computes the effective gap based on their relative position and
+ * height.
+ *
+ * @returns The vertical distance between items in this grid.
+ */
+ private getInterItemSpacing() {
+ const grid = this.element.closest('.blocklyFieldGrid');
+ if (!grid) return 0;
+
+ const items = [
+ ...grid.querySelectorAll('.blocklyFieldGridItem'),
+ ] as HTMLElement[];
+ if (!items.length) return 0;
+
+ const initialTop = items[0].offsetTop;
+ const initialHeight = items[0].offsetHeight;
+ for (const item of items) {
+ if (item.offsetTop !== initialTop) {
+ return item.offsetTop - initialHeight - initialTop;
+ }
+ }
+
+ return 0;
+ }
+}
diff --git a/plugins/field-grid-dropdown/src/index.ts b/plugins/field-grid-dropdown/src/index.ts
index c885258b33..dcd7035792 100644
--- a/plugins/field-grid-dropdown/src/index.ts
+++ b/plugins/field-grid-dropdown/src/index.ts
@@ -10,6 +10,8 @@
*/
import * as Blockly from 'blockly/core';
+import {Grid} from './grid';
+import type {GridItem} from './grid_item';
/**
* A config object for defining a field grid dropdown.
@@ -44,6 +46,9 @@ export class FieldGridDropdown extends Blockly.FieldDropdown {
private borderColour?: string;
+ /** Object representing the grid of choices show in the dropdown. */
+ private grid?: Grid;
+
/**
* Class for an grid dropdown field.
*
@@ -69,7 +74,7 @@ export class FieldGridDropdown extends Blockly.FieldDropdown {
super(menuGenerator, validator, config);
if (config?.columns) {
- this.setColumnsInternal(config.columns);
+ this.setColumns(parseInt(`${config.columns}`));
}
if (config && config.primaryColour) {
@@ -110,20 +115,16 @@ export class FieldGridDropdown extends Blockly.FieldDropdown {
* values are ignored.
*/
setColumns(columns: number) {
- this.setColumnsInternal(columns);
- this.updateColumnsStyling_();
- }
-
- /**
- * Sets the number of columns on the grid.
- *
- * @param columns The number of columns. Is rounded to an integer value and
- * must be greater than 0. Invalid values are ignored.
- */
- private setColumnsInternal(columns: string | number) {
- const cols = typeof columns === 'string' ? parseInt(columns) : columns;
- if (!isNaN(cols) && cols >= 1) {
- this.columns = cols;
+ if (!isNaN(columns) && columns >= 1) {
+ this.columns = columns;
+ // If the field is currently being shown, reload the grid.
+ if (
+ Blockly.DropDownDiv.getOwner() === this &&
+ Blockly.DropDownDiv.isVisible()
+ ) {
+ this.grid?.dispose();
+ this.showEditor_();
+ }
}
}
@@ -135,33 +136,47 @@ export class FieldGridDropdown extends Blockly.FieldDropdown {
* undefined if triggered programmatically.
*/
protected showEditor_(e?: MouseEvent) {
- super.showEditor_(e);
+ Blockly.DropDownDiv.clearContent();
+ const rtl = !!this.getSourceBlock()?.workspace.RTL;
+ this.grid = new Grid(
+ Blockly.DropDownDiv.getContentDiv(),
+ this.getOptions(false),
+ this.columns,
+ rtl,
+ (selectedItem: GridItem) => {
+ Blockly.DropDownDiv.hideIfOwner(this);
+ this.setValue(selectedItem.getValue());
+ },
+ );
+
+ Blockly.DropDownDiv.getContentDiv().classList.add(
+ 'blocklyFieldGridContainer',
+ );
const colours = this.getColours();
if (colours && colours.border) {
Blockly.DropDownDiv.setColour(colours.primary, colours.border);
}
- const menuElement = this.menu_?.getElement() ?? null;
- if (menuElement) {
- Blockly.utils.dom.addClass(menuElement, 'fieldGridDropDownContainer');
- }
- this.updateColumnsStyling_();
-
Blockly.DropDownDiv.showPositionedByField(
this,
this.dropdownDispose_.bind(this),
);
+
+ const selectedValue = this.getValue();
+ if (selectedValue) {
+ this.grid.setSelectedValue(selectedValue);
+ }
}
/**
- * Updates the styling for number of columns on the dropdown.
+ * Updates the field's value to the given value.
+ *
+ * @param newValue The new value for this field.
*/
- private updateColumnsStyling_() {
- const menuElement = this.menu_ ? this.menu_.getElement() : null;
- if (menuElement) {
- menuElement.style.gridTemplateColumns = `repeat(${this.columns}, min-content)`;
- }
+ protected override doValueUpdate_(newValue: string) {
+ super.doValueUpdate_(newValue);
+ this.grid?.setSelectedValue(newValue);
}
/**
@@ -196,38 +211,40 @@ export class FieldGridDropdown extends Blockly.FieldDropdown {
Blockly.fieldRegistry.register('field_grid_dropdown', FieldGridDropdown);
/**
- * CSS for slider field.
+ * CSS for grid field.
*/
Blockly.Css.register(`
- /** Setup grid layout of DropDown */
- .fieldGridDropDownContainer.blocklyMenu {
- display: grid;
- grid-gap: 7px;
+ .blocklyFieldGridContainer {
+ padding: 7px;
}
- /* Change look of cells (add border, sizing, padding, and text color) */
- .fieldGridDropDownContainer.blocklyMenu .blocklyMenuItem {
+
+ .blocklyFieldGrid {
+ display: grid;
+ grid-gap: 7px;
+ grid-template-columns: repeat(var(--grid-columns), min-content);
+ }
+
+ .blocklyFieldGrid .blocklyFieldGridItem {
border: 1px solid rgba(1, 1, 1, 0.5);
border-radius: 4px;
color: white;
min-width: auto;
- padding-left: 15px; /* override padding-left now that checkmark is hidden */
+ background: none;
+ white-space: nowrap;
+ cursor: pointer;
+ padding: 6px 15px;
}
- /* Change look of selected cell */
- .fieldGridDropDownContainer .blocklyMenuItem .blocklyMenuItemCheckbox {
- display: none; /* Hide checkmark */
+
+ .blocklyFieldGrid .blocklyFieldGridRow {
+ display: contents;
}
- .fieldGridDropDownContainer .blocklyMenuItem.blocklyMenuItemSelected {
+
+ .blocklyFieldGrid .blocklyFieldGridItem.blocklyFieldGridItemSelected {
background-color: rgba(1, 1, 1, 0.25);
}
- /* Change look of focus/highlighted cell */
- .fieldGridDropDownContainer .blocklyMenuItem.blocklyMenuItemHighlight {
+
+ .blocklyFieldGrid .blocklyFieldGridItem:focus {
box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2);
- }
- .fieldGridDropDownContainer .blocklyMenuItemHighlight {
- /* Uses less selectors so as to not affect blocklyMenuItemSelected */
- background-color: inherit;
- }
- .fieldGridDropDownContainer {
- margin: 7px; /* needed for highlight */
+ outline: none;
}
`);
From 5c3fb3254bee5bf2dc9d86415512b97d8b703f1b Mon Sep 17 00:00:00 2001
From: Aaron Dodson
Date: Mon, 24 Feb 2025 10:38:38 -0800
Subject: [PATCH 04/33] chore: Export interface for label flyout items. (#2491)
---
plugins/continuous-toolbox/src/ContinuousFlyout.ts | 2 +-
plugins/continuous-toolbox/src/index.ts | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/plugins/continuous-toolbox/src/ContinuousFlyout.ts b/plugins/continuous-toolbox/src/ContinuousFlyout.ts
index 5b33bce5fc..faa84cb7ca 100644
--- a/plugins/continuous-toolbox/src/ContinuousFlyout.ts
+++ b/plugins/continuous-toolbox/src/ContinuousFlyout.ts
@@ -13,7 +13,7 @@ import {ContinuousToolbox} from './ContinuousToolbox';
import {ContinuousFlyoutMetrics} from './ContinuousFlyoutMetrics';
import {RecyclableBlockFlyoutInflater} from './RecyclableBlockFlyoutInflater';
-interface LabelFlyoutItem extends Blockly.FlyoutItem {
+export interface LabelFlyoutItem extends Blockly.FlyoutItem {
// Blockly.FlyoutButton represents both buttons and labels; a label is just
// a borderless, non-clickable button.
getElement(): Blockly.FlyoutButton;
diff --git a/plugins/continuous-toolbox/src/index.ts b/plugins/continuous-toolbox/src/index.ts
index 6319793295..2a79e473aa 100644
--- a/plugins/continuous-toolbox/src/index.ts
+++ b/plugins/continuous-toolbox/src/index.ts
@@ -11,7 +11,7 @@
import * as Blockly from 'blockly/core';
import {ContinuousCategory} from './ContinuousCategory';
-import {ContinuousFlyout} from './ContinuousFlyout';
+import {ContinuousFlyout, LabelFlyoutItem} from './ContinuousFlyout';
import {ContinuousMetrics} from './ContinuousMetrics';
import {ContinuousToolbox} from './ContinuousToolbox';
import {RecyclableBlockFlyoutInflater} from './RecyclableBlockFlyoutInflater';
@@ -21,6 +21,7 @@ export {
ContinuousFlyout,
ContinuousMetrics,
ContinuousToolbox,
+ LabelFlyoutItem,
RecyclableBlockFlyoutInflater,
};
From b79274db6b1ce54c0e540b4d9791f9c2184a1470 Mon Sep 17 00:00:00 2001
From: Christopher Allen
Date: Thu, 8 May 2025 23:23:10 +0100
Subject: [PATCH 05/33] fix!: Delete old keyboard-navigation plugin (#2508)
This depends on things that no longer exist in
blockly@v12.0.0-beta.4, like BasicCursor and Cursor, and also
on other things that will cease to exist before 12.0.0, like
ASTNode.
We need to update the samples repository to be able to test
plugins with v12, and this plugin is soon to be replaced by
the new plugin being developed in
google/blockly-keyboard-experimentation, so the most expedient
course of action is just to delete this one to allow upgrading
this repo's blockly devDependency.
BREAKING CHANGE:
Removes the keyboard-experimentation plugin, obviously.
---
gh-pages/_index.html | 8 +-
plugins/keyboard-navigation/CHANGELOG.md | 558 ---
plugins/keyboard-navigation/GETSTARTED.md | 24 -
plugins/keyboard-navigation/README.md | 52 -
plugins/keyboard-navigation/package-lock.json | 3070 -----------------
plugins/keyboard-navigation/package.json | 60 -
plugins/keyboard-navigation/src/constants.js | 63 -
.../keyboard-navigation/src/flyout_cursor.js | 93 -
.../src/gesture_monkey_patch.js | 59 -
plugins/keyboard-navigation/src/index.js | 25 -
.../keyboard-navigation/src/line_cursor.js | 190 -
plugins/keyboard-navigation/src/navigation.js | 1289 -------
.../src/navigation_controller.js | 1020 ------
plugins/keyboard-navigation/test/index.html | 53 -
plugins/keyboard-navigation/test/index.js | 83 -
.../test/navigation_modify_test.mocha.js | 691 ----
.../test/navigation_test.mocha.js | 1368 --------
.../test/shortcuts_test.mocha.js | 531 ---
.../keyboard-navigation/test/test_helper.js | 89 -
plugins/keyboard-navigation/test/toolbox.js | 218 --
20 files changed, 7 insertions(+), 9537 deletions(-)
delete mode 100644 plugins/keyboard-navigation/CHANGELOG.md
delete mode 100644 plugins/keyboard-navigation/GETSTARTED.md
delete mode 100644 plugins/keyboard-navigation/README.md
delete mode 100644 plugins/keyboard-navigation/package-lock.json
delete mode 100644 plugins/keyboard-navigation/package.json
delete mode 100644 plugins/keyboard-navigation/src/constants.js
delete mode 100644 plugins/keyboard-navigation/src/flyout_cursor.js
delete mode 100644 plugins/keyboard-navigation/src/gesture_monkey_patch.js
delete mode 100644 plugins/keyboard-navigation/src/index.js
delete mode 100644 plugins/keyboard-navigation/src/line_cursor.js
delete mode 100644 plugins/keyboard-navigation/src/navigation.js
delete mode 100644 plugins/keyboard-navigation/src/navigation_controller.js
delete mode 100644 plugins/keyboard-navigation/test/index.html
delete mode 100644 plugins/keyboard-navigation/test/index.js
delete mode 100644 plugins/keyboard-navigation/test/navigation_modify_test.mocha.js
delete mode 100644 plugins/keyboard-navigation/test/navigation_test.mocha.js
delete mode 100644 plugins/keyboard-navigation/test/shortcuts_test.mocha.js
delete mode 100644 plugins/keyboard-navigation/test/test_helper.js
delete mode 100644 plugins/keyboard-navigation/test/toolbox.js
diff --git a/gh-pages/_index.html b/gh-pages/_index.html
index eb8d2e97fd..ac2486fc20 100644
--- a/gh-pages/_index.html
+++ b/gh-pages/_index.html
@@ -286,7 +286,7 @@
-
+
@@ -297,6 +297,12 @@
A plugin that allows users to manipulate and connect blocks using a keyboard-driven cursor.
+
+ This plugin (and its demo) is temporarily unavailable while we
+ develop an new and improved version; you can follow along with
+ our work in the blockly-keyboard-experimentation
+ GitHub repository.
+
diff --git a/plugins/keyboard-navigation/CHANGELOG.md b/plugins/keyboard-navigation/CHANGELOG.md
deleted file mode 100644
index 91f7f28b8c..0000000000
--- a/plugins/keyboard-navigation/CHANGELOG.md
+++ /dev/null
@@ -1,558 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [0.6.11](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.10...@blockly/keyboard-navigation@0.6.11) (2024-11-07)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.10](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.9...@blockly/keyboard-navigation@0.6.10) (2024-09-26)
-
-
-### Bug Fixes
-
-* **field-*:** Remove unneeded `fieldRegistry.unregister` calls ([#2454](https://github.com/google/blockly-samples/issues/2454)) ([b3ba30e](https://github.com/google/blockly-samples/commit/b3ba30e23dddf0bd98c266659aa229ba6ba685b0)), closes [#2453](https://github.com/google/blockly-samples/issues/2453)
-
-
-
-
-
-## [0.6.9](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.8...@blockly/keyboard-navigation@0.6.9) (2024-08-29)
-
-
-### Bug Fixes
-
-* predeploy plugins ([#2449](https://github.com/google/blockly-samples/issues/2449)) ([6b36d8b](https://github.com/google/blockly-samples/commit/6b36d8b344a969f79d89bbc7dcee29ae554759f9))
-
-
-
-
-
-## [0.6.8](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.7...@blockly/keyboard-navigation@0.6.8) (2024-08-22)
-
-
-### Bug Fixes
-
-* lerna v8 breaking our whole shebangle ([#2446](https://github.com/google/blockly-samples/issues/2446)) ([b8b4c21](https://github.com/google/blockly-samples/commit/b8b4c21d4eaf81f527336ae46f6679ff99ac23c3))
-
-
-
-
-
-## [0.6.7](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.6...@blockly/keyboard-navigation@0.6.7) (2024-08-08)
-
-
-### Bug Fixes
-
-* **keyboard-navigation:** remove references to blockly.fieldcolour ([#2441](https://github.com/google/blockly-samples/issues/2441)) ([81787b7](https://github.com/google/blockly-samples/commit/81787b7008b2e255da74487ee32eafeff2477177))
-
-
-
-## [0.6.6](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.5...@blockly/keyboard-navigation@0.6.6) (2024-08-01)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.5](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.4...@blockly/keyboard-navigation@0.6.5) (2024-07-25)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.4](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.3...@blockly/keyboard-navigation@0.6.4) (2024-07-11)
-
-
-### Reverts
-
-* Revert "chore(deps): Bump the npm_and_yarn group across 54 directories with 19 updates (#2403)" (#2410) ([bad8ffb](https://github.com/google/blockly-samples/commit/bad8ffbf85caa4e5b68d2f010cd0deaa9e3dd98f)), closes [#2403](https://github.com/google/blockly-samples/issues/2403) [#2410](https://github.com/google/blockly-samples/issues/2410)
-* Revert "chore(deps): Bump the npm_and_yarn group across 6 directories with 11…" (#2408) ([95b13c7](https://github.com/google/blockly-samples/commit/95b13c7de3b6b3892b5c04bdc02a798ff04061b4)), closes [#2408](https://github.com/google/blockly-samples/issues/2408)
-
-
-
-## [0.6.3](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.2...@blockly/keyboard-navigation@0.6.3) (2024-07-04)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.2](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.1...@blockly/keyboard-navigation@0.6.2) (2024-06-06)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.1](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.0...@blockly/keyboard-navigation@0.6.1) (2024-05-30)
-
-
-### Bug Fixes
-
-* multiple blockly instances ([#2375](https://github.com/google/blockly-samples/issues/2375)) ([b231e59](https://github.com/google/blockly-samples/commit/b231e598f2f5f5b0abbfd01d981e35572ad50a26))
-
-
-
-## [0.6.0](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.13...@blockly/keyboard-navigation@0.6.0) (2024-05-21)
-
-
-### âš BREAKING CHANGES
-
-* update all plugins to v11 of blockly
-* **dev-scripts:** This PR removes the support that was added
-
-### Features
-
-* support keyboard navigation of flyout buttons ([#2200](https://github.com/google/blockly-samples/issues/2200)) ([c2abe4d](https://github.com/google/blockly-samples/commit/c2abe4da9808f64161d5dc89a5e4d1b546ec279b))
-* update all plugins to v11 of blockly ([5fcd3e7](https://github.com/google/blockly-samples/commit/5fcd3e7d53eaadffe9bda9a378b404d34b2f8be2))
-
-
-### Bug Fixes
-
-* build for the v11 branch ([#2268](https://github.com/google/blockly-samples/issues/2268)) ([c7a4fc5](https://github.com/google/blockly-samples/commit/c7a4fc5e72c5e8d9e9bc926bbbbadd1eb31792fc))
-* Call blocks handle both manual disabling and disabled defs ([#2334](https://github.com/google/blockly-samples/issues/2334)) ([5eade55](https://github.com/google/blockly-samples/commit/5eade55779c4022d14ad4472ff32c93c78199887))
-* **dev-scripts:** Fixes, refactoring and simplification of `webpack.config.js` and `'blockly'` imports ([#2229](https://github.com/google/blockly-samples/issues/2229)) ([f5ffdb9](https://github.com/google/blockly-samples/commit/f5ffdb961e3b60ddb164087f4bddc4e6215906b7)), closes [#335](https://github.com/google/blockly-samples/issues/335) [#335](https://github.com/google/blockly-samples/issues/335) [#1630](https://github.com/google/blockly-samples/issues/1630) [#335](https://github.com/google/blockly-samples/issues/335) [#226](https://github.com/google/blockly-samples/issues/226) [google/blockly#7822](https://github.com/google/blockly/issues/7822) [google/blockly#7822](https://github.com/google/blockly/issues/7822) [/github.com/google/blockly-samples/pull/2229#issuecomment-1979123919](https://github.com/google//github.com/google/blockly-samples/pull/2229/issues/issuecomment-1979123919)
-* update keyboard nav to use proper getContents ([#2342](https://github.com/google/blockly-samples/issues/2342)) ([4d429c0](https://github.com/google/blockly-samples/commit/4d429c092c59045b6a284f0d62a4afcda994e90d))
-
-
-
-## [0.5.13](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.12...@blockly/keyboard-navigation@0.5.13) (2024-05-16)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.12](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.11...@blockly/keyboard-navigation@0.5.12) (2024-05-09)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.11](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.10...@blockly/keyboard-navigation@0.5.11) (2024-04-25)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.10](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.9...@blockly/keyboard-navigation@0.5.10) (2024-04-04)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.9](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.8...@blockly/keyboard-navigation@0.5.9) (2024-03-28)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.8](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.7...@blockly/keyboard-navigation@0.5.8) (2024-02-08)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.7](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.6...@blockly/keyboard-navigation@0.5.7) (2023-12-14)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.6](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.5...@blockly/keyboard-navigation@0.5.6) (2023-12-07)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.5](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.4...@blockly/keyboard-navigation@0.5.5) (2023-12-07)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.4](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.3...@blockly/keyboard-navigation@0.5.4) (2023-11-16)
-
-
-### Bug Fixes
-
-* resolved 15 ESLint warnings ([#2065](https://github.com/google/blockly-samples/issues/2065)) ([2436337](https://github.com/google/blockly-samples/commit/243633746542bb1518fe2893c0421a5a6f79fd32))
-
-
-
-## [0.5.3](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.2...@blockly/keyboard-navigation@0.5.3) (2023-11-09)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.2](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.1...@blockly/keyboard-navigation@0.5.2) (2023-11-02)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.1](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.0...@blockly/keyboard-navigation@0.5.1) (2023-10-30)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.0](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.7...@blockly/keyboard-navigation@0.5.0) (2023-09-28)
-
-
-### âš BREAKING CHANGES
-
-* changes for v10.2.0 (#1989)
-
-### release
-
-* changes for v10.2.0 ([#1989](https://github.com/google/blockly-samples/issues/1989)) ([4d81ea7](https://github.com/google/blockly-samples/commit/4d81ea7254412ef199a270fc740c2f45755a2725)), closes [#1844](https://github.com/google/blockly-samples/issues/1844) [#1845](https://github.com/google/blockly-samples/issues/1845) [#1863](https://github.com/google/blockly-samples/issues/1863) [#1880](https://github.com/google/blockly-samples/issues/1880) [#1885](https://github.com/google/blockly-samples/issues/1885) [#1886](https://github.com/google/blockly-samples/issues/1886) [#1887](https://github.com/google/blockly-samples/issues/1887) [#1888](https://github.com/google/blockly-samples/issues/1888) [#1919](https://github.com/google/blockly-samples/issues/1919) [#1920](https://github.com/google/blockly-samples/issues/1920) [#1983](https://github.com/google/blockly-samples/issues/1983) [#1984](https://github.com/google/blockly-samples/issues/1984) [#1985](https://github.com/google/blockly-samples/issues/1985) [#1991](https://github.com/google/blockly-samples/issues/1991)
-
-
-
-## [0.4.7](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.6...@blockly/keyboard-navigation@0.4.7) (2023-09-28)
-
-
-### Bug Fixes
-
-* make keyboard nav compatible with v10.2.0 ([#1990](https://github.com/google/blockly-samples/issues/1990)) ([e0915b3](https://github.com/google/blockly-samples/commit/e0915b36afb7d049665673e89c4340bc01cdf08c))
-
-
-
-## [0.4.6](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.5...@blockly/keyboard-navigation@0.4.6) (2023-09-14)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.4.5](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.4...@blockly/keyboard-navigation@0.4.5) (2023-08-17)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.4.4](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.3...@blockly/keyboard-navigation@0.4.4) (2023-07-24)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.4.3](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.2...@blockly/keyboard-navigation@0.4.3) (2023-07-20)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.4.2](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.1...@blockly/keyboard-navigation@0.4.2) (2023-07-13)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.4.1](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.0...@blockly/keyboard-navigation@0.4.1) (2023-07-06)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.4.0](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.18...@blockly/keyboard-navigation@0.4.0) (2023-06-28)
-
-
-### âš BREAKING CHANGES
-
-* update all plugins to use blockly-v10.0.0 (#1744)
-
-### Features
-
-* update all plugins to use blockly-v10.0.0 ([#1744](https://github.com/google/blockly-samples/issues/1744)) ([6cc88cb](https://github.com/google/blockly-samples/commit/6cc88cbef39d4ad664a668d3d46eb29ba7292f9c))
-
-
-
-## [0.3.18](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.17...@blockly/keyboard-navigation@0.3.18) (2023-06-22)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.17](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.16...@blockly/keyboard-navigation@0.3.17) (2023-05-18)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.16](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.15...@blockly/keyboard-navigation@0.3.16) (2023-05-11)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.15](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.14...@blockly/keyboard-navigation@0.3.15) (2023-05-04)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.14](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.13...@blockly/keyboard-navigation@0.3.14) (2023-04-27)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.13](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.12...@blockly/keyboard-navigation@0.3.13) (2023-04-13)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.12](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.11...@blockly/keyboard-navigation@0.3.12) (2023-03-23)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.11](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.10...@blockly/keyboard-navigation@0.3.11) (2023-03-09)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.10](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.9...@blockly/keyboard-navigation@0.3.10) (2023-03-02)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.9](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.8...@blockly/keyboard-navigation@0.3.9) (2023-02-23)
-
-
-### Bug Fixes
-
-* remove prepublishOnly scripts ([#1579](https://github.com/google/blockly-samples/issues/1579)) ([27da6cd](https://github.com/google/blockly-samples/commit/27da6cd04c38f6ba417f4e7446bb6218c475448d))
-
-
-
-## [0.3.8](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.7...@blockly/keyboard-navigation@0.3.8) (2023-02-23)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.7](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.6...@blockly/keyboard-navigation@0.3.7) (2023-02-16)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.6](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.5...@blockly/keyboard-navigation@0.3.6) (2023-02-09)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.5](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.4...@blockly/keyboard-navigation@0.3.5) (2023-01-26)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.4](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.3...@blockly/keyboard-navigation@0.3.4) (2023-01-05)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.3](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.2...@blockly/keyboard-navigation@0.3.3) (2022-12-15)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.2](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.1...@blockly/keyboard-navigation@0.3.2) (2022-10-27)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.1](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.0...@blockly/keyboard-navigation@0.3.1) (2022-10-13)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.0](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.2.22...@blockly/keyboard-navigation@0.3.0) (2022-10-05)
-
-
-### âš BREAKING CHANGES
-
-* update peer and devDependencies of all plugins to require Blockly v9 (#1314)
-
-### Bug Fixes
-
-* keyboard navigation tests ([#1311](https://github.com/google/blockly-samples/issues/1311)) ([8299646](https://github.com/google/blockly-samples/commit/8299646ecf26bf0a95df11bfb24ae2e219c88176))
-* references to deprecated functions in v9 ([#1313](https://github.com/google/blockly-samples/issues/1313)) ([cb2e679](https://github.com/google/blockly-samples/commit/cb2e67987e0b62a77c26adc660cc6ade1ba67954))
-
-
-### Miscellaneous Chores
-
-* update peer and devDependencies of all plugins to require Blockly v9 ([#1314](https://github.com/google/blockly-samples/issues/1314)) ([03d4912](https://github.com/google/blockly-samples/commit/03d4912c42c8de0f30493037ccc28dddaea0f266))
-
-
-
-## 0.2.22 (2022-08-11)
-
-
-### Bug Fixes
-
-* Remove the deprecated block-extension-tooltip ([#1215](https://github.com/google/blockly-samples/issues/1215)) ([a044478](https://github.com/google/blockly-samples/commit/a044478c86a73e3065bc866e427f175cbec6fc13))
-
-
-
-
-
-## 0.2.21 (2022-08-04)
-
-
-### Bug Fixes
-
-* fix the name of the package of suggested-blocks ([#1214](https://github.com/google/blockly-samples/issues/1214)) ([35aa8ec](https://github.com/google/blockly-samples/commit/35aa8ec73a60a4eb5b1e80cb2fc71dcd83d05e27))
-
-
-
-
-
-## 0.2.19 (2022-07-21)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## 0.2.18 (2022-07-06)
-
-
-### Bug Fixes
-
-* Update blockly-react to use functional components instead of class components. ([#1178](https://github.com/google/blockly-samples/issues/1178)) ([fa21187](https://github.com/google/blockly-samples/commit/fa21187cdbe4ec3a5c69f185540dd68a98eb69d7))
-
-
-
-
-
-## 0.2.17 (2022-06-27)
-
-
-### Bug Fixes
-
-* Update package import for keyboard navigation demo ([#1170](https://github.com/google/blockly-samples/issues/1170)) ([69c1725](https://github.com/google/blockly-samples/commit/69c1725b775279fcc397dc178935208d5f42b08c))
-
-
-
-
-
-## 0.2.16 (2022-06-21)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## 0.2.15 (2022-06-08)
-
-
-### Bug Fixes
-
-* package versions to support patch releases ([#1150](https://github.com/google/blockly-samples/issues/1150)) ([e1ae378](https://github.com/google/blockly-samples/commit/e1ae378d779531621c3d948566257d069002963f))
-
-
-
-
-
-## 0.2.14 (2022-06-02)
-
-
-### Bug Fixes
-
-* add git identity ([#1156](https://github.com/google/blockly-samples/issues/1156)) ([8d80924](https://github.com/google/blockly-samples/commit/8d809243b277375beb2ce75d4e157b5e17f78193))
diff --git a/plugins/keyboard-navigation/GETSTARTED.md b/plugins/keyboard-navigation/GETSTARTED.md
deleted file mode 100644
index 99e93c7e9a..0000000000
--- a/plugins/keyboard-navigation/GETSTARTED.md
+++ /dev/null
@@ -1,24 +0,0 @@
-This package was bootstrapped with [@blockly/create-package](https://www.npmjs.com/package/@blockly/create-package).
-
-## Available Scripts
-
-In this directory, you can run:
-
-### `npm start`
-
-Runs the package in development mode.
-
-Open [http://localhost:3000/test](http://localhost:3000/test) to view the test
-playground in the browser. The page will reload if you make edits.
-
-### `npm run build`
-
-Builds the package into the `dist` directory.
-
-### `npm run lint`
-
-Runs eslint on the `src` and `test` directories.
-
-### `npm run clean`
-
-Deletes the `dist` and `build` directories if they exist.
diff --git a/plugins/keyboard-navigation/README.md b/plugins/keyboard-navigation/README.md
deleted file mode 100644
index abf069175b..0000000000
--- a/plugins/keyboard-navigation/README.md
+++ /dev/null
@@ -1,52 +0,0 @@
-# @blockly/keyboard-navigation [](https://github.com/google/blockly)
-
-A [Blockly](https://www.npmjs.com/package/blockly) plugin that adds keyboard
-navigation to Blockly. This allows users to use the keyboard to navigate the
-toolbox and the blocks. More information on keyboard navigation can be found
-on our [keyboard navigation documentation page](https://developers.google.com/blockly/guides/configure/web/keyboard-nav).
-
-## Installation
-
-### Yarn
-
-```
-yarn add @blockly/keyboard-navigation
-```
-
-### npm
-
-```
-npm install @blockly/keyboard-navigation --save
-```
-
-## Usage
-
-```js
-import * as Blockly from 'blockly';
-import {NavigationController} from '@blockly/keyboard-navigation';
-// Inject Blockly.
-const workspace = Blockly.inject('blocklyDiv', {
- toolbox: toolboxCategories,
-});
-// Initialize plugin.
-const navigationController = new NavigationController();
-navigationController.init();
-navigationController.addWorkspace(workspace);
-// Turns on keyboard navigation.
-navigationController.enable(workspace);
-```
-
-## API
-
-This plugin exports the following classes:
-
-- `NavigationController`: Class in charge of registering all keyboard shortcuts.
-- `Navigation`: This holds all the functions necessary to navigate around Blockly using the keyboard.
-- `FlyoutCursor`: Cursor in charge of navigating the flyout.
-- `LineCursor`: Alternative cursor that tries to navigate blocks like lines of code.
-
-You should only need to use these if you plan on changing the default functionality.
-
-## License
-
-Apache 2.0
diff --git a/plugins/keyboard-navigation/package-lock.json b/plugins/keyboard-navigation/package-lock.json
deleted file mode 100644
index a8cd4831c6..0000000000
--- a/plugins/keyboard-navigation/package-lock.json
+++ /dev/null
@@ -1,3070 +0,0 @@
-{
- "name": "@blockly/keyboard-navigation",
- "version": "0.6.11",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "name": "@blockly/keyboard-navigation",
- "version": "0.6.11",
- "license": "Apache-2.0",
- "devDependencies": {
- "chai": "^4.2.0",
- "jsdom": "^16.4.0",
- "jsdom-global": "^3.0.2",
- "mocha": "^10.7.0",
- "sinon": "^9.0.1"
- },
- "engines": {
- "node": ">=8.17.0"
- },
- "peerDependencies": {
- "blockly": "^11.0.0"
- }
- },
- "node_modules/@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
- "dev": true,
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/@sinonjs/fake-timers": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
- "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "node_modules/@sinonjs/samsam": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz",
- "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.6.0",
- "lodash.get": "^4.4.2",
- "type-detect": "^4.0.8"
- }
- },
- "node_modules/@sinonjs/text-encoding": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
- "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
- "dev": true
- },
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/abab": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
- "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
- "dev": true
- },
- "node_modules/acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dev": true,
- "dependencies": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- }
- },
- "node_modules/acorn-globals/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
- "node_modules/browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/chai": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
- "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
- "dev": true,
- "dependencies": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "loupe": "^2.3.1",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "node_modules/cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "dependencies": {
- "cssom": "~0.3.6"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cssstyle/node_modules/cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- },
- "node_modules/data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decimal.js": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
- "dev": true
- },
- "node_modules/deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "dependencies": {
- "type-detect": "^4.0.0"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/diff": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
- "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
- "dev": true,
- "dependencies": {
- "webidl-conversions": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/domexception/node_modules/webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/escodegen": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
- "dev": true,
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
- "engines": {
- "node": ">=6.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true,
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true,
- "bin": {
- "flat": "cli.js"
- }
- },
- "node_modules/form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "dev": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/glob/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "dependencies": {
- "whatwg-encoding": "^1.0.5"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "dev": true,
- "dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "node_modules/jsdom": {
- "version": "16.7.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
- "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.5",
- "acorn": "^8.2.4",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.3.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.1",
- "domexception": "^2.0.1",
- "escodegen": "^2.0.0",
- "form-data": "^3.0.0",
- "html-encoding-sniffer": "^2.0.1",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.5.0",
- "ws": "^7.4.6",
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "canvas": "^2.5.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
- "node_modules/jsdom-global": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
- "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=",
- "dev": true,
- "peerDependencies": {
- "jsdom": ">=10.0.0"
- }
- },
- "node_modules/just-extend": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
- "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
- "dev": true
- },
- "node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "dependencies": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
- "dev": true
- },
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/loupe": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz",
- "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==",
- "dev": true,
- "dependencies": {
- "get-func-name": "^2.0.0"
- }
- },
- "node_modules/mime-db": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
- "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.34",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
- "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
- "dev": true,
- "dependencies": {
- "mime-db": "1.51.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mocha": {
- "version": "10.7.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.0.tgz",
- "integrity": "sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "^4.1.3",
- "browser-stdout": "^1.3.1",
- "chokidar": "^3.5.3",
- "debug": "^4.3.5",
- "diff": "^5.2.0",
- "escape-string-regexp": "^4.0.0",
- "find-up": "^5.0.0",
- "glob": "^8.1.0",
- "he": "^1.2.0",
- "js-yaml": "^4.1.0",
- "log-symbols": "^4.1.0",
- "minimatch": "^5.1.6",
- "ms": "^2.1.3",
- "serialize-javascript": "^6.0.2",
- "strip-json-comments": "^3.1.1",
- "supports-color": "^8.1.1",
- "workerpool": "^6.5.1",
- "yargs": "^16.2.0",
- "yargs-parser": "^20.2.9",
- "yargs-unparser": "^2.0.0"
- },
- "bin": {
- "_mocha": "bin/_mocha",
- "mocha": "bin/mocha.js"
- },
- "engines": {
- "node": ">= 14.0.0"
- }
- },
- "node_modules/mocha/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/mocha/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/mocha/node_modules/debug": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
- "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/mocha/node_modules/debug/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/mocha/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/mocha/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mocha/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/mocha/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/nise": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz",
- "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.7.0",
- "@sinonjs/fake-timers": "^6.0.0",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "path-to-regexp": "^1.7.0"
- }
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nwsapi": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
- "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
- "dev": true
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "dependencies": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "dependencies": {
- "isarray": "0.0.1"
- }
- },
- "node_modules/pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "dev": true
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "dev": true
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "node_modules/saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "dependencies": {
- "xmlchars": "^2.2.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/sinon": {
- "version": "9.2.4",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz",
- "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.8.1",
- "@sinonjs/fake-timers": "^6.0.1",
- "@sinonjs/samsam": "^5.3.1",
- "diff": "^4.0.2",
- "nise": "^4.0.4",
- "supports-color": "^7.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/sinon"
- }
- },
- "node_modules/sinon/node_modules/diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/tough-cookie": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
- "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
- "dev": true,
- "dependencies": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tough-cookie/node_modules/universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/tr46": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
- "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "dependencies": {
- "prelude-ls": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "node_modules/w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "dependencies": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "node_modules/w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "dependencies": {
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true,
- "engines": {
- "node": ">=10.4"
- }
- },
- "node_modules/whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "dependencies": {
- "iconv-lite": "0.4.24"
- }
- },
- "node_modules/whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "node_modules/whatwg-url": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
- "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/workerpool": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
- "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
- "dev": true
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "dev": true,
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "node_modules/xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "dependencies": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-unparser/node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- },
- "dependencies": {
- "@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
- "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "@sinonjs/samsam": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz",
- "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.6.0",
- "lodash.get": "^4.4.2",
- "type-detect": "^4.0.8"
- }
- },
- "@sinonjs/text-encoding": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
- "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
- "dev": true
- },
- "@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "dev": true
- },
- "abab": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
- "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
- "dev": true
- },
- "acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "dev": true
- },
- "acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dev": true,
- "requires": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- },
- "dependencies": {
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- }
- }
- },
- "acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "requires": {
- "debug": "4"
- }
- },
- "ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true
- },
- "braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "requires": {
- "fill-range": "^7.1.1"
- }
- },
- "browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
- },
- "chai": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
- "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "loupe": "^2.3.1",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true
- },
- "chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- }
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "requires": {
- "cssom": "~0.3.6"
- },
- "dependencies": {
- "cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- }
- }
- },
- "data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
- "dev": true,
- "requires": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- }
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
- },
- "decimal.js": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
- "dev": true
- },
- "deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
- "diff": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
- "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
- "dev": true
- },
- "domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
- "dev": true,
- "requires": {
- "webidl-conversions": "^5.0.0"
- },
- "dependencies": {
- "webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true
- }
- }
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "escodegen": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
- "dev": true,
- "requires": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
- },
- "form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "optional": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true
- },
- "glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "requires": {
- "whatwg-encoding": "^1.0.5"
- }
- },
- "http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "dev": true,
- "requires": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- }
- },
- "https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true
- },
- "is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true
- },
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "jsdom": {
- "version": "16.7.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
- "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
- "dev": true,
- "requires": {
- "abab": "^2.0.5",
- "acorn": "^8.2.4",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.3.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.1",
- "domexception": "^2.0.1",
- "escodegen": "^2.0.0",
- "form-data": "^3.0.0",
- "html-encoding-sniffer": "^2.0.1",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.5.0",
- "ws": "^7.4.6",
- "xml-name-validator": "^3.0.0"
- }
- },
- "jsdom-global": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
- "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=",
- "dev": true
- },
- "just-extend": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
- "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
- "dev": true
- },
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
- "dev": true
- },
- "log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- }
- },
- "loupe": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz",
- "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.0"
- }
- },
- "mime-db": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
- "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.34",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
- "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
- "dev": true,
- "requires": {
- "mime-db": "1.51.0"
- }
- },
- "mocha": {
- "version": "10.7.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.0.tgz",
- "integrity": "sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.3",
- "browser-stdout": "^1.3.1",
- "chokidar": "^3.5.3",
- "debug": "^4.3.5",
- "diff": "^5.2.0",
- "escape-string-regexp": "^4.0.0",
- "find-up": "^5.0.0",
- "glob": "^8.1.0",
- "he": "^1.2.0",
- "js-yaml": "^4.1.0",
- "log-symbols": "^4.1.0",
- "minimatch": "^5.1.6",
- "ms": "^2.1.3",
- "serialize-javascript": "^6.0.2",
- "strip-json-comments": "^3.1.1",
- "supports-color": "^8.1.1",
- "workerpool": "^6.5.1",
- "yargs": "^16.2.0",
- "yargs-parser": "^20.2.9",
- "yargs-unparser": "^2.0.0"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "debug": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
- "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
- }
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "nise": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz",
- "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0",
- "@sinonjs/fake-timers": "^6.0.0",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "path-to-regexp": "^1.7.0"
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "nwsapi": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
- "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "requires": {
- "isarray": "0.0.1"
- }
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
- "punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true
- },
- "querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "dev": true
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true
- },
- "requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "requires": {
- "xmlchars": "^2.2.0"
- }
- },
- "serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "sinon": {
- "version": "9.2.4",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz",
- "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.8.1",
- "@sinonjs/fake-timers": "^6.0.1",
- "@sinonjs/samsam": "^5.3.1",
- "diff": "^4.0.2",
- "nise": "^4.0.4",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true
- }
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "tough-cookie": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
- "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
- "dev": true,
- "requires": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
- "dependencies": {
- "universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "dev": true
- }
- }
- },
- "tr46": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
- "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.1"
- }
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2"
- }
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
- },
- "url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "requires": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "requires": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "requires": {
- "xml-name-validator": "^3.0.0"
- }
- },
- "webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true
- },
- "whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "requires": {
- "iconv-lite": "0.4.24"
- }
- },
- "whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "whatwg-url": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
- "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
- "dev": true,
- "requires": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
- }
- },
- "word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true
- },
- "workerpool": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
- "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
- "dev": true
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "dev": true
- },
- "xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true
- },
- "yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "requires": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "dependencies": {
- "is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
- }
- }
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- }
- }
-}
\ No newline at end of file
diff --git a/plugins/keyboard-navigation/package.json b/plugins/keyboard-navigation/package.json
deleted file mode 100644
index 0193fb9aff..0000000000
--- a/plugins/keyboard-navigation/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "name": "@blockly/keyboard-navigation",
- "version": "0.6.11",
- "description": "A Blockly plugin that adds keyboard navigation support.",
- "scripts": {
- "audit:fix": "blockly-scripts auditFix",
- "build": "blockly-scripts build",
- "clean": "blockly-scripts clean",
- "lint": "eslint .",
- "predeploy": "blockly-scripts predeploy",
- "start": "blockly-scripts start",
- "test": "blockly-scripts test"
- },
- "main": "./dist/index.js",
- "module": "./src/index.js",
- "unpkg": "./dist/index.js",
- "author": "Blockly Team",
- "keywords": [
- "blockly",
- "blockly-plugin",
- "keyboard-navigation"
- ],
- "homepage": "https://github.com/google/blockly-samples/tree/master/plugins/keyboard-navigation#readme",
- "bugs": {
- "url": "https://github.com/google/blockly-samples/issues"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/google/blockly-samples.git",
- "directory": "plugins/keyboard-navigation"
- },
- "license": "Apache-2.0",
- "directories": {
- "dist": "dist",
- "src": "src"
- },
- "files": [
- "dist",
- "src"
- ],
- "devDependencies": {
- "@blockly/dev-scripts": "^4.0.6",
- "@blockly/dev-tools": "^8.0.11",
- "chai": "^4.2.0",
- "jsdom": "^16.4.0",
- "jsdom-global": "^3.0.2",
- "mocha": "^10.7.0",
- "sinon": "^9.0.1"
- },
- "peerDependencies": {
- "blockly": "^11.0.0"
- },
- "publishConfig": {
- "access": "public",
- "registry": "https://wombat-dressing-room.appspot.com"
- },
- "engines": {
- "node": ">=8.17.0"
- }
-}
diff --git a/plugins/keyboard-navigation/src/constants.js b/plugins/keyboard-navigation/src/constants.js
deleted file mode 100644
index 187ad47dcf..0000000000
--- a/plugins/keyboard-navigation/src/constants.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Constants for keyboard navigation.
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-
-/**
- * Keyboard navigation states.
- * The different parts of Blockly that the user navigates between.
- * @enum {string}
- * @const
- * @public
- */
-export const STATE = {
- WORKSPACE: 'workspace',
- FLYOUT: 'flyout',
- TOOLBOX: 'toolbox',
-};
-
-/**
- * Default keyboard navigation shortcut names.
- * @enum {string}
- * @const
- * @public
- */
-export const SHORTCUT_NAMES = {
- PREVIOUS: 'previous',
- NEXT: 'next',
- IN: 'in',
- OUT: 'out',
- INSERT: 'insert',
- MARK: 'mark',
- DISCONNECT: 'disconnect',
- TOOLBOX: 'toolbox',
- EXIT: 'exit',
- TOGGLE_KEYBOARD_NAV: 'toggle_keyboard_nav',
- COPY: 'keyboard_nav_copy',
- CUT: 'keyboard_nav_cut',
- PASTE: 'keyboard_nav_paste',
- DELETE: 'keyboard_nav_delete',
- MOVE_WS_CURSOR_UP: 'workspace_up',
- MOVE_WS_CURSOR_DOWN: 'workspace_down',
- MOVE_WS_CURSOR_LEFT: 'workspace_left',
- MOVE_WS_CURSOR_RIGHT: 'workspace_right',
-};
-
-/**
- * Types of possible messages passed into the loggingCallback in the Navigation
- * class.
- * @enum {string}
- * @const
- * @public
- */
-export const LOGGING_MSG_TYPE = {
- ERROR: 'error',
- WARN: 'warn',
- LOG: 'log',
-};
diff --git a/plugins/keyboard-navigation/src/flyout_cursor.js b/plugins/keyboard-navigation/src/flyout_cursor.js
deleted file mode 100644
index 20cd17b957..0000000000
--- a/plugins/keyboard-navigation/src/flyout_cursor.js
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview The class representing a cursor used to navigate the flyout.
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-
-import * as Blockly from 'blockly/core';
-
-/**
- * Class for a flyout cursor.
- * This controls how a user navigates blocks in the flyout.
- * This cursor only allows a user to go to the previous or next stack.
- * @constructor
- * @extends {Blockly.Cursor}
- */
-export class FlyoutCursor extends Blockly.Cursor {
- /**
- * The constructor for the FlyoutCursor.
- */
- constructor() {
- super();
- }
-
- /**
- * Moves the cursor to the next stack of blocks in the flyout.
- * @returns {Blockly.ASTNode} The next element, or null if the current node is
- * not set or there is no next value.
- * @override
- */
- next() {
- const curNode = this.getCurNode();
- if (!curNode) {
- return null;
- }
- const newNode = curNode.next();
-
- if (newNode) {
- this.setCurNode(newNode);
- }
- return newNode;
- }
-
- /**
- * This is a no-op since a flyout cursor can not go in.
- * @returns {null} Always null.
- * @override
- */
- in() {
- return null;
- }
-
- /**
- * Moves the cursor to the previous stack of blocks in the flyout.
- * @returns {Blockly.ASTNode} The previous element, or null if the current
- * node is not set or there is no previous value.
- * @override
- */
- prev() {
- const curNode = this.getCurNode();
- if (!curNode) {
- return null;
- }
- const newNode = curNode.prev();
-
- if (newNode) {
- this.setCurNode(newNode);
- }
- return newNode;
- }
-
- /**
- * This is a no-op since a flyout cursor can not go out.
- * @returns {null} Always null.
- * @override
- */
- out() {
- return null;
- }
-}
-
-export const registrationType = Blockly.registry.Type.CURSOR;
-export const registrationName = 'FlyoutCursor';
-
-Blockly.registry.register(registrationType, registrationName, FlyoutCursor);
-
-export const pluginInfo = {
- [registrationType]: registrationName,
-};
diff --git a/plugins/keyboard-navigation/src/gesture_monkey_patch.js b/plugins/keyboard-navigation/src/gesture_monkey_patch.js
deleted file mode 100644
index ba5d6eb790..0000000000
--- a/plugins/keyboard-navigation/src/gesture_monkey_patch.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Overrides methods on Blockly.Gesture in order to allow users
- * to move the cursor to blocks or the workspace using shift click.
- * TODO(google/blockly#4584): We do not have a way to do this currently without
- * monkey patching Blockly.
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-
-import * as Blockly from 'blockly/core';
-
-const oldDoWorkspaceClick = Blockly.Gesture.prototype.doWorkspaceClick_;
-
-/**
- * Execute a workspace click. When in accessibility mode shift clicking will
- * move the cursor.
- * @param {!Event} e A mouse up or touch end event.
- * @this {Blockly.Gesture}
- * @override
- */
-Blockly.Gesture.prototype.doWorkspaceClick_ = function (e) {
- oldDoWorkspaceClick.call(this, e);
- const ws = this.creatorWorkspace_;
- if (e.shiftKey && ws.keyboardAccessibilityMode) {
- const screenCoord = new Blockly.utils.Coordinate(e.clientX, e.clientY);
- const wsCoord = Blockly.utils.svgMath.screenToWsCoordinates(
- ws,
- screenCoord,
- );
- const wsNode = Blockly.ASTNode.createWorkspaceNode(ws, wsCoord);
- ws.getCursor().setCurNode(wsNode);
- }
-};
-
-const oldDoBlockClick = Blockly.Gesture.prototype.doBlockClick_;
-
-/**
- * Execute a block click. When in accessibility mode shift clicking will move
- * the cursor to the block.
- * @this {Blockly.Gesture}
- * @override
- */
-Blockly.Gesture.prototype.doBlockClick_ = function (e) {
- oldDoBlockClick.call(this, e);
- if (
- !this.targetBlock_.isInFlyout &&
- this.mostRecentEvent_.shiftKey &&
- this.targetBlock_.workspace.keyboardAccessibilityMode
- ) {
- this.creatorWorkspace_
- .getCursor()
- .setCurNode(Blockly.ASTNode.createTopNode(this.targetBlock_));
- }
-};
diff --git a/plugins/keyboard-navigation/src/index.js b/plugins/keyboard-navigation/src/index.js
deleted file mode 100644
index 75ef7e0157..0000000000
--- a/plugins/keyboard-navigation/src/index.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-import * as Constants from '../src/constants';
-
-import {
- FlyoutCursor,
- pluginInfo as FlyoutCursorPluginInfo,
-} from './flyout_cursor';
-import {LineCursor, pluginInfo as LineCursorPluginInfo} from './line_cursor';
-import {Navigation} from './navigation';
-import {NavigationController} from './navigation_controller';
-
-export {
- Constants,
- FlyoutCursor,
- FlyoutCursorPluginInfo,
- LineCursor,
- LineCursorPluginInfo,
- Navigation,
- NavigationController,
-};
diff --git a/plugins/keyboard-navigation/src/line_cursor.js b/plugins/keyboard-navigation/src/line_cursor.js
deleted file mode 100644
index 8f1595b925..0000000000
--- a/plugins/keyboard-navigation/src/line_cursor.js
+++ /dev/null
@@ -1,190 +0,0 @@
-/**
- * @license
- * Copyright 2020 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview The class representing a line cursor.
- * A line cursor tries to traverse the blocks and connections on a block as if
- * they were lines of code in a text editor. Previous and next traverse previous
- * connections, next connections and blocks, while in and out traverse input
- * connections and fields.
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-
-import * as Blockly from 'blockly/core';
-
-/**
- * Class for a line cursor.
- * @constructor
- * @extends {Blockly.BasicCursor}
- */
-export class LineCursor extends Blockly.BasicCursor {
- /**
- * Constructor for a line cursor.
- */
- constructor() {
- super();
- }
-
- /**
- * Moves the cursor to the next previous connection, next connection or block
- * in the pre order traversal. Finds the next node in the pre order traversal.
- * @returns {Blockly.ASTNode} The next node, or null if the current node is
- * not set or there is no next value.
- * @override
- */
- next() {
- const curNode = this.getCurNode();
- if (!curNode) {
- return null;
- }
- let newNode = this.getNextNode_(curNode, this.validLineNode);
-
- // Skip the input or next value if there is a connected block.
- if (
- newNode &&
- (newNode.getType() == Blockly.ASTNode.types.INPUT ||
- newNode.getType() == Blockly.ASTNode.types.NEXT) &&
- newNode.getLocation().targetBlock()
- ) {
- newNode = this.getNextNode_(newNode, this.validLineNode);
- }
- if (newNode) {
- this.setCurNode(newNode);
- }
- return newNode;
- }
-
- /**
- * Moves the cursor to the next input connection or field
- * in the pre order traversal.
- * @returns {Blockly.ASTNode} The next node, or null if the current node is
- * not set or there is no next value.
- * @override
- */
- in() {
- const curNode = this.getCurNode();
- if (!curNode) {
- return null;
- }
- const newNode = this.getNextNode_(curNode, this.validInLineNode);
-
- if (newNode) {
- this.setCurNode(newNode);
- }
- return newNode;
- }
- /**
- * Moves the cursor to the previous next connection or previous connection in
- * the pre order traversal.
- * @returns {Blockly.ASTNode} The previous node, or null if the current node
- * is not set or there is no previous value.
- * @override
- */
- prev() {
- const curNode = this.getCurNode();
- if (!curNode) {
- return null;
- }
- let newNode = this.getPreviousNode_(curNode, this.validLineNode);
-
- if (
- newNode &&
- (newNode.getType() == Blockly.ASTNode.types.INPUT ||
- newNode.getType() == Blockly.ASTNode.types.NEXT) &&
- newNode.getLocation().targetBlock()
- ) {
- newNode = this.getPreviousNode_(newNode, this.validLineNode);
- }
-
- if (newNode) {
- this.setCurNode(newNode);
- }
- return newNode;
- }
- /**
- * Moves the cursor to the previous input connection or field in the pre order
- * traversal.
- * @returns {Blockly.ASTNode} The previous node, or null if the current node
- * is not set or there is no previous value.
- * @override
- */
- out() {
- const curNode = this.getCurNode();
- if (!curNode) {
- return null;
- }
- const newNode = this.getPreviousNode_(curNode, this.validInLineNode);
-
- if (newNode) {
- this.setCurNode(newNode);
- }
- return newNode;
- }
-
- /**
- * Decides if the previous and next methods should traverse the given node.
- * The previous and next method only traverse previous connections, next
- * connections and blocks.
- * @param {Blockly.ASTNode} node The AST node to check.
- * @returns {boolean} True if the node should be visited, false otherwise.
- * @protected
- */
- validLineNode(node) {
- if (!node) {
- return false;
- }
- let isValid = false;
- const location = node.getLocation();
- const type = node && node.getType();
- if (type == Blockly.ASTNode.types.BLOCK) {
- if (location.outputConnection === null) {
- isValid = true;
- }
- } else if (
- type == Blockly.ASTNode.types.INPUT &&
- location.type == Blockly.NEXT_STATEMENT
- ) {
- isValid = true;
- } else if (type == Blockly.ASTNode.types.NEXT) {
- isValid = true;
- }
- return isValid;
- }
-
- /**
- * Decides if the in and out methods should traverse the given node.
- * The in and out method only traverse fields and input connections.
- * @param {Blockly.ASTNode} node The AST node to check whether it is valid.
- * @returns {boolean} True if the node should be visited, false otherwise.
- * @protected
- */
- validInLineNode(node) {
- if (!node) {
- return false;
- }
- let isValid = false;
- const location = node.getLocation();
- const type = node && node.getType();
- if (type == Blockly.ASTNode.types.FIELD) {
- isValid = true;
- } else if (
- type == Blockly.ASTNode.types.INPUT &&
- location.type == Blockly.INPUT_VALUE
- ) {
- isValid = true;
- }
- return isValid;
- }
-}
-
-export const registrationName = 'LineCursor';
-export const registrationType = Blockly.registry.Type.CURSOR;
-
-Blockly.registry.register(registrationType, registrationName, LineCursor);
-
-export const pluginInfo = {
- [registrationType]: registrationName,
-};
diff --git a/plugins/keyboard-navigation/src/navigation.js b/plugins/keyboard-navigation/src/navigation.js
deleted file mode 100644
index e78edb897f..0000000000
--- a/plugins/keyboard-navigation/src/navigation.js
+++ /dev/null
@@ -1,1289 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Holds all methods necessary to use Blockly through the
- * keyboard.
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-
-import * as Blockly from 'blockly/core';
-import * as Constants from './constants';
-import {
- registrationName as cursorRegistrationName,
- registrationType as cursorRegistrationType,
-} from './flyout_cursor';
-
-/**
- * Class that holds all methods necessary for keyboard navigation to work.
- */
-export class Navigation {
- /**
- * Constructor for keyboard navigation.
- */
- constructor() {
- /**
- * Object holding the location of the cursor for each workspace.
- * Possible locations of the cursor are: workspace, flyout or toolbox.
- * @type {Object}
- * @protected
- */
- this.workspaceStates = {};
-
- /**
- * An optional method that allows a developer to customize how to handle
- * logs, warnings, and errors. The first argument is one of 'log', 'warn',
- * or 'error'. The second argument is the message.
- * @type {?function(Constants.LOGGING_MSG_TYPE, string)}
- * @public
- */
- this.loggingCallback = null;
-
- /**
- * The distance to move the cursor when the cursor is on the workspace.
- * @type {number}
- * @public
- */
- this.WS_MOVE_DISTANCE = 40;
-
- /**
- * The name of the marker to use for keyboard navigation.
- * @type {string}
- * @public
- */
- this.MARKER_NAME = 'local_marker_1';
-
- /**
- * The default coordinate to use when focusing on the workspace and no
- * blocks are present. In pixel coordinates, but will be converted to
- * workspace coordinates when used to position the cursor.
- * @type {!Blockly.utils.Coordinate}
- * @public
- */
- this.DEFAULT_WS_COORDINATE = new Blockly.utils.Coordinate(100, 100);
-
- /**
- * The default coordinate to use when moving the cursor to the workspace
- * after a block has been deleted. In pixel coordinates, but will be
- * converted to workspace coordinates when used to position the cursor.
- * @type {!Blockly.utils.Coordinate}
- * @public
- */
- this.WS_COORDINATE_ON_DELETE = new Blockly.utils.Coordinate(100, 100);
-
- /**
- * Wrapper for method that deals with workspace changes.
- * Used for removing change listener.
- * @type {Function}
- * @protected
- */
- this.wsChangeWrapper = this.workspaceChangeListener.bind(this);
-
- /**
- * Wrapper for method that deals with flyout changes.
- * Used for removing change listener.
- * @type {Function}
- * @protected
- */
- this.flyoutChangeWrapper = this.flyoutChangeListener.bind(this);
-
- /**
- * The list of registered workspaces.
- * Used when removing change listeners in dispose.
- * @type {!Array}
- * @protected
- */
- this.workspaces = [];
- }
-
- /**
- * Adds all necessary change listeners and markers to a workspace for keyboard
- * navigation to work. This must be called for keyboard navigation to work
- * on a workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to add keyboard
- * navigation to.
- * @public
- */
- addWorkspace(workspace) {
- this.workspaces.push(workspace);
- const flyout = workspace.getFlyout();
- workspace
- .getMarkerManager()
- .registerMarker(this.MARKER_NAME, new Blockly.Marker());
- workspace.addChangeListener(this.wsChangeWrapper);
-
- if (flyout) {
- this.addFlyout(flyout);
- }
- }
-
- /**
- * Removes all keyboard navigation change listeners and markers.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to remove keyboard
- * navigation from.
- * @public
- */
- removeWorkspace(workspace) {
- const workspaceIdx = this.workspaces.indexOf(workspace);
- const flyout = workspace.getFlyout();
-
- if (workspace.getCursor()) {
- this.disableKeyboardAccessibility(workspace);
- }
-
- if (workspaceIdx > -1) {
- this.workspaces.splice(workspaceIdx, 1);
- }
- if (workspace.getMarkerManager()) {
- workspace.getMarkerManager().unregisterMarker(this.MARKER_NAME);
- }
- workspace.removeChangeListener(this.wsChangeWrapper);
-
- if (flyout) {
- this.removeFlyout(flyout);
- }
- }
-
- /**
- * Sets the state for the given workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to set the state on.
- * @param {!Constants.STATE} state The navigation state.
- * @protected
- */
- setState(workspace, state) {
- this.workspaceStates[workspace.id] = state;
- }
-
- /**
- * Gets the navigation state of the current workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to get the state of.
- * @returns {!Constants.STATE} The state of the given workspace.
- * @package
- */
- getState(workspace) {
- return this.workspaceStates[workspace.id];
- }
-
- /**
- * Gets the marker created for keyboard navigation.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to get the marker
- * from.
- * @returns {?Blockly.Marker} The marker created for keyboard navigation.
- * @protected
- */
- getMarker(workspace) {
- return workspace.getMarker(this.MARKER_NAME);
- }
-
- /**
- * Adds all event listeners and cursors to the flyout that are needed for
- * keyboard navigation to work.
- * @param {!Blockly.IFlyout} flyout The flyout to add a cursor and change
- * listeners to.
- * @protected
- */
- addFlyout(flyout) {
- const flyoutWorkspace = flyout.getWorkspace();
- flyoutWorkspace.addChangeListener(this.flyoutChangeWrapper);
- const FlyoutCursorClass = Blockly.registry.getClass(
- cursorRegistrationType,
- cursorRegistrationName,
- );
- flyoutWorkspace.getMarkerManager().setCursor(new FlyoutCursorClass());
- }
-
- /**
- * Removes all change listeners from the flyout that are needed for
- * keyboard navigation to work.
- * @param {!Blockly.IFlyout} flyout The flyout to add a cursor and event
- * listeners to.
- * @protected
- */
- removeFlyout(flyout) {
- const flyoutWorkspace = flyout.getWorkspace();
- flyoutWorkspace.removeChangeListener(this.flyoutChangeWrapper);
- }
-
- /**
- * Updates the state of keyboard navigation and the position of the cursor
- * based on workspace events.
- * @param {!Blockly.Events.Abstract} e The Blockly event to process.
- * @protected
- */
- workspaceChangeListener(e) {
- const workspace = Blockly.Workspace.getById(e.workspaceId);
- if (!workspace || !workspace.keyboardAccessibilityMode) {
- return;
- }
- switch (e.type) {
- case Blockly.Events.DELETE:
- this.handleBlockDeleteByDrag(workspace, e);
- break;
- case Blockly.Events.BLOCK_CHANGE:
- if (e.element === 'mutation') {
- this.handleBlockMutation(
- workspace,
- /** @type {Blockly.Events.BlockChange} */ (e),
- );
- }
- break;
- case Blockly.Events.CLICK:
- this.handleWorkspaceClick(
- workspace,
- /** @type {Blockly.Events.Click} */ (e),
- );
- break;
- case Blockly.Events.TOOLBOX_ITEM_SELECT:
- this.handleToolboxCategoryClick(
- workspace,
- /** @type {Blockly.Events.ToolboxItemSelect} */ (e),
- );
- break;
- case Blockly.Events.BLOCK_CREATE:
- this.handleBlockCreate(workspace, e);
- }
- }
-
- /**
- * Updates the state of keyboard navigation and the position of the cursor
- * based on events emitted from the flyout's workspace.
- * @param {!Blockly.Events.Abstract} e The Blockly event to process.
- * @protected
- */
- flyoutChangeListener(e) {
- const flyoutWorkspace = Blockly.Workspace.getById(e.workspaceId);
- const mainWorkspace = flyoutWorkspace.targetWorkspace;
- const flyout = mainWorkspace.getFlyout();
-
- // This is called for simple toolboxes and for toolboxes that have a flyout
- // that does not close. Autoclosing flyouts close before we need to focus
- // the cursor on the block that was clicked.
- if (
- mainWorkspace &&
- mainWorkspace.keyboardAccessibilityMode &&
- !flyout.autoClose
- ) {
- if (e.type === Blockly.Events.CLICK && e.targetType === 'block') {
- const block = flyoutWorkspace.getBlockById(e.blockId);
- this.handleBlockClickInFlyout(mainWorkspace, block);
- } else if (e.type === Blockly.Events.SELECTED) {
- const block = flyoutWorkspace.getBlockById(e.newElementId);
- this.handleBlockClickInFlyout(mainWorkspace, block);
- }
- }
- }
-
- /**
- * Moves the cursor to the workspace if a block has been dragged from a simple
- * toolbox. For a category toolbox this is handled in
- * handleToolboxCategoryClick_.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor belongs
- * to.
- * @param {!Blockly.Events.Abstract} e The Blockly event to process.
- * @protected
- */
- handleBlockCreate(workspace, e) {
- if (this.getState(workspace) === Constants.STATE.FLYOUT) {
- this.resetFlyout(workspace, !!workspace.getToolbox());
- this.setState(workspace, Constants.STATE.WORKSPACE);
- }
- }
-
- /**
- * Moves the cursor to the block level when the block the cursor is on
- * mutates.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor belongs
- * to.
- * @param {!Blockly.Events.BlockChange} e The Blockly event to process.
- * @protected
- */
- handleBlockMutation(workspace, e) {
- const mutatedBlockId = e.blockId;
- const cursor = workspace.getCursor();
- if (cursor) {
- const curNode = cursor.getCurNode();
- const block = curNode ? curNode.getSourceBlock() : null;
- if (block && block.id === mutatedBlockId) {
- cursor.setCurNode(Blockly.ASTNode.createBlockNode(block));
- }
- }
- }
-
- /**
- * Moves the cursor to the workspace when a user clicks on the workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor belongs
- * to.
- * @param {!Blockly.Events.Click} e The Blockly event to process.
- * @protected
- */
- handleWorkspaceClick(workspace, e) {
- const workspaceState = this.getState(workspace);
- if (workspaceState !== Constants.STATE.WORKSPACE) {
- this.resetFlyout(workspace, !!workspace.getToolbox());
- this.setState(workspace, Constants.STATE.WORKSPACE);
- }
- }
-
- /**
- * Moves the cursor to the toolbox when a user clicks on a toolbox category.
- * Moves the cursor to the workspace if theh user closes the toolbox category.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the toolbox is on.
- * @param {!Blockly.Events.ToolboxItemSelect} e The event emitted from the
- * workspace.
- * @protected
- */
- handleToolboxCategoryClick(workspace, e) {
- const workspaceState = this.getState(workspace);
- if (e.newItem && workspaceState !== Constants.STATE.TOOLBOX) {
- // If the toolbox category was just clicked, focus on the toolbox.
- this.focusToolbox(workspace);
- } else if (!e.newItem) {
- // If the toolbox was closed, focus on the workspace.
- this.resetFlyout(workspace, !!workspace.getToolbox());
- this.setState(workspace, Constants.STATE.WORKSPACE);
- }
- }
-
- /**
- * Moves the cursor to the workspace when its parent block is deleted by
- * being dragged to the flyout or to the trashcan.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the block was on.
- * @param {!Blockly.Events.Delete} e The event emitted when a block is
- * deleted.
- * @protected
- */
- handleBlockDeleteByDrag(workspace, e) {
- const deletedBlockId = e.blockId;
- const ids = e.ids;
- const cursor = workspace.getCursor();
-
- // Make sure the cursor is on a block.
- if (
- !cursor ||
- !cursor.getCurNode() ||
- !cursor.getCurNode().getSourceBlock()
- ) {
- return;
- }
-
- const curNode = cursor.getCurNode();
- const sourceBlock = curNode.getSourceBlock();
- if (sourceBlock.id === deletedBlockId || ids.indexOf(sourceBlock.id) > -1) {
- cursor.setCurNode(
- Blockly.ASTNode.createWorkspaceNode(
- workspace,
- this.WS_COORDINATE_ON_DELETE,
- ),
- );
- }
- }
-
- /**
- * Handles when a user clicks on a block in the flyout by moving the cursor
- * to that stack of blocks and setting the state of navigation to the flyout.
- * @param {!Blockly.WorkspaceSvg} mainWorkspace The workspace the user clicked
- * on.
- * @param {!Blockly.BlockSvg} block The block the user clicked on.
- * @protected
- */
- handleBlockClickInFlyout(mainWorkspace, block) {
- if (!block) {
- return;
- }
- if (block.isShadow()) {
- block = /** @type {Blockly.BlockSvg}*/ (block.getParent());
- }
- this.getFlyoutCursor(mainWorkspace).setCurNode(
- Blockly.ASTNode.createStackNode(block),
- );
- this.setState(mainWorkspace, Constants.STATE.FLYOUT);
- }
-
- /**
- * Moves the cursor to the appropriate location before a block is deleted.
- * This is used when the user deletes a block using the delete or backspace
- * key.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the block is being
- * deleted on.
- * @param {!Blockly.BlockSvg} deletedBlock The block that is being deleted.
- * @package
- */
- moveCursorOnBlockDelete(workspace, deletedBlock) {
- if (!workspace || !workspace.getCursor()) {
- return;
- }
- const cursor = workspace.getCursor();
- const curNode = cursor.getCurNode();
- const block = curNode ? curNode.getSourceBlock() : null;
-
- if (block === deletedBlock) {
- // If the block has a parent move the cursor to their connection point.
- if (block.getParent()) {
- const topConnection =
- block.previousConnection || block.outputConnection;
- if (topConnection) {
- cursor.setCurNode(
- Blockly.ASTNode.createConnectionNode(
- topConnection.targetConnection,
- ),
- );
- }
- } else {
- // If the block is by itself move the cursor to the workspace.
- cursor.setCurNode(
- Blockly.ASTNode.createWorkspaceNode(
- block.workspace,
- block.getRelativeToSurfaceXY(),
- ),
- );
- }
- // If the cursor is on a block whose parent is being deleted, move the
- // cursor to the workspace.
- } else if (block && deletedBlock.getChildren(false).indexOf(block) > -1) {
- cursor.setCurNode(
- Blockly.ASTNode.createWorkspaceNode(
- block.workspace,
- block.getRelativeToSurfaceXY(),
- ),
- );
- }
- }
-
- /**
- * Sets the navigation state to toolbox and selects the first category in the
- * toolbox. No-op if a toolbox does not exist on the given workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to get the toolbox
- * on.
- * @package
- */
- focusToolbox(workspace) {
- const toolbox = workspace.getToolbox();
- if (!toolbox) {
- return;
- }
-
- this.setState(workspace, Constants.STATE.TOOLBOX);
- this.resetFlyout(workspace, false /* shouldHide */);
-
- if (!this.getMarker(workspace).getCurNode()) {
- this.markAtCursor(workspace);
- }
-
- if (!toolbox.getSelectedItem()) {
- // Find the first item that is selectable.
- const toolboxItems = toolbox.getToolboxItems();
- for (let i = 0, toolboxItem; (toolboxItem = toolboxItems[i]); i++) {
- if (toolboxItem.isSelectable()) {
- toolbox.selectItemByPosition(i);
- break;
- }
- }
- }
- }
-
- /**
- * Sets the navigation state to flyout and moves the cursor to the first
- * block or button in the flyout.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the flyout is on.
- * @package
- */
- focusFlyout(workspace) {
- const flyout = workspace.getFlyout();
-
- this.setState(workspace, Constants.STATE.FLYOUT);
-
- if (!this.getMarker(workspace).getCurNode()) {
- this.markAtCursor(workspace);
- }
-
- if (flyout && flyout.getWorkspace()) {
- const flyoutContents = flyout.getContents();
- const firstFlyoutItem = flyoutContents[0];
- if (!firstFlyoutItem) return;
- if (firstFlyoutItem.element instanceof Blockly.FlyoutButton) {
- const astNode = Blockly.ASTNode.createButtonNode(
- firstFlyoutItem.element,
- );
- this.getFlyoutCursor(workspace).setCurNode(astNode);
- } else if (firstFlyoutItem.element instanceof Blockly.BlockSvg) {
- const astNode = Blockly.ASTNode.createStackNode(
- firstFlyoutItem.element,
- );
- this.getFlyoutCursor(workspace).setCurNode(astNode);
- }
- }
- }
-
- /**
- * Sets the navigation state to workspace and moves the cursor to either the
- * top block on a workspace or to the workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to focus on.
- * @package
- */
- focusWorkspace(workspace) {
- workspace.hideChaff();
- const reset = !!workspace.getToolbox();
-
- this.resetFlyout(workspace, reset);
- this.setState(workspace, Constants.STATE.WORKSPACE);
- this.setCursorOnWorkspaceFocus(workspace);
- }
-
- /**
- * Moves the cursor to the top connection point on on the first top block.
- * If the workspace is empty, moves the cursor to the default location on
- * the workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The main Blockly workspace.
- * @protected
- */
- setCursorOnWorkspaceFocus(workspace) {
- const topBlocks = workspace.getTopBlocks(true);
- const cursor = workspace.getCursor();
- const wsCoordinates = new Blockly.utils.Coordinate(
- this.DEFAULT_WS_COORDINATE.x / workspace.scale,
- this.DEFAULT_WS_COORDINATE.y / workspace.scale,
- );
- if (topBlocks.length > 0) {
- cursor.setCurNode(Blockly.ASTNode.createTopNode(topBlocks[0]));
- } else {
- const wsNode = Blockly.ASTNode.createWorkspaceNode(
- workspace,
- wsCoordinates,
- );
- cursor.setCurNode(wsNode);
- }
- }
-
- /**
- * Gets the cursor on the flyout's workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The main workspace the flyout is
- * on.
- * @returns {?Blockly.FlyoutCursor} The flyout's cursor or null if no flyout
- * exists.
- * @protected
- */
- getFlyoutCursor(workspace) {
- const flyout = workspace.getFlyout();
- const cursor = flyout ? flyout.getWorkspace().getCursor() : null;
-
- return /** @type {?Blockly.FlyoutCursor} */ (cursor);
- }
-
- /**
- * Inserts a block from the flyout.
- * Tries to find a connection on the block to connect to the marked
- * location. If no connection has been marked, or there is not a compatible
- * connection then the block is placed on the workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The main workspace. The workspace
- * the block will be placed on.
- * @package
- */
- insertFromFlyout(workspace) {
- const newBlock = this.createNewBlock(workspace);
- if (!newBlock) {
- return;
- }
- const markerNode = this.getMarker(workspace).getCurNode();
- if (
- !this.tryToConnectMarkerAndCursor(
- workspace,
- markerNode,
- Blockly.ASTNode.createBlockNode(newBlock),
- )
- ) {
- this.warn(
- 'Something went wrong while inserting a block from the flyout.',
- );
- }
-
- this.focusWorkspace(workspace);
- workspace.getCursor().setCurNode(Blockly.ASTNode.createTopNode(newBlock));
- this.removeMark(workspace);
- }
-
- /**
- * Creates a new block based on the current block the flyout cursor is on.
- * @param {!Blockly.WorkspaceSvg} workspace The main workspace. The workspace
- * the block will be placed on.
- * @returns {?Blockly.BlockSvg} The newly created block.
- * @protected
- */
- createNewBlock(workspace) {
- const flyout = workspace.getFlyout();
- if (!flyout || !flyout.isVisible()) {
- this.warn(
- 'Trying to insert from the flyout when the flyout does not ' +
- ' exist or is not visible',
- );
- return null;
- }
-
- const curBlock = /** @type {!Blockly.BlockSvg} */ (
- this.getFlyoutCursor(workspace).getCurNode().getLocation()
- );
- if (!curBlock.isEnabled()) {
- this.warn("Can't insert a disabled block.");
- return null;
- }
-
- const newBlock = flyout.createBlock(curBlock);
- // Render to get the sizing right.
- newBlock.render();
- // Connections are not tracked when the block is first created. Normally
- // there's enough time for them to become tracked in the user's mouse
- // movements, but not here.
- newBlock.setConnectionTracking(true);
- return newBlock;
- }
-
- /**
- * Hides the flyout cursor and optionally hides the flyout.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace.
- * @param {boolean} shouldHide True if the flyout should be hidden.
- * @protected
- */
- resetFlyout(workspace, shouldHide) {
- if (this.getFlyoutCursor(workspace)) {
- this.getFlyoutCursor(workspace).hide();
- if (shouldHide) {
- workspace.getFlyout().hide();
- }
- }
- }
-
- /**
- * Connects the location of the marker and the location of the cursor.
- * No-op if the marker or cursor node are null.
- * @param {!Blockly.WorkspaceSvg} workspace The main workspace.
- * @returns {boolean} True if the cursor and marker locations were connected,
- * false otherwise.
- * @package
- */
- connectMarkerAndCursor(workspace) {
- const markerNode = this.getMarker(workspace).getCurNode();
- const cursorNode = workspace.getCursor().getCurNode();
-
- if (markerNode && cursorNode) {
- return this.tryToConnectMarkerAndCursor(
- workspace,
- markerNode,
- cursorNode,
- );
- }
- return false;
- }
-
- /**
- * Tries to connect the given marker and cursor node.
- * @param {!Blockly.WorkspaceSvg} workspace The main workspace.
- * @param {!Blockly.ASTNode} markerNode The node to try to connect to.
- * @param {!Blockly.ASTNode} cursorNode The node to connect to the markerNode.
- * @returns {boolean} True if the key was handled; false if something went
- * wrong.
- * @protected
- */
- tryToConnectMarkerAndCursor(workspace, markerNode, cursorNode) {
- if (!this.logConnectionWarning(markerNode, cursorNode)) {
- return false;
- }
-
- const markerType = markerNode.getType();
- const cursorType = cursorNode.getType();
-
- const cursorLoc = cursorNode.getLocation();
- const markerLoc = markerNode.getLocation();
- if (markerNode.isConnection() && cursorNode.isConnection()) {
- const cursorConnection = /** @type {!Blockly.RenderedConnection} */ (
- cursorLoc
- );
- const markerConnection = /** @type {!Blockly.RenderedConnection} */ (
- markerLoc
- );
- return this.connect(cursorConnection, markerConnection);
- } else if (
- markerNode.isConnection() &&
- (cursorType == Blockly.ASTNode.types.BLOCK ||
- cursorType == Blockly.ASTNode.types.STACK)
- ) {
- const cursorBlock = /** @type {!Blockly.BlockSvg} */ (cursorLoc);
- const markerConnection = /** @type {!Blockly.RenderedConnection} */ (
- markerLoc
- );
- return this.insertBlock(cursorBlock, markerConnection);
- } else if (markerType == Blockly.ASTNode.types.WORKSPACE) {
- const block = cursorNode ? cursorNode.getSourceBlock() : null;
- return this.moveBlockToWorkspace(
- /** @type {Blockly.BlockSvg} */ (block),
- markerNode,
- );
- }
- this.warn('Unexpected state in tryToConnectMarkerAndCursor.');
- return false;
- }
-
- /**
- * Warns the user if the given cursor or marker node can not be connected.
- * @param {!Blockly.ASTNode} markerNode The node to try to connect to.
- * @param {!Blockly.ASTNode} cursorNode The node to connect to the markerNode.
- * @returns {boolean} True if the marker and cursor are valid types, false
- * otherwise.
- * @protected
- */
- logConnectionWarning(markerNode, cursorNode) {
- if (!markerNode) {
- this.warn('Cannot insert with no marked node.');
- return false;
- }
-
- if (!cursorNode) {
- this.warn('Cannot insert with no cursor node.');
- return false;
- }
- const markerType = markerNode.getType();
- const cursorType = cursorNode.getType();
-
- // Check the marker for invalid types.
- if (markerType == Blockly.ASTNode.types.FIELD) {
- this.warn('Should not have been able to mark a field.');
- return false;
- } else if (markerType == Blockly.ASTNode.types.BLOCK) {
- this.warn('Should not have been able to mark a block.');
- return false;
- } else if (markerType == Blockly.ASTNode.types.STACK) {
- this.warn('Should not have been able to mark a stack.');
- return false;
- }
-
- // Check the cursor for invalid types.
- if (cursorType == Blockly.ASTNode.types.FIELD) {
- this.warn('Cannot attach a field to anything else.');
- return false;
- } else if (cursorType == Blockly.ASTNode.types.WORKSPACE) {
- this.warn('Cannot attach a workspace to anything else.');
- return false;
- }
- return true;
- }
-
- /**
- * Disconnects the block from its parent and moves it to the position of the
- * workspace node.
- * @param {?Blockly.BlockSvg} block The block to be moved to the workspace.
- * @param {!Blockly.ASTNode} wsNode The workspace node holding the position
- * the block will be moved to.
- * @returns {boolean} True if the block can be moved to the workspace,
- * false otherwise.
- * @protected
- */
- moveBlockToWorkspace(block, wsNode) {
- if (!block) {
- return false;
- }
- if (block.isShadow()) {
- this.warn('Cannot move a shadow block to the workspace.');
- return false;
- }
- if (block.getParent()) {
- block.unplug(false);
- }
- block.moveTo(wsNode.getWsCoordinate());
- return true;
- }
-
- /**
- * Disconnects the child block from its parent block. No-op if the two given
- * connections are unrelated.
- * @param {!Blockly.RenderedConnection} movingConnection The connection that
- * is being moved.
- * @param {!Blockly.RenderedConnection} destConnection The connection to be
- * moved to.
- * @protected
- */
- disconnectChild(movingConnection, destConnection) {
- const movingBlock = movingConnection.getSourceBlock();
- const destBlock = destConnection.getSourceBlock();
- let inferiorConnection;
-
- if (movingBlock.getRootBlock() === destBlock.getRootBlock()) {
- if (movingBlock.getDescendants(false).indexOf(destBlock) > -1) {
- inferiorConnection = this.getInferiorConnection(destConnection);
- if (inferiorConnection) {
- inferiorConnection.disconnect();
- }
- } else {
- inferiorConnection = this.getInferiorConnection(movingConnection);
- if (inferiorConnection) {
- inferiorConnection.disconnect();
- }
- }
- }
- }
-
- /**
- * Tries to connect the given connections.
- *
- * If the given connections are not compatible try finding compatible
- * connections on the source blocks of the given connections.
- * @param {?Blockly.RenderedConnection} movingConnection The connection that
- * is being moved.
- * @param {?Blockly.RenderedConnection} destConnection The connection to be
- * moved to.
- * @returns {boolean} True if the two connections or their target connections
- * were connected, false otherwise.
- * @protected
- */
- connect(movingConnection, destConnection) {
- if (!movingConnection || !destConnection) {
- return false;
- }
-
- const movingInferior = this.getInferiorConnection(movingConnection);
- const destSuperior = this.getSuperiorConnection(destConnection);
-
- const movingSuperior = this.getSuperiorConnection(movingConnection);
- const destInferior = this.getInferiorConnection(destConnection);
-
- if (
- movingInferior &&
- destSuperior &&
- this.moveAndConnect(movingInferior, destSuperior)
- ) {
- return true;
- // Try swapping the inferior and superior connections on the blocks.
- } else if (
- movingSuperior &&
- destInferior &&
- this.moveAndConnect(movingSuperior, destInferior)
- ) {
- return true;
- } else if (this.moveAndConnect(movingConnection, destConnection)) {
- return true;
- } else {
- const checker = movingConnection.getConnectionChecker();
- const reason = checker.canConnectWithReason(
- movingConnection,
- destConnection,
- false,
- );
- this.warn(
- 'Connection failed with error: ' +
- checker.getErrorMessage(reason, movingConnection, destConnection),
- );
- return false;
- }
- }
-
- /**
- * Finds the inferior connection on the source block if the given connection
- * is superior.
- * @param {?Blockly.RenderedConnection} connection The connection trying to be
- * connected.
- * @returns {?Blockly.RenderedConnection} The inferior connection or null if
- * none exists.
- * @protected
- */
- getInferiorConnection(connection) {
- const block = /** @type{!Blockly.BlockSvg} */ (connection.getSourceBlock());
- if (!connection.isSuperior()) {
- return connection;
- } else if (block.previousConnection) {
- return block.previousConnection;
- } else if (block.outputConnection) {
- return block.outputConnection;
- } else {
- return null;
- }
- }
-
- /**
- * Finds a superior connection on the source block if the given connection is
- * inferior.
- * @param {?Blockly.RenderedConnection} connection The connection trying to be
- * connected.
- * @returns {?Blockly.RenderedConnection} The superior connection or null if
- * none exists.
- * @protected
- */
- getSuperiorConnection(connection) {
- if (connection.isSuperior()) {
- return connection;
- } else if (connection.targetConnection) {
- return connection.targetConnection;
- }
- return null;
- }
-
- /**
- * Moves the moving connection to the target connection and connects them.
- * @param {?Blockly.RenderedConnection} movingConnection The connection that
- * is being moved.
- * @param {?Blockly.RenderedConnection} destConnection The connection to be
- * moved to.
- * @returns {boolean} True if the connections were connected, false otherwise.
- * @protected
- */
- moveAndConnect(movingConnection, destConnection) {
- if (!movingConnection || !destConnection) {
- return false;
- }
- const movingBlock = movingConnection.getSourceBlock();
- const checker = movingConnection.getConnectionChecker();
-
- if (
- checker.canConnect(movingConnection, destConnection, false) &&
- !destConnection.getSourceBlock().isShadow()
- ) {
- this.disconnectChild(movingConnection, destConnection);
-
- // Position the root block near the connection so it does not move the
- // other block when they are connected.
- if (!destConnection.isSuperior()) {
- const rootBlock = movingBlock.getRootBlock();
-
- const originalOffsetToTarget = {
- x: destConnection.x - movingConnection.x,
- y: destConnection.y - movingConnection.y,
- };
- const originalOffsetInBlock = movingConnection
- .getOffsetInBlock()
- .clone();
- rootBlock.positionNearConnection(
- movingConnection,
- originalOffsetToTarget,
- originalOffsetInBlock,
- );
- }
- destConnection.connect(movingConnection);
- return true;
- }
- return false;
- }
-
- /**
- * Tries to connect the given block to the destination connection, making an
- * intelligent guess about which connection to use on the moving block.
- * @param {!Blockly.BlockSvg} block The block to move.
- * @param {!Blockly.RenderedConnection} destConnection The connection to
- * connect to.
- * @returns {boolean} Whether the connection was successful.
- * @protected
- */
- insertBlock(block, destConnection) {
- switch (destConnection.type) {
- case Blockly.PREVIOUS_STATEMENT:
- if (this.connect(block.nextConnection, destConnection)) {
- return true;
- }
- break;
- case Blockly.NEXT_STATEMENT:
- if (this.connect(block.previousConnection, destConnection)) {
- return true;
- }
- break;
- case Blockly.INPUT_VALUE:
- if (this.connect(block.outputConnection, destConnection)) {
- return true;
- }
- break;
- case Blockly.OUTPUT_VALUE:
- for (let i = 0; i < block.inputList.length; i++) {
- const inputConnection = /** @type {Blockly.RenderedConnection} */ (
- block.inputList[i].connection
- );
- if (
- inputConnection &&
- inputConnection.type === Blockly.INPUT_VALUE &&
- this.connect(inputConnection, destConnection)
- ) {
- return true;
- }
- }
- // If there are no input values pass the output and destination
- // connections to connect_ to find a way to connect the two.
- if (
- block.outputConnection &&
- this.connect(block.outputConnection, destConnection)
- ) {
- return true;
- }
- break;
- }
- this.warn('This block can not be inserted at the marked location.');
- return false;
- }
-
- /**
- * Disconnects the connection that the cursor is pointing to, and bump blocks.
- * This is a no-op if the connection cannot be broken or if the cursor is not
- * pointing to a connection.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace.
- * @package
- */
- disconnectBlocks(workspace) {
- const curNode = workspace.getCursor().getCurNode();
- if (!curNode.isConnection()) {
- this.log(
- 'Cannot disconnect blocks when the cursor is not on a connection',
- );
- return;
- }
- const curConnection = /** @type {!Blockly.RenderedConnection} */ (
- curNode.getLocation()
- );
- if (!curConnection.isConnected()) {
- this.log('Cannot disconnect unconnected connection');
- return;
- }
- const superiorConnection = curConnection.isSuperior()
- ? curConnection
- : curConnection.targetConnection;
-
- const inferiorConnection = curConnection.isSuperior()
- ? curConnection.targetConnection
- : curConnection;
-
- if (inferiorConnection.getSourceBlock().isShadow()) {
- this.log('Cannot disconnect a shadow block');
- return;
- }
- superiorConnection.disconnect();
- inferiorConnection.bumpAwayFrom(superiorConnection);
-
- const rootBlock = superiorConnection.getSourceBlock().getRootBlock();
- rootBlock.bringToFront();
-
- const connectionNode =
- Blockly.ASTNode.createConnectionNode(superiorConnection);
- workspace.getCursor().setCurNode(connectionNode);
- }
-
- /**
- * Moves the marker to the cursor's current location.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace.
- * @protected
- */
- markAtCursor(workspace) {
- this.getMarker(workspace).setCurNode(workspace.getCursor().getCurNode());
- }
-
- /**
- * Removes the marker from its current location and hide it.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace.
- * @protected
- */
- removeMark(workspace) {
- const marker = this.getMarker(workspace);
- marker.setCurNode(null);
- marker.hide();
- }
-
- /**
- * Enables accessibility mode.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to enable keyboard
- * accessibility mode on.
- * @package
- */
- enableKeyboardAccessibility(workspace) {
- if (
- this.workspaces.indexOf(workspace) > -1 &&
- !workspace.keyboardAccessibilityMode
- ) {
- workspace.keyboardAccessibilityMode = true;
- this.focusWorkspace(workspace);
- }
- }
-
- /**
- * Disables accessibility mode.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to disable keyboard
- * accessibility mode on.
- * @package
- */
- disableKeyboardAccessibility(workspace) {
- if (
- this.workspaces.indexOf(workspace) > -1 &&
- workspace.keyboardAccessibilityMode
- ) {
- workspace.keyboardAccessibilityMode = false;
- workspace.getCursor().hide();
- this.getMarker(workspace).hide();
- if (this.getFlyoutCursor(workspace)) {
- this.getFlyoutCursor(workspace).hide();
- }
- }
- }
-
- /**
- * Navigation log handler. If loggingCallback is defined, use it.
- * Otherwise just log to the console.log.
- * @param {string} msg The message to log.
- * @protected
- */
- log(msg) {
- if (this.loggingCallback) {
- this.loggingCallback(Constants.LOGGING_MSG_TYPE.LOG, msg);
- } else {
- console.log(msg);
- }
- }
-
- /**
- * Navigation warning handler. If loggingCallback is defined, use it.
- * Otherwise call console.warn.
- * @param {string} msg The warning message.
- * @protected
- */
- warn(msg) {
- if (this.loggingCallback) {
- this.loggingCallback(Constants.LOGGING_MSG_TYPE.WARN, msg);
- } else {
- console.warn(msg);
- }
- }
-
- /**
- * Navigation error handler. If loggingCallback is defined, use it.
- * Otherwise call console.error.
- * @param {string} msg The error message.
- * @protected
- */
- error(msg) {
- if (this.loggingCallback) {
- this.loggingCallback(Constants.LOGGING_MSG_TYPE.ERROR, msg);
- } else {
- console.error(msg);
- }
- }
-
- /**
- * Moves the workspace cursor in the given direction.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor is on.
- * @param {number} xDirection -1 to move cursor left. 1 to move cursor right.
- * @param {number} yDirection -1 to move cursor up. 1 to move cursor down.
- * @returns {boolean} True if the current node is a workspace, false
- * otherwise.
- * @package
- */
- moveWSCursor(workspace, xDirection, yDirection) {
- const cursor = workspace.getCursor();
- const curNode = workspace.getCursor().getCurNode();
-
- if (curNode.getType() !== Blockly.ASTNode.types.WORKSPACE) {
- return false;
- }
-
- const wsCoord = curNode.getWsCoordinate();
- const newX = xDirection * this.WS_MOVE_DISTANCE + wsCoord.x;
- const newY = yDirection * this.WS_MOVE_DISTANCE + wsCoord.y;
-
- cursor.setCurNode(
- Blockly.ASTNode.createWorkspaceNode(
- workspace,
- new Blockly.utils.Coordinate(newX, newY),
- ),
- );
- return true;
- }
-
- /**
- * Handles hitting the enter key on the workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace.
- * @package
- */
- handleEnterForWS(workspace) {
- const cursor = workspace.getCursor();
- const curNode = cursor.getCurNode();
- const nodeType = curNode.getType();
- if (nodeType == Blockly.ASTNode.types.FIELD) {
- /** @type {!Blockly.Field} */ (curNode.getLocation()).showEditor();
- } else if (
- curNode.isConnection() ||
- nodeType == Blockly.ASTNode.types.WORKSPACE
- ) {
- this.markAtCursor(workspace);
- } else if (nodeType == Blockly.ASTNode.types.BLOCK) {
- this.warn('Cannot mark a block.');
- } else if (nodeType == Blockly.ASTNode.types.STACK) {
- this.warn('Cannot mark a stack.');
- }
- }
-
- /**
- * Pastes the copied block to the marked location.
- * @param {Blockly.BlockCopyData} copyData The data
- * to paste into the workspace.
- * @param {Blockly.WorkspaceSvg} workspace The workspace to paste the data
- * into.
- * @returns {boolean} True if the paste was sucessful, false otherwise.
- * @package
- */
- paste(copyData, workspace) {
- let isHandled = false;
- Blockly.Events.setGroup(true);
- const block = /** @type {Blockly.BlockSvg} */ (
- Blockly.clipboard.paste(copyData, workspace)
- );
- if (block) {
- isHandled = this.insertPastedBlock(workspace, block);
- }
- Blockly.Events.setGroup(false);
- return isHandled;
- }
-
- /**
- * Inserts the pasted block at the marked location if a compatible connection
- * exists. If no connection has been marked, or there is not a compatible
- * connection then the block is placed on the workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to paste the block
- * on.
- * @param {!Blockly.BlockSvg} block The block to paste.
- * @returns {boolean} True if the block was pasted to the workspace, false
- * otherwise.
- * @protected
- */
- insertPastedBlock(workspace, block) {
- let isHandled = false;
- const markedNode = workspace.getMarker(this.MARKER_NAME).getCurNode();
- if (markedNode) {
- isHandled = this.tryToConnectMarkerAndCursor(
- workspace,
- markedNode,
- Blockly.ASTNode.createBlockNode(block),
- );
- }
- return isHandled;
- }
-
- /**
- * Triggers a flyout button's callback.
- * @param {!Blockly.WorkspaceSvg} workspace The main workspace. The workspace
- * containing a flyout with a button.
- * @package
- */
- triggerButtonCallback(workspace) {
- const button = /** @type {!Blockly.FlyoutButton} */ (
- this.getFlyoutCursor(workspace).getCurNode().getLocation()
- );
- const buttonCallback = workspace.flyoutButtonCallbacks.get(
- button.callbackKey,
- );
- if (typeof buttonCallback === 'function') {
- buttonCallback(button);
- } else {
- throw new Error('No callback function found for flyout button.');
- }
- }
-
- /**
- * Removes the change listeners on all registered workspaces.
- * @package
- */
- dispose() {
- for (const workspace of this.workspaces) {
- this.removeWorkspace(workspace);
- }
- }
-}
diff --git a/plugins/keyboard-navigation/src/navigation_controller.js b/plugins/keyboard-navigation/src/navigation_controller.js
deleted file mode 100644
index d3eaa4c1c1..0000000000
--- a/plugins/keyboard-navigation/src/navigation_controller.js
+++ /dev/null
@@ -1,1020 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Registers all of the keyboard shortcuts that are necessary for
- * navigating blockly using the keyboard.
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-
-import './gesture_monkey_patch';
-
-import * as Blockly from 'blockly/core';
-
-import * as Constants from './constants';
-import {Navigation} from './navigation';
-
-/**
- * Class for registering shortcuts for keyboard navigation.
- */
-export class NavigationController {
- /** Data copied by the copy or cut keyboard shortcuts. */
- copyData = null;
-
- /** The workspace a copy or cut keyboard shortcut happened in. */
- copyWorkspace = null;
-
- /**
- * Constructor used for registering shortcuts.
- * This will register any default shortcuts for keyboard navigation.
- * This is intended to be a singleton.
- * @param {!Navigation=} optNavigation The class that handles keyboard
- * navigation shortcuts. (Ex: inserting a block, focusing the flyout).
- */
- constructor(optNavigation) {
- /**
- * Handles any keyboard navigation shortcuts.
- * @type {!Navigation}
- * @public
- */
- this.navigation = optNavigation || new Navigation();
- }
-
- /**
- * Registers the default keyboard shortcuts for keyboard navigation.
- * @public
- */
- init() {
- this.addShortcutHandlers();
- this.registerDefaults();
- }
-
- /**
- * Adds methods to core Blockly components that allows them to handle keyboard
- * shortcuts when in keyboard navigation mode.
- * @protected
- */
- addShortcutHandlers() {
- if (Blockly.FieldDropdown) {
- Blockly.FieldDropdown.prototype.onShortcut = this.fieldDropdownHandler;
- }
-
- if (Blockly.Toolbox) {
- Blockly.Toolbox.prototype.onShortcut = this.toolboxHandler;
- }
- }
-
- /**
- * Removes methods on core Blockly components that allows them to handle
- * keyboard shortcuts.
- * @protected
- */
- removeShortcutHandlers() {
- if (Blockly.FieldDropdown) {
- Blockly.FieldDropdown.prototype.onShortcut = null;
- }
-
- if (Blockly.Toolbox) {
- Blockly.Toolbox.prototype.onShortcut = null;
- }
- }
-
- /**
- * Handles the given keyboard shortcut.
- * This is only triggered when keyboard accessibility mode is enabled.
- * @param {!Blockly.ShortcutRegistry.KeyboardShortcut} shortcut The shortcut
- * to be handled.
- * @returns {boolean} True if the field handled the shortcut,
- * false otherwise.
- * @this {Blockly.FieldDropdown}
- * @protected
- */
- fieldDropdownHandler(shortcut) {
- if (this.menu_) {
- switch (shortcut.name) {
- case Constants.SHORTCUT_NAMES.PREVIOUS:
- this.menu_.highlightPrevious();
- return true;
- case Constants.SHORTCUT_NAMES.NEXT:
- this.menu_.highlightNext();
- return true;
- default:
- return false;
- }
- }
- // If we haven't already handled the shortcut, let the default Field
- // handler try.
- return Blockly.Field.prototype.onShortcut.call(this, shortcut);
- }
-
- /**
- * Handles the given keyboard shortcut.
- * This is only triggered when keyboard accessibility mode is enabled.
- * @param {!Blockly.ShortcutRegistry.KeyboardShortcut} shortcut The shortcut
- * to be handled.
- * @returns {boolean} True if the toolbox handled the shortcut,
- * false otherwise.
- * @this {Blockly.Toolbox}
- * @protected
- */
- toolboxHandler(shortcut) {
- if (!this.selectedItem_) {
- return false;
- }
- switch (shortcut.name) {
- case Constants.SHORTCUT_NAMES.PREVIOUS:
- return this.selectPrevious();
- case Constants.SHORTCUT_NAMES.OUT:
- return this.selectParent();
- case Constants.SHORTCUT_NAMES.NEXT:
- return this.selectNext();
- case Constants.SHORTCUT_NAMES.IN:
- return this.selectChild();
- default:
- return false;
- }
- }
-
- /**
- * Adds all necessary event listeners and markers to a workspace for keyboard
- * navigation to work. This must be called for keyboard navigation to work
- * on a workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to add keyboard
- * navigation to.
- * @public
- */
- addWorkspace(workspace) {
- this.navigation.addWorkspace(workspace);
- }
-
- /**
- * Removes all necessary event listeners and markers to a workspace for
- * keyboard navigation to work.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to remove keyboard
- * navigation from.
- * @public
- */
- removeWorkspace(workspace) {
- this.navigation.removeWorkspace(workspace);
- }
-
- /**
- * Turns on keyboard navigation.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to turn on keyboard
- * navigation for.
- * @public
- */
- enable(workspace) {
- this.navigation.enableKeyboardAccessibility(workspace);
- }
-
- /**
- * Turns off keyboard navigation.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to turn off keyboard
- * navigation on.
- * @public
- */
- disable(workspace) {
- this.navigation.disableKeyboardAccessibility(workspace);
- }
-
- /**
- * Gives the cursor to the field to handle if the cursor is on a field.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to check.
- * @param {!Blockly.ShortcutRegistry.KeyboardShortcut} shortcut The shortcut
- * to give to the field.
- * @returns {boolean} True if the shortcut was handled by the field, false
- * otherwise.
- * @protected
- */
- fieldShortcutHandler(workspace, shortcut) {
- const cursor = workspace.getCursor();
- if (!cursor || !cursor.getCurNode()) {
- return false;
- }
- const curNode = cursor.getCurNode();
- if (curNode.getType() === Blockly.ASTNode.types.FIELD) {
- return /** @type {!Blockly.Field} */ (curNode.getLocation()).onShortcut(
- shortcut,
- );
- }
- return false;
- }
-
- /**
- * Keyboard shortcut to go to the previous location when in keyboard
- * navigation mode.
- * @protected
- */
- registerPrevious() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const previousShortcut = {
- name: Constants.SHORTCUT_NAMES.PREVIOUS,
- preconditionFn: (workspace) => {
- return workspace.keyboardAccessibilityMode;
- },
- callback: (workspace, e, shortcut) => {
- const flyout = workspace.getFlyout();
- const toolbox = workspace.getToolbox();
- let isHandled = false;
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- isHandled = this.fieldShortcutHandler(workspace, shortcut);
- if (!isHandled) {
- workspace.getCursor().prev();
- isHandled = true;
- }
- return isHandled;
- case Constants.STATE.FLYOUT:
- isHandled = this.fieldShortcutHandler(workspace, shortcut);
- if (!isHandled) {
- flyout.getWorkspace().getCursor().prev();
- isHandled = true;
- }
- return isHandled;
- case Constants.STATE.TOOLBOX:
- return toolbox && typeof toolbox.onShortcut == 'function'
- ? toolbox.onShortcut(shortcut)
- : false;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(previousShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.W,
- previousShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to turn keyboard navigation on or off.
- * @protected
- */
- registerToggleKeyboardNav() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const toggleKeyboardNavShortcut = {
- name: Constants.SHORTCUT_NAMES.TOGGLE_KEYBOARD_NAV,
- callback: (workspace) => {
- if (workspace.keyboardAccessibilityMode) {
- this.navigation.disableKeyboardAccessibility(workspace);
- } else {
- this.navigation.enableKeyboardAccessibility(workspace);
- }
- return true;
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(toggleKeyboardNavShortcut);
- const ctrlShiftK = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.K,
- [Blockly.utils.KeyCodes.CTRL, Blockly.utils.KeyCodes.SHIFT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- ctrlShiftK,
- toggleKeyboardNavShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to go to the out location when in keyboard navigation
- * mode.
- * @protected
- */
- registerOut() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const outShortcut = {
- name: Constants.SHORTCUT_NAMES.OUT,
- preconditionFn: (workspace) => {
- return workspace.keyboardAccessibilityMode;
- },
- callback: (workspace, e, shortcut) => {
- const toolbox = workspace.getToolbox();
- let isHandled = false;
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- isHandled = this.fieldShortcutHandler(workspace, shortcut);
- if (!isHandled) {
- workspace.getCursor().out();
- isHandled = true;
- }
- return isHandled;
- case Constants.STATE.FLYOUT:
- this.navigation.focusToolbox(workspace);
- return true;
- case Constants.STATE.TOOLBOX:
- return toolbox && typeof toolbox.onShortcut == 'function'
- ? toolbox.onShortcut(shortcut)
- : false;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(outShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.A,
- outShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to go to the next location when in keyboard navigation
- * mode.
- * @protected
- */
- registerNext() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const nextShortcut = {
- name: Constants.SHORTCUT_NAMES.NEXT,
- preconditionFn: (workspace) => {
- return workspace.keyboardAccessibilityMode;
- },
- callback: (workspace, e, shortcut) => {
- const toolbox = workspace.getToolbox();
- const flyout = workspace.getFlyout();
- let isHandled = false;
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- isHandled = this.fieldShortcutHandler(workspace, shortcut);
- if (!isHandled) {
- workspace.getCursor().next();
- isHandled = true;
- }
- return isHandled;
- case Constants.STATE.FLYOUT:
- isHandled = this.fieldShortcutHandler(workspace, shortcut);
- if (!isHandled) {
- flyout.getWorkspace().getCursor().next();
- isHandled = true;
- }
- return isHandled;
- case Constants.STATE.TOOLBOX:
- return toolbox && typeof toolbox.onShortcut == 'function'
- ? toolbox.onShortcut(shortcut)
- : false;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(nextShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.S,
- nextShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to go to the in location when in keyboard navigation
- * mode.
- * @protected
- */
- registerIn() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const inShortcut = {
- name: Constants.SHORTCUT_NAMES.IN,
- preconditionFn: (workspace) => {
- return workspace.keyboardAccessibilityMode;
- },
- callback: (workspace, e, shortcut) => {
- const toolbox = workspace.getToolbox();
- let isHandled = false;
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- isHandled = this.fieldShortcutHandler(workspace, shortcut);
- if (!isHandled) {
- workspace.getCursor().in();
- isHandled = true;
- }
- return isHandled;
- case Constants.STATE.TOOLBOX:
- isHandled =
- toolbox && typeof toolbox.onShortcut == 'function'
- ? toolbox.onShortcut(shortcut)
- : false;
- if (!isHandled) {
- this.navigation.focusFlyout(workspace);
- }
- return true;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(inShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.D,
- inShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to connect a block to a marked location when in keyboard
- * navigation mode.
- * @protected
- */
- registerInsert() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const insertShortcut = {
- name: Constants.SHORTCUT_NAMES.INSERT,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- return this.navigation.connectMarkerAndCursor(workspace);
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(insertShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.I,
- insertShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to mark a location when in keyboard navigation mode.
- * @protected
- */
- registerMark() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const markShortcut = {
- name: Constants.SHORTCUT_NAMES.MARK,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- let flyoutCursor;
- let curNode;
- let nodeType;
-
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- this.navigation.handleEnterForWS(workspace);
- return true;
- case Constants.STATE.FLYOUT:
- flyoutCursor = this.navigation.getFlyoutCursor(workspace);
- if (!flyoutCursor) {
- return false;
- }
- curNode = flyoutCursor.getCurNode();
- nodeType = curNode.getType();
-
- switch (nodeType) {
- case Blockly.ASTNode.types.STACK:
- this.navigation.insertFromFlyout(workspace);
- break;
- case Blockly.ASTNode.types.BUTTON:
- this.navigation.triggerButtonCallback(workspace);
- break;
- }
-
- return true;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(markShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.ENTER,
- markShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to disconnect two blocks when in keyboard navigation
- * mode.
- * @protected
- */
- registerDisconnect() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const disconnectShortcut = {
- name: Constants.SHORTCUT_NAMES.DISCONNECT,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- this.navigation.disconnectBlocks(workspace);
- return true;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(disconnectShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.X,
- disconnectShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to focus on the toolbox when in keyboard navigation
- * mode.
- * @protected
- */
- registerToolboxFocus() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const focusToolboxShortcut = {
- name: Constants.SHORTCUT_NAMES.TOOLBOX,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- if (!workspace.getToolbox()) {
- this.navigation.focusFlyout(workspace);
- } else {
- this.navigation.focusToolbox(workspace);
- }
- return true;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(focusToolboxShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.T,
- focusToolboxShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to exit the current location and focus on the workspace
- * when in keyboard navigation mode.
- * @protected
- */
- registerExit() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const exitShortcut = {
- name: Constants.SHORTCUT_NAMES.EXIT,
- preconditionFn: (workspace) => {
- return workspace.keyboardAccessibilityMode;
- },
- callback: (workspace) => {
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.FLYOUT:
- this.navigation.focusWorkspace(workspace);
- return true;
- case Constants.STATE.TOOLBOX:
- this.navigation.focusWorkspace(workspace);
- return true;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(exitShortcut, true);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.ESC,
- exitShortcut.name,
- true,
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.E,
- exitShortcut.name,
- true,
- );
- }
-
- /**
- * Keyboard shortcut to move the cursor on the workspace to the left when in
- * keyboard navigation mode.
- * @protected
- */
- registerWorkspaceMoveLeft() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const wsMoveLeftShortcut = {
- name: Constants.SHORTCUT_NAMES.MOVE_WS_CURSOR_LEFT,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- return this.navigation.moveWSCursor(workspace, -1, 0);
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(wsMoveLeftShortcut);
- const shiftA = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.A,
- [Blockly.utils.KeyCodes.SHIFT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- shiftA,
- wsMoveLeftShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to move the cursor on the workspace to the right when in
- * keyboard navigation mode.
- * @protected
- */
- registerWorkspaceMoveRight() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const wsMoveRightShortcut = {
- name: Constants.SHORTCUT_NAMES.MOVE_WS_CURSOR_RIGHT,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- return this.navigation.moveWSCursor(workspace, 1, 0);
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(wsMoveRightShortcut);
- const shiftD = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.D,
- [Blockly.utils.KeyCodes.SHIFT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- shiftD,
- wsMoveRightShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to move the cursor on the workspace up when in keyboard
- * navigation mode.
- * @protected
- */
- registerWorkspaceMoveUp() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const wsMoveUpShortcut = {
- name: Constants.SHORTCUT_NAMES.MOVE_WS_CURSOR_UP,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- return this.navigation.moveWSCursor(workspace, 0, -1);
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(wsMoveUpShortcut);
- const shiftW = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.W,
- [Blockly.utils.KeyCodes.SHIFT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- shiftW,
- wsMoveUpShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to move the cursor on the workspace down when in
- * keyboard navigation mode.
- * @protected
- */
- registerWorkspaceMoveDown() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const wsMoveDownShortcut = {
- name: Constants.SHORTCUT_NAMES.MOVE_WS_CURSOR_DOWN,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- return this.navigation.moveWSCursor(workspace, 0, 1);
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(wsMoveDownShortcut);
- const shiftW = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.S,
- [Blockly.utils.KeyCodes.SHIFT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- shiftW,
- wsMoveDownShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to copy the block the cursor is currently on.
- * @protected
- */
- registerCopy() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const copyShortcut = {
- name: Constants.SHORTCUT_NAMES.COPY,
- preconditionFn: (workspace) => {
- if (
- workspace.keyboardAccessibilityMode &&
- !workspace.options.readOnly
- ) {
- const curNode = workspace.getCursor().getCurNode();
- if (curNode && curNode.getSourceBlock()) {
- const sourceBlock = curNode.getSourceBlock();
- return (
- !Blockly.Gesture.inProgress() &&
- sourceBlock &&
- sourceBlock.isDeletable() &&
- sourceBlock.isMovable()
- );
- }
- }
- return false;
- },
- callback: (workspace) => {
- const sourceBlock = /** @type {Blockly.BlockSvg} */ (
- workspace.getCursor().getCurNode().getSourceBlock()
- );
- workspace.hideChaff();
- this.copyData = sourceBlock.toCopyData();
- this.copyWorkspace = sourceBlock.workspace;
- return !!this.copyData;
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(copyShortcut);
-
- const ctrlC = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.C,
- [Blockly.utils.KeyCodes.CTRL],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- ctrlC,
- copyShortcut.name,
- true,
- );
-
- const altC = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.C,
- [Blockly.utils.KeyCodes.ALT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- altC,
- copyShortcut.name,
- true,
- );
-
- const metaC = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.C,
- [Blockly.utils.KeyCodes.META],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- metaC,
- copyShortcut.name,
- true,
- );
- }
-
- /**
- * Register shortcut to paste the copied block to the marked location.
- * @protected
- */
- registerPaste() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const pasteShortcut = {
- name: Constants.SHORTCUT_NAMES.PASTE,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode &&
- !workspace.options.readOnly &&
- !Blockly.Gesture.inProgress()
- );
- },
- callback: () => {
- if (!this.copyData || !this.copyWorkspace) return false;
- return this.navigation.paste(this.copyData, this.copyWorkspace);
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(pasteShortcut);
-
- const ctrlV = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.V,
- [Blockly.utils.KeyCodes.CTRL],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- ctrlV,
- pasteShortcut.name,
- true,
- );
-
- const altV = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.V,
- [Blockly.utils.KeyCodes.ALT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- altV,
- pasteShortcut.name,
- true,
- );
-
- const metaV = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.V,
- [Blockly.utils.KeyCodes.META],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- metaV,
- pasteShortcut.name,
- true,
- );
- }
-
- /**
- * Keyboard shortcut to copy and delete the block the cursor is on using
- * ctrl+x, cmd+x, or alt+x.
- * @protected
- */
- registerCut() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const cutShortcut = {
- name: Constants.SHORTCUT_NAMES.CUT,
- preconditionFn: (workspace) => {
- if (
- workspace.keyboardAccessibilityMode &&
- !workspace.options.readOnly
- ) {
- const curNode = workspace.getCursor().getCurNode();
- if (curNode && curNode.getSourceBlock()) {
- const sourceBlock = curNode.getSourceBlock();
- return (
- !Blockly.Gesture.inProgress() &&
- sourceBlock &&
- sourceBlock.isDeletable() &&
- sourceBlock.isMovable() &&
- !sourceBlock.workspace.isFlyout
- );
- }
- }
- return false;
- },
- callback: (workspace) => {
- const sourceBlock = /** @type {Blockly.BlockSvg} */ (
- workspace.getCursor().getCurNode().getSourceBlock()
- );
- this.copyData = sourceBlock.toCopyData();
- this.copyWorkspace = sourceBlock.workspace;
- this.navigation.moveCursorOnBlockDelete(workspace, sourceBlock);
- sourceBlock.checkAndDelete();
- return true;
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(cutShortcut);
-
- const ctrlX = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.X,
- [Blockly.utils.KeyCodes.CTRL],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- ctrlX,
- cutShortcut.name,
- true,
- );
-
- const altX = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.X,
- [Blockly.utils.KeyCodes.ALT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- altX,
- cutShortcut.name,
- true,
- );
-
- const metaX = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.X,
- [Blockly.utils.KeyCodes.META],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- metaX,
- cutShortcut.name,
- true,
- );
- }
-
- /**
- * Registers shortcut to delete the block the cursor is on using delete or
- * backspace.
- * @protected
- */
- registerDelete() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const deleteShortcut = {
- name: Constants.SHORTCUT_NAMES.DELETE,
- preconditionFn: function (workspace) {
- if (
- workspace.keyboardAccessibilityMode &&
- !workspace.options.readOnly
- ) {
- const curNode = workspace.getCursor().getCurNode();
- if (curNode && curNode.getSourceBlock()) {
- const sourceBlock = curNode.getSourceBlock();
- return sourceBlock && sourceBlock.isDeletable();
- }
- }
- return false;
- },
- callback: (workspace, e) => {
- const sourceBlock = workspace.getCursor().getCurNode().getSourceBlock();
- // Delete or backspace.
- // Stop the browser from going back to the previous page.
- // Do this first to prevent an error in the delete code from resulting
- // in data loss.
- e.preventDefault();
- // Don't delete while dragging. Jeez.
- if (Blockly.Gesture.inProgress()) {
- return false;
- }
- this.navigation.moveCursorOnBlockDelete(workspace, sourceBlock);
- sourceBlock.checkAndDelete();
- return true;
- },
- };
- Blockly.ShortcutRegistry.registry.register(deleteShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.DELETE,
- deleteShortcut.name,
- true,
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.BACKSPACE,
- deleteShortcut.name,
- true,
- );
- }
-
- /**
- * Registers all default keyboard shortcut items for keyboard navigation. This
- * should be called once per instance of KeyboardShortcutRegistry.
- * @protected
- */
- registerDefaults() {
- this.registerPrevious();
- this.registerNext();
- this.registerIn();
- this.registerOut();
-
- this.registerDisconnect();
- this.registerExit();
- this.registerInsert();
- this.registerMark();
- this.registerToolboxFocus();
- this.registerToggleKeyboardNav();
-
- this.registerWorkspaceMoveDown();
- this.registerWorkspaceMoveLeft();
- this.registerWorkspaceMoveUp();
- this.registerWorkspaceMoveRight();
-
- this.registerCopy();
- this.registerPaste();
- this.registerCut();
- this.registerDelete();
- }
-
- /**
- * Removes all the keyboard navigation shortcuts.
- * @public
- */
- dispose() {
- const shortcutNames = Object.values(Constants.SHORTCUT_NAMES);
- for (const name of shortcutNames) {
- Blockly.ShortcutRegistry.registry.unregister(name);
- }
- this.removeShortcutHandlers();
- this.navigation.dispose();
- }
-}
diff --git a/plugins/keyboard-navigation/test/index.html b/plugins/keyboard-navigation/test/index.html
deleted file mode 100644
index e0db0d3253..0000000000
--- a/plugins/keyboard-navigation/test/index.html
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
- Blockly Plugin Test
-
-
-
-
-
- Keyboard Navigation is our first step towards an accessible Blockly.
- For more information on how the default keyboard navigation works please
- see the
- documentation .
-
-
-
- Cursors
- The cursor controls how the user navigates the blocks, inputs, fields and
- connections on a workspace. This demo shows three different cursors:
- Default Cursor: This cursor uses previous, next, in, and out to
- navigate through the different parts of a block. See the
- developer documentation
- for more information.
- Basic Cursor: Uses pre order traversal to allow users to navigate
- through everything using only the previous and next command.
- Line Cursor: We tried to make this cursor mimic a text editor.
- Navigating up and down will take the cursor to the next and previous
- "line" of code. Navigating in and out will move the cursor through all the
- fields and inputs in that "line" of code.
-
- Enable Accessibility Mode:
-
-
- Default Cursor
- Basic Cursor
- Line Cursor
-
-
-
-
-
diff --git a/plugins/keyboard-navigation/test/index.js b/plugins/keyboard-navigation/test/index.js
deleted file mode 100644
index 919ab31037..0000000000
--- a/plugins/keyboard-navigation/test/index.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * @license
- * Copyright 2020 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Plugin test.
- */
-
-import {createPlayground} from '@blockly/dev-tools';
-import * as Blockly from 'blockly';
-import {toolbox} from './toolbox';
-
-import {LineCursor, NavigationController} from '../src';
-
-let controller;
-
-/**
- * Create a workspace.
- * @param {HTMLElement} blocklyDiv The blockly container div.
- * @param {!Blockly.BlocklyOptions} options The Blockly options.
- * @returns {!Blockly.WorkspaceSvg} The created workspace.
- */
-function createWorkspace(blocklyDiv, options) {
- const workspace = Blockly.inject(blocklyDiv, options);
- controller.addWorkspace(workspace);
- return workspace;
-}
-
-document.addEventListener('DOMContentLoaded', function () {
- controller = new NavigationController();
- controller.init();
- const defaultOptions = {
- toolbox: toolbox,
- };
- createPlayground(
- document.getElementById('root'),
- createWorkspace,
- defaultOptions,
- );
-});
-
-document
- .getElementById('accessibilityModeCheck')
- .addEventListener('click', (e) => {
- if (e.target.checked) {
- controller.enable(Blockly.getMainWorkspace());
- } else {
- controller.disable(Blockly.getMainWorkspace());
- }
- });
-
-document.getElementById('cursorChanger').addEventListener('change', (e) => {
- const cursorType = e.target.value;
- const accessibilityCheckbox = document.getElementById(
- 'accessibilityModeCheck',
- );
- const markerManager = Blockly.getMainWorkspace().getMarkerManager();
- const oldCurNode = markerManager.getCursor().getCurNode();
-
- document.getElementById('cursorChanger').value = cursorType;
- if (cursorType === 'basic') {
- Blockly.ASTNode.NAVIGATE_ALL_FIELDS = false;
- markerManager.setCursor(new Blockly.BasicCursor());
- } else if (cursorType === 'line') {
- Blockly.ASTNode.NAVIGATE_ALL_FIELDS = true;
- markerManager.setCursor(new LineCursor());
- } else {
- Blockly.ASTNode.NAVIGATE_ALL_FIELDS = false;
- markerManager.setCursor(new Blockly.Cursor());
- }
- if (oldCurNode) {
- markerManager.getCursor().setCurNode(oldCurNode);
- }
-
- if (!accessibilityCheckbox.checked) {
- accessibilityCheckbox.checked = true;
- controller.enable(Blockly.getMainWorkspace());
- }
-
- document.activeElement.blur();
-});
diff --git a/plugins/keyboard-navigation/test/navigation_modify_test.mocha.js b/plugins/keyboard-navigation/test/navigation_modify_test.mocha.js
deleted file mode 100644
index 492b98f9c5..0000000000
--- a/plugins/keyboard-navigation/test/navigation_modify_test.mocha.js
+++ /dev/null
@@ -1,691 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-const chai = require('chai');
-const Blockly = require('blockly');
-const {Navigation} = require('../src/navigation');
-const assert = chai.assert;
-const {testHelpers} = require('@blockly/dev-tools');
-const {captureWarnings} = testHelpers;
-
-suite('Insert/Modify', function () {
- /**
- * Check that modify failed.
- * @param {Navigation} navigation The class under test.
- * @param {Blockly.WorkspaceSvg} workspace The main workspace.
- * @param {!Blockly.ASTNode} markerNode The node to try to connect to.
- * @param {!Blockly.ASTNode} cursorNode The node to connect to the markerNode.
- */
- function assertModifyFails(navigation, workspace, markerNode, cursorNode) {
- let modifyResult;
- const warnings = captureWarnings(function () {
- modifyResult = navigation.tryToConnectMarkerAndCursor(
- workspace,
- markerNode,
- cursorNode,
- );
- });
- assert.isFalse(modifyResult);
- assert.equal(
- warnings.length,
- 1,
- 'Expecting 1 warnings for why modify failed.',
- );
- }
-
- /**
- * Define default blocks.
- */
- function defineTestBlocks() {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'stack_block',
- message0: '',
- previousStatement: null,
- nextStatement: null,
- },
- {
- type: 'row_block',
- message0: '%1',
- args0: [
- {
- type: 'input_value',
- name: 'INPUT',
- },
- ],
- output: null,
- },
- {
- type: 'statement_block',
- message0: '%1',
- args0: [
- {
- type: 'input_statement',
- name: 'NAME',
- },
- ],
- previousStatement: null,
- nextStatement: null,
- colour: 230,
- tooltip: '',
- helpUrl: '',
- },
- ]);
- }
-
- setup(function () {
- this.jsdomCleanup = require('jsdom-global')(
- '
',
- );
- // We are running these tests in node even thought they require a rendered
- // workspace, which doesn't exactly work. The rendering system expects
- // cancelAnimationFrame to be defined so we need to define it.
- window.cancelAnimationFrame = function () {};
-
- // NOTE: block positions chosen such that they aren't unintentionally
- // bumped out of bounds during tests.
- const xmlText = `
-
-
-
-
-
-
-
-
- `;
-
- defineTestBlocks();
-
- this.workspace = Blockly.inject('blocklyDiv', {
- toolbox: `
-
-
-
- `,
- });
- Blockly.Xml.domToWorkspace(
- Blockly.utils.xml.textToDom(xmlText),
- this.workspace,
- );
- this.navigation = new Navigation();
- this.navigation.addWorkspace(this.workspace);
-
- this.stack_block_1 = this.workspace.getBlockById('stack_block_1');
- this.stack_block_2 = this.workspace.getBlockById('stack_block_2');
- this.row_block_1 = this.workspace.getBlockById('row_block_1');
- this.row_block_2 = this.workspace.getBlockById('row_block_2');
- this.statement_block_1 = this.workspace.getBlockById('statement_block_1');
- this.statement_block_2 = this.workspace.getBlockById('statement_block_2');
- this.navigation.enableKeyboardAccessibility(this.workspace);
- });
-
- teardown(function () {
- delete Blockly.Blocks['stack_block'];
- delete Blockly.Blocks['row_block'];
- delete Blockly.Blocks['statement_block'];
- window.cancelAnimationFrame = undefined;
- this.jsdomCleanup();
- });
-
- suite('Marked Connection', function () {
- suite('Marker on next', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_1.nextConnection,
- );
- });
- test('Cursor on workspace', function () {
- const cursorNode = Blockly.ASTNode.createWorkspaceNode(
- this.workspace,
- new Blockly.utils.Coordinate(0, 0),
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on compatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.previousConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.stack_block_1.getNextBlock().id, 'stack_block_2');
- });
- test('Cursor on incompatible connection', function () {
- // Connect method will try to find a way to connect blocks with
- // incompatible types.
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.nextConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.stack_block_1.getNextBlock(), this.stack_block_2);
- });
- test('Cursor on really incompatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.outputConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- assert.isNull(this.stack_block_1.getNextBlock());
- });
- test('Cursor on block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_2);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.stack_block_1.getNextBlock().id, 'stack_block_2');
- });
- });
-
- suite('Marker on previous', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_1.previousConnection,
- );
- });
- test('Cursor on compatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.nextConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.stack_block_1.getPreviousBlock().id, 'stack_block_2');
- });
- test('Cursor on incompatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.previousConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- assert.isNull(this.stack_block_1.getPreviousBlock());
- });
- test('Cursor on really incompatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.outputConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- assert.isNull(this.stack_block_1.getNextBlock());
- });
- test('Cursor on block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_2);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.stack_block_1.getPreviousBlock().id, 'stack_block_2');
- });
- test('Cursor on incompatible block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_1);
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- assert.isNull(this.stack_block_1.getPreviousBlock());
- });
- });
-
- suite('Marker on value input', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.inputList[0].connection,
- );
- });
- test('Cursor on compatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_2.outputConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.row_block_2.getParent().id, 'row_block_1');
- });
- test('Cursor on incompatible connection', function () {
- // Connect method will try to find a way to connect blocks with
- // incompatible types.
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_2.inputList[0].connection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(
- this.row_block_1.inputList[0].connection.targetBlock(),
- this.row_block_2,
- );
- });
- test('Cursor on really incompatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_1.previousConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_2);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.row_block_2.getParent().id, 'row_block_1');
- });
- });
-
- suite('Marked Statement input', function () {
- setup(function () {
- this.statement_block_1.inputList[0].connection.connect(
- this.stack_block_1.previousConnection,
- );
- this.stack_block_1.nextConnection.connect(
- this.stack_block_2.previousConnection,
- );
- this.markerNode = Blockly.ASTNode.createInputNode(
- this.statement_block_1.inputList[0],
- );
- });
- test('Cursor on block inside statement', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.previousConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(
- this.stack_block_2.previousConnection.targetBlock(),
- this.statement_block_1,
- );
- });
- test('Cursor on stack', function () {
- const cursorNode = Blockly.ASTNode.createStackNode(
- this.statement_block_2,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(
- this.statement_block_2.getParent().id,
- 'statement_block_1',
- );
- });
- test('Cursor on incompatible type', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.outputConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- assert.isNull(this.row_block_1.getParent());
- });
- });
-
- suite('Marker on output', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.outputConnection,
- );
- });
- test('Cursor on compatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_2.inputList[0].connection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.row_block_1.getParent().id, 'row_block_2');
- });
- test('Cursor on incompatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_2.outputConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on really incompatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_1.previousConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_2);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.row_block_1.getParent().id, 'row_block_2');
- });
- });
- });
-
- suite('Marked Workspace', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createWorkspaceNode(
- this.workspace,
- new Blockly.utils.Coordinate(100, 200),
- );
- });
- test('Cursor on row block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_1);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- const pos = this.row_block_1.getRelativeToSurfaceXY();
- assert.equal(pos.x, 100);
- assert.equal(pos.y, 200);
- });
-
- test('Cursor on output connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.outputConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- const pos = this.row_block_1.getRelativeToSurfaceXY();
- assert.equal(pos.x, 100);
- assert.equal(pos.y, 200);
- });
-
- test('Cursor on previous connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_1.previousConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- const pos = this.stack_block_1.getRelativeToSurfaceXY();
- assert.equal(pos.x, 100);
- assert.equal(pos.y, 200);
- });
-
- test('Cursor on input connection', function () {
- // Move the source block to the marked location on the workspace.
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.inputList[0].connection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- });
-
- test('Cursor on next connection', function () {
- // Move the source block to the marked location on the workspace.
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_1.nextConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- });
-
- test('Cursor on child block (row)', function () {
- this.row_block_1.inputList[0].connection.connect(
- this.row_block_2.outputConnection,
- );
-
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_2);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.isNull(this.row_block_2.getParent());
- const pos = this.row_block_2.getRelativeToSurfaceXY();
- assert.equal(pos.x, 100);
- assert.equal(pos.y, 200);
- });
-
- test('Cursor on child block (stack)', function () {
- this.stack_block_1.nextConnection.connect(
- this.stack_block_2.previousConnection,
- );
-
- const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_2);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.isNull(this.stack_block_2.getParent());
- const pos = this.stack_block_2.getRelativeToSurfaceXY();
- assert.equal(pos.x, 100);
- assert.equal(pos.y, 200);
- });
-
- test('Cursor on workspace', function () {
- const cursorNode = Blockly.ASTNode.createWorkspaceNode(
- this.workspace,
- new Blockly.utils.Coordinate(100, 100),
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- });
-
- suite('Marked Block', function () {
- suite('Marked any block', function () {
- // These tests are using a stack block, but do not depend on the type of
- // the block.
- setup(function () {
- this.markerNode = Blockly.ASTNode.createBlockNode(this.stack_block_1);
- });
- test('Cursor on workspace', function () {
- const cursorNode = Blockly.ASTNode.createWorkspaceNode(
- this.workspace,
- new Blockly.utils.Coordinate(100, 100),
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- });
- suite('Marked stack block', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createBlockNode(this.stack_block_1);
- });
- test('Cursor on row block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_1);
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on stack block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_1);
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on next connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.nextConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on previous connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.previousConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- });
- suite('Marked row block', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createBlockNode(this.row_block_1);
- });
- test('Cursor on stack block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_1);
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on row block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_1);
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on value input connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_2.inputList[0].connection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on output connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_2.outputConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- });
- });
-});
diff --git a/plugins/keyboard-navigation/test/navigation_test.mocha.js b/plugins/keyboard-navigation/test/navigation_test.mocha.js
deleted file mode 100644
index 81705b850d..0000000000
--- a/plugins/keyboard-navigation/test/navigation_test.mocha.js
+++ /dev/null
@@ -1,1368 +0,0 @@
-/**
- * @license
- * Copyright 2020 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-'use strict';
-
-const chai = require('chai');
-const sinon = require('sinon');
-
-const Blockly = require('blockly');
-const {NavigationController, Constants} = require('../src/index');
-const {
- createNavigationWorkspace,
- createKeyDownEvent,
-} = require('./test_helper');
-
-suite('Navigation', function () {
- setup(function () {
- this.jsdomCleanup = require('jsdom-global')(
- '
',
- );
- // We are running these tests in node even thought they require a rendered
- // workspace, which doesn't exactly work. The rendering system expects
- // cancelAnimationFrame to be defined so we need to define it.
- window.cancelAnimationFrame = function () {};
- this.controller = new NavigationController();
- this.controller.init();
- this.navigation = this.controller.navigation;
-
- this.getContextStub = sinon
- .stub(window.HTMLCanvasElement.prototype, 'getContext')
- .callsFake(() => {
- return {
- measureText: function () {
- return {width: 0};
- },
- };
- });
- });
-
- teardown(function () {
- this.controller.dispose();
- window.cancelAnimationFrame = undefined;
- this.jsdomCleanup();
- sinon.restore();
- });
-
- // Test that toolbox key handlers call through to the right functions and
- // transition correctly between toolbox, workspace, and flyout.
- suite('Tests toolbox keys', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
- this.navigation.focusToolbox(this.workspace);
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- });
-
- const testCases = [
- [
- 'Calls toolbox selectNext',
- createKeyDownEvent(Blockly.utils.KeyCodes.S, 'NotAField'),
- 'selectNext',
- ],
- [
- 'Calls toolbox selectPrevious',
- createKeyDownEvent(Blockly.utils.KeyCodes.W, 'NotAField'),
- 'selectPrevious',
- ],
- [
- 'Calls toolbox selectParent',
- createKeyDownEvent(Blockly.utils.KeyCodes.D, 'NotAField'),
- 'selectChild',
- ],
- [
- 'Calls toolbox selectChild',
- createKeyDownEvent(Blockly.utils.KeyCodes.A, 'NotAField'),
- 'selectParent',
- ],
- ];
-
- testCases.forEach(function (testCase) {
- const testCaseName = testCase[0];
- const mockEvent = testCase[1];
- const stubName = testCase[2];
- test(testCaseName, function () {
- const toolbox = this.workspace.getToolbox();
- const selectStub = sinon.stub(toolbox, stubName);
- toolbox.selectedItem_ = toolbox.contents.values().next().value;
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
- sinon.assert.called(selectStub);
- });
- });
-
- test('Go to flyout', function () {
- const navigation = this.navigation;
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.D,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
-
- const flyoutCursor = navigation.getFlyoutCursor(this.workspace);
- // See test_helper.js for hardcoded field values.
- chai.assert.equal(
- flyoutCursor.getCurNode().getLocation().getFieldValue('TEXTFIELD'),
- 'first',
- );
- });
-
- test('Focuses workspace from toolbox (e)', function () {
- const navigation = this.navigation;
- navigation.setState(this.workspace, Constants.STATE.TOOLBOX);
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.E,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
- test('Focuses workspace from toolbox (escape)', function () {
- const navigation = this.navigation;
- navigation.setState(this.workspace, Constants.STATE.TOOLBOX);
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.ESC,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
- });
-
- // Test that flyout key handlers call through to the right functions and
- // transition correctly between toolbox, workspace, and flyout.
- suite('Tests flyout keys', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
- this.navigation.focusToolbox(this.workspace);
- this.navigation.focusFlyout(this.workspace);
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- });
- // Should be a no-op
- test('Previous at beginning', function () {
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.W,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
- // See test_helper.js for hardcoded field values.
- chai.assert.equal(
- this.navigation
- .getFlyoutCursor(this.workspace)
- .getCurNode()
- .getLocation()
- .getFieldValue('TEXTFIELD'),
- 'first',
- );
- });
- test('Previous', function () {
- const flyoutBlocks = this.workspace
- .getFlyout()
- .getWorkspace()
- .getTopBlocks();
- this.navigation
- .getFlyoutCursor(this.workspace)
- .setCurNode(Blockly.ASTNode.createStackNode(flyoutBlocks[1]));
- let flyoutBlock = this.navigation
- .getFlyoutCursor(this.workspace)
- .getCurNode()
- .getLocation();
- // See test_helper.js for hardcoded field values.
- chai.assert.equal(flyoutBlock.getFieldValue('TEXTFIELD'), 'second');
-
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.W,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
- flyoutBlock = this.navigation
- .getFlyoutCursor(this.workspace)
- .getCurNode()
- .getLocation();
- // See test_helper.js for hardcoded field values.
- chai.assert.equal(flyoutBlock.getFieldValue('TEXTFIELD'), 'first');
- });
-
- test('Next', function () {
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.S,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
- const flyoutBlock = this.navigation
- .getFlyoutCursor(this.workspace)
- .getCurNode()
- .getLocation();
- // See test_helper.js for hardcoded field values.
- chai.assert.equal(flyoutBlock.getFieldValue('TEXTFIELD'), 'second');
- });
-
- test('Out', function () {
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.A,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.TOOLBOX,
- );
- });
-
- test('Mark', function () {
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.ENTER,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- chai.assert.equal(this.workspace.getTopBlocks().length, 1);
- });
-
- test('Mark - Disabled Block', function () {
- this.navigation.loggingCallback = function (type, msg) {
- chai.assert.equal(msg, "Can't insert a disabled block.");
- };
- const flyout = this.workspace.getFlyout();
- const topBlock = flyout.getWorkspace().getTopBlocks()[0];
- topBlock.setEnabled(false);
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.ENTER,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
- chai.assert.equal(this.workspace.getTopBlocks().length, 0);
- this.navigation.loggingCallback = null;
- });
-
- test('Exit', function () {
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.ESC,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
- });
- // Test that workspace key handlers call through to the right functions and
- // transition correctly between toolbox, workspace, and flyout.
- suite('Tests workspace keys', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- previousStatement: null,
- nextStatement: null,
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
- this.basicBlock = this.workspace.newBlock('basic_block');
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- });
-
- test('Previous', function () {
- const prevSpy = sinon.spy(this.workspace.getCursor(), 'prev');
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const wEvent = createKeyDownEvent(Blockly.utils.KeyCodes.W, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, wEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(prevSpy);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Next', function () {
- const nextSpy = sinon.spy(this.workspace.getCursor(), 'next');
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const sEvent = createKeyDownEvent(Blockly.utils.KeyCodes.S, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, sEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(nextSpy);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Out', function () {
- const outSpy = sinon.spy(this.workspace.getCursor(), 'out');
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const aEvent = createKeyDownEvent(Blockly.utils.KeyCodes.A, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, aEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(outSpy);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('In', function () {
- const inSpy = sinon.spy(this.workspace.getCursor(), 'in');
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const dEvent = createKeyDownEvent(Blockly.utils.KeyCodes.D, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, dEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(inSpy);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Insert', function () {
- const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock);
- this.navigation.getMarker(this.workspace).setCurNode(blockNode);
- // Stub modify as we are not testing its behavior, only if it was called.
- // Otherwise, there is a warning because there is no marked node.
- const modifyStub = sinon
- .stub(this.navigation, 'tryToConnectMarkerAndCursor')
- .returns(true);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const iEvent = createKeyDownEvent(Blockly.utils.KeyCodes.I, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, iEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(modifyStub);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Mark', function () {
- this.workspace
- .getCursor()
- .setCurNode(
- Blockly.ASTNode.createConnectionNode(
- this.basicBlock.previousConnection,
- ),
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const enterEvent = createKeyDownEvent(Blockly.utils.KeyCodes.ENTER, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, enterEvent);
-
- const markedNode = this.workspace
- .getMarker(this.navigation.MARKER_NAME)
- .getCurNode();
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- markedNode.getLocation(),
- this.basicBlock.previousConnection,
- );
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Toolbox', function () {
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const tEvent = createKeyDownEvent(Blockly.utils.KeyCodes.T, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, tEvent);
-
- const firstCategory = this.workspace
- .getToolbox()
- .contents.values()
- .next().value;
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.workspace.getToolbox().getSelectedItem(),
- firstCategory,
- );
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.TOOLBOX,
- );
- });
- });
-
- suite('Test key press', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
-
- this.workspace.getCursor().drawer_ = null;
- this.basicBlock = this.workspace.newBlock('basic_block');
- this.basicBlock.initSvg();
- this.basicBlock.render();
- });
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- });
-
- test('Action does not exist', function () {
- const block = this.workspace.getTopBlocks()[0];
- const field = block.inputList[0].fieldRow[0];
- const fieldSpy = sinon.spy(field, 'onShortcut');
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.N, '');
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- this.workspace
- .getCursor()
- .setCurNode(Blockly.ASTNode.createFieldNode(field));
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isFalse(keyDownSpy.returned(true));
- sinon.assert.notCalled(fieldSpy);
- });
-
- test('Action exists - field handles action', function () {
- const block = this.workspace.getTopBlocks()[0];
- const field = block.inputList[0].fieldRow[0];
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.A, '');
- const fieldSpy = sinon.stub(field, 'onShortcut').returns(true);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- this.workspace
- .getCursor()
- .setCurNode(Blockly.ASTNode.createFieldNode(field));
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(fieldSpy);
- });
-
- test('Action exists - field does not handle action', function () {
- const block = this.workspace.getTopBlocks()[0];
- const field = block.inputList[0].fieldRow[0];
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.A, '');
- const fieldSpy = sinon.spy(field, 'onShortcut');
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- this.workspace
- .getCursor()
- .setCurNode(Blockly.ASTNode.createFieldNode(field));
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(fieldSpy);
- });
-
- test('Toggle Action Off', function () {
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.K, '', [
- Blockly.utils.KeyCodes.SHIFT,
- Blockly.utils.KeyCodes.CTRL,
- ]);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- this.workspace.keyboardAccessibilityMode = true;
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.isFalse(this.workspace.keyboardAccessibilityMode);
- });
-
- test('Toggle Action On', function () {
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.K, '', [
- Blockly.utils.KeyCodes.SHIFT,
- Blockly.utils.KeyCodes.CTRL,
- ]);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- this.workspace.keyboardAccessibilityMode = false;
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.isTrue(this.workspace.keyboardAccessibilityMode);
- });
-
- suite('Test key press in read only mode', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'field_block',
- message0: '%1 %2',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- {
- type: 'input_value',
- name: 'NAME',
- },
- ],
- previousStatement: null,
- nextStatement: null,
- colour: 230,
- tooltip: '',
- helpUrl: '',
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true, true);
- Blockly.common.setMainWorkspace(this.workspace);
- this.workspace.getCursor().drawer_ = null;
-
- this.fieldBlock1 = this.workspace.newBlock('field_block');
- this.fieldBlock1.initSvg();
- this.fieldBlock1.render();
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['field_block'];
- });
-
- test('Perform valid action for read only', function () {
- const astNode = Blockly.ASTNode.createBlockNode(this.fieldBlock1);
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.S, '');
- this.workspace.getCursor().setCurNode(astNode);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- });
-
- test('Perform invalid action for read only', function () {
- const astNode = Blockly.ASTNode.createBlockNode(this.fieldBlock1);
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.I, '');
- this.workspace.getCursor().setCurNode(astNode);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(false));
- });
-
- test('Try to perform action on a field', function () {
- const field = this.fieldBlock1.inputList[0].fieldRow[0];
- const astNode = Blockly.ASTNode.createFieldNode(field);
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.ENTER, '');
- this.workspace.getCursor().setCurNode(astNode);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(false));
- });
- });
- });
- suite('Insert Functions', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- previousStatement: null,
- nextStatement: null,
- },
- ]);
-
- this.workspace = createNavigationWorkspace(this.navigation, true);
-
- const basicBlock = this.workspace.newBlock('basic_block');
- const basicBlock2 = this.workspace.newBlock('basic_block');
-
- this.basicBlock = basicBlock;
- this.basicBlock2 = basicBlock2;
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- });
-
- test('Insert from flyout with a valid connection marked', function () {
- const previousConnection = this.basicBlock.previousConnection;
- const prevNode = Blockly.ASTNode.createConnectionNode(previousConnection);
- this.workspace
- .getMarker(this.navigation.MARKER_NAME)
- .setCurNode(prevNode);
-
- this.navigation.focusToolbox(this.workspace);
- this.navigation.focusFlyout(this.workspace);
- this.navigation.insertFromFlyout(this.workspace);
-
- const insertedBlock = this.basicBlock.previousConnection.targetBlock();
-
- chai.assert.isTrue(insertedBlock !== null);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Insert Block from flyout without marking a connection', function () {
- this.navigation.focusToolbox(this.workspace);
- this.navigation.focusFlyout(this.workspace);
- this.navigation.insertFromFlyout(this.workspace);
-
- const numBlocks = this.workspace.getTopBlocks().length;
-
- // Make sure the block was not connected to anything
- chai.assert.isNull(this.basicBlock.previousConnection.targetConnection);
- chai.assert.isNull(this.basicBlock.nextConnection.targetConnection);
-
- // Make sure that the block was added to the workspace
- chai.assert.equal(numBlocks, 3);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Connect two blocks that are on the workspace', function () {
- const targetNode = Blockly.ASTNode.createConnectionNode(
- this.basicBlock.previousConnection,
- );
- const sourceNode = Blockly.ASTNode.createConnectionNode(
- this.basicBlock2.nextConnection,
- );
-
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- targetNode,
- sourceNode,
- );
- const insertedBlock = this.basicBlock.previousConnection.targetBlock();
-
- chai.assert.isNotNull(insertedBlock);
- });
- });
- suite('Connect Blocks', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '',
- previousStatement: null,
- nextStatement: null,
- },
- {
- type: 'inline_block',
- message0: '%1 %2',
- args0: [
- {
- type: 'input_value',
- name: 'NAME',
- },
- {
- type: 'input_value',
- name: 'NAME',
- },
- ],
- inputsInline: true,
- output: null,
- tooltip: '',
- helpUrl: '',
- },
- ]);
-
- this.workspace = createNavigationWorkspace(this.navigation, true);
-
- const basicBlock = this.workspace.newBlock('basic_block');
- const basicBlock2 = this.workspace.newBlock('basic_block');
- const basicBlock3 = this.workspace.newBlock('basic_block');
- const basicBlock4 = this.workspace.newBlock('basic_block');
-
- const inlineBlock1 = this.workspace.newBlock('inline_block');
- const inlineBlock2 = this.workspace.newBlock('inline_block');
- const inlineBlock3 = this.workspace.newBlock('inline_block');
-
- this.basicBlock = basicBlock;
- this.basicBlock2 = basicBlock2;
- this.basicBlock3 = basicBlock3;
- this.basicBlock4 = basicBlock4;
-
- this.inlineBlock1 = inlineBlock1;
- this.inlineBlock2 = inlineBlock2;
- this.inlineBlock3 = inlineBlock3;
-
- this.basicBlock.nextConnection.connect(
- this.basicBlock2.previousConnection,
- );
-
- this.basicBlock3.nextConnection.connect(
- this.basicBlock4.previousConnection,
- );
-
- this.inlineBlock1.inputList[0].connection.connect(
- this.inlineBlock2.outputConnection,
- );
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- delete Blockly.Blocks['inline_block'];
- });
-
- test('Connect cursor on previous into stack', function () {
- const markedLocation = this.basicBlock2.previousConnection;
- const cursorLocation = this.basicBlock3.previousConnection;
-
- this.navigation.connect(cursorLocation, markedLocation);
-
- chai.assert.equal(
- this.basicBlock.nextConnection.targetBlock(),
- this.basicBlock3,
- );
- chai.assert.equal(
- this.basicBlock2.previousConnection.targetBlock(),
- this.basicBlock4,
- );
- });
-
- test('Connect marker on previous into stack', function () {
- const markedLocation = this.basicBlock3.previousConnection;
- const cursorLocation = this.basicBlock2.previousConnection;
-
- this.navigation.connect(cursorLocation, markedLocation);
-
- chai.assert.equal(
- this.basicBlock.nextConnection.targetBlock(),
- this.basicBlock3,
- );
- chai.assert.equal(
- this.basicBlock2.previousConnection.targetBlock(),
- this.basicBlock4,
- );
- });
-
- test('Connect cursor on next into stack', function () {
- const markedLocation = this.basicBlock2.previousConnection;
- const cursorLocation = this.basicBlock4.nextConnection;
-
- this.navigation.connect(cursorLocation, markedLocation);
-
- chai.assert.equal(
- this.basicBlock.nextConnection.targetBlock(),
- this.basicBlock4,
- );
- chai.assert.isNull(this.basicBlock3.nextConnection.targetConnection);
- });
-
- test('Connect cursor with parents', function () {
- const markedLocation = this.basicBlock3.previousConnection;
- const cursorLocation = this.basicBlock2.nextConnection;
-
- this.navigation.connect(cursorLocation, markedLocation);
-
- chai.assert.equal(
- this.basicBlock3.previousConnection.targetBlock(),
- this.basicBlock2,
- );
- });
-
- test('Try to connect input that is descendant of output', function () {
- const markedLocation = this.inlineBlock2.inputList[0].connection;
- const cursorLocation = this.inlineBlock1.outputConnection;
-
- this.navigation.connect(cursorLocation, markedLocation);
-
- chai.assert.isNull(this.inlineBlock2.outputConnection.targetBlock());
- chai.assert.equal(
- this.inlineBlock1.outputConnection.targetBlock(),
- this.inlineBlock2,
- );
- });
- test.skip('Do not connect a shadow block', function () {
- // TODO(https://github.com/google/blockly-samples/issues/538): Update
- // tests after this bug is fixed.
- this.inlineBlock2.setShadow(true);
-
- const markedLocation = this.inlineBlock2.outputConnection;
- const cursorLocation = this.inlineBlock3.inputList[0].connection;
- const didConnect = this.navigation.connect(
- cursorLocation,
- markedLocation,
- );
- chai.assert.isFalse(didConnect);
- chai.assert.isNull(this.inlineBlock2.outputConnection.targetBlock());
- chai.assert.equal(
- this.inlineBlock1.outputConnection.targetBlock(),
- this.inlineBlock2,
- );
- });
- });
-
- suite('Test cursor move on block delete', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '',
- previousStatement: null,
- nextStatement: null,
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
-
- this.basicBlockA = this.workspace.newBlock('basic_block');
- this.basicBlockB = this.workspace.newBlock('basic_block');
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- });
-
- test('Delete block - has parent ', function () {
- this.basicBlockA.nextConnection.connect(
- this.basicBlockB.previousConnection,
- );
- const astNode = Blockly.ASTNode.createBlockNode(this.basicBlockB);
- // Set the cursor to be on the child block
- this.workspace.getCursor().setCurNode(astNode);
- // Remove the child block
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.DELETE, '');
-
- // Actions that happen when a block is deleted were causing problems.
- // Since this is not what we are trying to test and does not effect the
- // feature, disable events.
- Blockly.Events.disable();
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
- Blockly.Events.enable();
-
- chai.assert.equal(
- this.workspace.getCursor().getCurNode().getType(),
- Blockly.ASTNode.types.NEXT,
- );
- });
-
- test('Delete block - no parent ', function () {
- const astNode = Blockly.ASTNode.createBlockNode(this.basicBlockB);
- this.workspace.getCursor().setCurNode(astNode);
-
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.DELETE, '');
-
- // Actions that happen when a block is deleted were causing problems.
- // Since this is not what we are trying to test and does not effect the
- // feature, disable events.
- Blockly.Events.disable();
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
- Blockly.Events.enable();
-
- chai.assert.equal(
- this.workspace.getCursor().getCurNode().getType(),
- Blockly.ASTNode.types.WORKSPACE,
- );
- });
-
- test('Delete parent block', function () {
- this.basicBlockA.nextConnection.connect(
- this.basicBlockB.previousConnection,
- );
- const astNode = Blockly.ASTNode.createBlockNode(this.basicBlockB);
- const mockDeleteBlockEvent = {
- blockId: this.basicBlockA,
- ids: [this.basicBlockA.id, this.basicBlockB.id],
- };
- // Set the cursor to be on the child block
- this.workspace.getCursor().setCurNode(astNode);
- // Remove the parent block
- this.navigation.handleBlockDeleteByDrag(
- this.workspace,
- mockDeleteBlockEvent,
- );
- chai.assert.equal(
- this.workspace.getCursor().getCurNode().getType(),
- Blockly.ASTNode.types.WORKSPACE,
- );
- });
-
- test('Delete top block in stack', function () {
- this.basicBlockA.nextConnection.connect(
- this.basicBlockB.previousConnection,
- );
- const astNode = Blockly.ASTNode.createStackNode(this.basicBlockA);
- const mockDeleteBlockEvent = {
- blockId: this.basicBlockA.id,
- ids: [this.basicBlockA.id, this.basicBlockB.id],
- };
- // Set the cursor to be on the stack
- this.workspace.getCursor().setCurNode(astNode);
- // Remove the top block in the stack
- this.navigation.handleBlockDeleteByDrag(
- this.workspace,
- mockDeleteBlockEvent,
- );
- chai.assert.equal(
- this.workspace.getCursor().getCurNode().getType(),
- Blockly.ASTNode.types.WORKSPACE,
- );
- });
- });
-
- suite('Test workspace listener', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- previousStatement: null,
- nextStatement: null,
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
- this.workspaceChangeListener = this.navigation.wsChangeWrapper;
- this.basicBlockA = this.workspace.newBlock('basic_block');
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- delete Blockly.Blocks['basic_block'];
- sinon.restore();
- });
-
- test('Handle block mutation', function () {
- const e = {
- type: Blockly.Events.BLOCK_CHANGE,
- element: 'mutation',
- blockId: this.basicBlockA.id,
- workspaceId: this.workspace.id,
- };
- const cursor = this.workspace.getCursor();
- const nextNode = Blockly.ASTNode.createConnectionNode(
- this.basicBlockA.nextConnection,
- );
- cursor.setCurNode(nextNode);
- this.workspaceChangeListener(e);
- chai.assert.equal(
- cursor.getCurNode().getType(),
- Blockly.ASTNode.types.BLOCK,
- );
- });
- test('Handle workspace click', function () {
- const e = {
- type: Blockly.Events.CLICK,
- workspaceId: this.workspace.id,
- };
- this.navigation.focusFlyout(this.workspace);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
-
- this.workspaceChangeListener(e);
-
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
- test('Focus toolbox if category clicked', function () {
- const e = {
- type: Blockly.Events.TOOLBOX_ITEM_SELECT,
- workspaceId: this.workspace.id,
- newItem: true,
- };
- const toolboxFocusStub = sinon.spy(this.navigation, 'focusToolbox');
-
- this.navigation.focusWorkspace(this.workspace);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
-
- this.workspaceChangeListener(e);
-
- sinon.assert.calledOnce(toolboxFocusStub);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.TOOLBOX,
- );
- });
- test('Focus workspace if toolbox is unselected', function () {
- const e = {
- type: Blockly.Events.TOOLBOX_ITEM_SELECT,
- workspaceId: this.workspace.id,
- newItem: false,
- };
- const resetFlyoutStub = sinon.spy(this.navigation, 'resetFlyout');
- this.navigation.setState(this.workspace, Constants.STATE.TOOLBOX);
-
- this.workspaceChangeListener(e);
-
- sinon.assert.calledOnce(resetFlyoutStub);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
- test('Focus workspace when block created on workspace', function () {
- const e = {
- type: Blockly.Events.BLOCK_CREATE,
- workspaceId: this.workspace.id,
- };
- const resetFlyoutStub = sinon.spy(this.navigation, 'resetFlyout');
- // Only works when someone is in the flyout.
- this.navigation.setState(this.workspace, Constants.STATE.FLYOUT);
-
- this.workspaceChangeListener(e);
-
- sinon.assert.calledOnce(resetFlyoutStub);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
- });
-
- suite('Test simple flyout listener', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
- this.flyoutChangeListener = this.navigation.flyoutChangeWrapper;
- this.basicBlockA = this.workspace.newBlock('basic_block');
-
- this.navigation.focusToolbox(this.workspace);
- this.workspace.getFlyout().autoClose = false;
- });
-
- teardown(function () {
- delete Blockly.Blocks['basic_block'];
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- });
- test('Handle block click in flyout - click event', function () {
- const flyout = this.workspace.getFlyout();
- const flyoutWorkspace = flyout.getWorkspace();
- const firstFlyoutBlock = flyoutWorkspace.getTopBlocks()[0];
- const e = {
- type: Blockly.Events.CLICK,
- workspaceId: flyoutWorkspace.id,
- targetType: 'block',
- blockId: firstFlyoutBlock.id,
- };
- const flyoutCursor = flyoutWorkspace.getCursor();
- this.navigation.focusWorkspace(this.workspace);
-
- this.flyoutChangeListener(e);
-
- chai.assert.equal(
- flyoutCursor.getCurNode().getType(),
- Blockly.ASTNode.types.STACK,
- );
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
- });
- test('Handle block click in flyout - select event', function () {
- const flyout = this.workspace.getFlyout();
- const flyoutWorkspace = flyout.getWorkspace();
- const firstFlyoutBlock = flyoutWorkspace.getTopBlocks()[0];
- const e = {
- type: Blockly.Events.SELECTED,
- workspaceId: flyoutWorkspace.id,
- newElementId: firstFlyoutBlock.id,
- };
- const flyoutCursor = flyoutWorkspace.getCursor();
- this.navigation.focusWorkspace(this.workspace);
-
- this.flyoutChangeListener(e);
-
- chai.assert.equal(
- flyoutCursor.getCurNode().getType(),
- Blockly.ASTNode.types.STACK,
- );
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
- });
- });
-
- suite('Test clean up methods', function () {
- setup(function () {
- this.workspace = createNavigationWorkspace(this.navigation, true);
- });
- test('All listeners and markers removed', function () {
- const numListeners = this.workspace.listeners.length;
- const markerName = this.navigation.MARKER_NAME;
- this.navigation.removeWorkspace(this.workspace);
- chai.assert.equal(this.workspace.listeners.length, numListeners - 1);
-
- const marker = this.workspace.getMarkerManager().getMarker(markerName);
- chai.assert.isNull(marker);
- });
- test('Keyboard accessibility mode can not be enabled', function () {
- this.navigation.removeWorkspace(this.workspace);
- this.navigation.enableKeyboardAccessibility(this.workspace);
- chai.assert.isFalse(this.workspace.keyboardAccessibilityMode);
- });
- test('Dispose', function () {
- const numListeners = this.workspace.listeners.length;
- const flyout = this.workspace.getFlyout();
- const numFlyoutListeners = flyout.getWorkspace().listeners.length;
- this.navigation.dispose();
- chai.assert.equal(this.workspace.listeners.length, numListeners - 1);
- chai.assert.equal(
- flyout.getWorkspace().listeners.length,
- numFlyoutListeners - 1,
- );
- });
- });
-});
diff --git a/plugins/keyboard-navigation/test/shortcuts_test.mocha.js b/plugins/keyboard-navigation/test/shortcuts_test.mocha.js
deleted file mode 100644
index 4e19095210..0000000000
--- a/plugins/keyboard-navigation/test/shortcuts_test.mocha.js
+++ /dev/null
@@ -1,531 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-const sinon = require('sinon');
-const chai = require('chai');
-
-const Blockly = require('blockly');
-
-const {NavigationController} = require('../src/index');
-const {
- createNavigationWorkspace,
- createKeyDownEvent,
-} = require('./test_helper');
-
-suite('Shortcut Tests', function () {
- setup(function () {
- this.jsdomCleanup = require('jsdom-global')(
- '
',
- );
- // We are running these tests in node even thought they require a rendered
- // workspace, which doesn't exactly work. The rendering system expects
- // cancelAnimationFrame to be defined so we need to define it.
- window.cancelAnimationFrame = function () {};
-
- Blockly.utils.dom.getFastTextWidthWithSizeString = function () {
- return 10;
- };
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '',
- previousStatement: null,
- nextStatement: null,
- },
- ]);
- this.controller = new NavigationController();
- this.controller.init();
- this.navigation = this.controller.navigation;
- this.workspace = createNavigationWorkspace(this.navigation, true);
- this.controller.addWorkspace(this.workspace);
- this.basicBlock = this.workspace.newBlock('basic_block');
- });
-
- teardown(function () {
- window.cancelAnimationFrame = undefined;
- this.controller.dispose();
- this.workspace.dispose();
- this.jsdomCleanup();
- delete Blockly.Blocks['basic_block'];
- });
-
- suite('Deleting blocks', function () {
- setup(function () {
- const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock);
- this.workspace.getCursor().setCurNode(blockNode);
- });
-
- teardown(function () {
- sinon.restore();
- });
-
- const testCases = [
- {
- name: 'Delete',
- deleteEvent: createKeyDownEvent(
- Blockly.utils.KeyCodes.DELETE,
- 'NotAField',
- ),
- },
- {
- name: 'Backspace',
- deleteEvent: createKeyDownEvent(
- Blockly.utils.KeyCodes.BACKSPACE,
- 'NotAField',
- ),
- },
- ];
-
- suite('delete keybinds trigger deletion', function () {
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.deleteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 0,
- 'Expected the block to be deleted.',
- );
- });
- });
- });
-
- suite(
- 'delete keybinds do not trigger deletion if workspace is readonly',
- function () {
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- this.workspace.options.readOnly = true;
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.deleteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be deleted.',
- );
- });
- });
- },
- );
- });
-
- suite('Copy and paste', function () {
- teardown(function () {
- sinon.restore();
- });
- const testCases = [
- {
- name: 'Control',
- copyEvent: createKeyDownEvent(Blockly.utils.KeyCodes.C, 'NotAField', [
- Blockly.utils.KeyCodes.CTRL,
- ]),
- pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [
- Blockly.utils.KeyCodes.CTRL,
- ]),
- },
- {
- name: 'Meta',
- copyEvent: createKeyDownEvent(Blockly.utils.KeyCodes.C, 'NotAField', [
- Blockly.utils.KeyCodes.META,
- ]),
- pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [
- Blockly.utils.KeyCodes.META,
- ]),
- },
- {
- name: 'Alt',
- copyEvent: createKeyDownEvent(Blockly.utils.KeyCodes.C, 'NotAField', [
- Blockly.utils.KeyCodes.ALT,
- ]),
- pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [
- Blockly.utils.KeyCodes.ALT,
- ]),
- },
- ];
-
- suite('copy and paste keybinds duplicate blocks', function () {
- setup(function () {
- const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock);
- this.workspace.getCursor().setCurNode(blockNode);
- });
-
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.copyEvent,
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 2,
- 'Expected the block to be duplicated.',
- );
- });
- });
- });
-
- suite(
- 'copy and paste does nothing if the cursor is not on a block',
- function () {
- setup(function () {
- const workspaceNode = Blockly.ASTNode.createWorkspaceNode(
- this.workspace,
- new Blockly.utils.Coordinate(100, 100),
- );
- this.workspace.getCursor().setCurNode(workspaceNode);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.copyEvent,
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
-
- suite(
- 'copy and paste do nothing if the cursor is on a shadow block',
- function () {
- setup(function () {
- this.basicBlock.setShadow(true);
- const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock);
- this.workspace.getCursor().setCurNode(blockNode);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.copyEvent,
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
-
- suite(
- 'copy and paste do nothing if the workspace is readonly',
- function () {
- setup(function () {
- this.workspace.options.readonly = true;
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.copyEvent,
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
-
- suite('copy and paste do nothing if a gesture is in progress', function () {
- setup(function () {
- sinon.stub(Blockly.Gesture, 'inProgress').returns(true);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.copyEvent,
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- });
-
- suite(
- 'copy and paste do nothing if the block is not deletable',
- function () {
- setup(function () {
- this.basicBlock.setDeletable(false);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.copyEvent,
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
- });
-
- suite('Cut and paste', function () {
- teardown(function () {
- sinon.restore();
- });
- const testCases = [
- {
- name: 'Control',
- cutEvent: createKeyDownEvent(Blockly.utils.KeyCodes.X, 'NotAField', [
- Blockly.utils.KeyCodes.CTRL,
- ]),
- pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [
- Blockly.utils.KeyCodes.CTRL,
- ]),
- },
- {
- name: 'Meta',
- cutEvent: createKeyDownEvent(Blockly.utils.KeyCodes.X, 'NotAField', [
- Blockly.utils.KeyCodes.META,
- ]),
- pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [
- Blockly.utils.KeyCodes.META,
- ]),
- },
- {
- name: 'Alt',
- cutEvent: createKeyDownEvent(Blockly.utils.KeyCodes.X, 'NotAField', [
- Blockly.utils.KeyCodes.ALT,
- ]),
- pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [
- Blockly.utils.KeyCodes.ALT,
- ]),
- },
- ];
-
- suite('cut and paste keybinds duplicate blocks', function () {
- setup(function () {
- const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock);
- this.workspace.getCursor().setCurNode(blockNode);
- });
-
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.cutEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 0,
- 'Expected the block to be deleted.',
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to be duplicated.',
- );
- });
- });
- });
-
- suite(
- 'cut and paste does nothing if the cursor is not on a block',
- function () {
- setup(function () {
- const workspaceNode = Blockly.ASTNode.createWorkspaceNode(
- this.workspace,
- new Blockly.utils.Coordinate(100, 100),
- );
- this.workspace.getCursor().setCurNode(workspaceNode);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.cutEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be deleted.',
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
-
- suite(
- 'cut and paste do nothing if the cursor is on a shadow block',
- function () {
- setup(function () {
- this.basicBlock.setShadow(true);
- const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock);
- this.workspace.getCursor().setCurNode(blockNode);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.cutEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be deleted.',
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
-
- suite('cut and paste do nothing if the workspace is readonly', function () {
- setup(function () {
- this.workspace.options.readonly = true;
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.cutEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be deleted.',
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- });
-
- suite('cut and paste do nothing if a gesture is in progress', function () {
- setup(function () {
- sinon.stub(Blockly.Gesture, 'inProgress').returns(true);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.cutEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be deleted.',
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- });
-
- suite(
- 'cut and paste do nothing if the block is not deletable',
- function () {
- setup(function () {
- this.basicBlock.setDeletable(false);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.cutEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be deleted.',
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
- });
-});
diff --git a/plugins/keyboard-navigation/test/test_helper.js b/plugins/keyboard-navigation/test/test_helper.js
deleted file mode 100644
index 99abcb5fb3..0000000000
--- a/plugins/keyboard-navigation/test/test_helper.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-const {Constants} = require('../src/index');
-const {Navigation} = require('../src/index');
-const Blockly = require('blockly/core');
-
-/**
- * Creates a workspace for testing keyboard navigation.
- * @param {Navigation} navigation Object holding navigation classes.
- * @param {boolean} enableKeyboardNav True to enable keyboard navigation, false
- * otherwise.
- * @param {boolean} readOnly True for a read only workspace, false otherwise.
- * @returns {Blockly.WorkspaceSvg} The created workspace.
- */
-export function createNavigationWorkspace(
- navigation,
- enableKeyboardNav,
- readOnly,
-) {
- const workspace = Blockly.inject('blocklyDiv', {
- toolbox: `
-
-
-
- first
-
-
- second
-
-
-
-
- third
-
-
-
- `,
- readOnly: readOnly,
- });
- if (enableKeyboardNav) {
- navigation.addWorkspace(workspace);
- navigation.enableKeyboardAccessibility(workspace);
- navigation.setState(workspace, Constants.STATE.WORKSPACE);
- }
- return workspace;
-}
-
-/**
- * Creates a key down event used for testing.
- * @param {number} keyCode The keycode for the event. Use Blockly.utils.KeyCodes
- * enum.
- * @param {string} type The type of the target. This only matters for the
- * Blockly.utils.isTargetInput method.
- * @param {?Array} modifiers A list of modifiers. Use
- * Blockly.utils.KeyCodes enum.
- * @returns {Object} The mocked keydown
- * event.
- */
-export function createKeyDownEvent(keyCode, type, modifiers) {
- const event = {
- keyCode: keyCode,
- target: {type: type},
- getModifierState: function (name) {
- if (name == 'Shift' && this.shiftKey) {
- return true;
- } else if (name == 'Control' && this.ctrlKey) {
- return true;
- } else if (name == 'Meta' && this.metaKey) {
- return true;
- } else if (name == 'Alt' && this.altKey) {
- return true;
- }
- return false;
- },
- preventDefault: function () {},
- };
- if (modifiers && modifiers.length) {
- event.altKey = modifiers.includes(Blockly.utils.KeyCodes.ALT);
- event.ctrlKey = modifiers.includes(Blockly.utils.KeyCodes.CTRL);
- event.metaKey = modifiers.includes(Blockly.utils.KeyCodes.META);
- event.shiftKey = modifiers.includes(Blockly.utils.KeyCodes.SHIFT);
- }
- return event;
-}
diff --git a/plugins/keyboard-navigation/test/toolbox.js b/plugins/keyboard-navigation/test/toolbox.js
deleted file mode 100644
index 95dd4ff7bd..0000000000
--- a/plugins/keyboard-navigation/test/toolbox.js
+++ /dev/null
@@ -1,218 +0,0 @@
-/**
- * @license
- * Copyright 2024 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview A custom toolbox for the plugin test.
- */
-
-export const toolbox = {
- kind: 'categoryToolbox',
- contents: [
- {
- kind: 'category',
- name: 'Logic',
- categorystyle: 'logic_category',
- contents: [
- {
- type: 'controls_if',
- kind: 'block',
- },
- {
- type: 'logic_compare',
- kind: 'block',
- fields: {
- OP: 'EQ',
- },
- },
- {
- type: 'logic_operation',
- kind: 'block',
- fields: {
- OP: 'AND',
- },
- },
- ],
- },
- {
- kind: 'category',
- name: 'Loops',
- categorystyle: 'loop_category',
- contents: [
- {
- type: 'controls_repeat_ext',
- kind: 'block',
- inputs: {
- TIMES: {
- shadow: {
- type: 'math_number',
- fields: {
- NUM: 10,
- },
- },
- },
- },
- },
- {
- type: 'controls_repeat',
- kind: 'block',
- enabled: false,
- fields: {
- TIMES: 10,
- },
- },
- {
- type: 'controls_whileUntil',
- kind: 'block',
- fields: {
- MODE: 'WHILE',
- },
- },
- {
- type: 'controls_for',
- kind: 'block',
- fields: {
- VAR: {
- name: 'i',
- },
- },
- inputs: {
- FROM: {
- shadow: {
- type: 'math_number',
- fields: {
- NUM: 1,
- },
- },
- },
- TO: {
- shadow: {
- type: 'math_number',
- fields: {
- NUM: 10,
- },
- },
- },
- BY: {
- shadow: {
- type: 'math_number',
- fields: {
- NUM: 1,
- },
- },
- },
- },
- },
- {
- type: 'controls_forEach',
- kind: 'block',
- fields: {
- VAR: {
- name: 'j',
- },
- },
- },
- {
- type: 'controls_flow_statements',
- kind: 'block',
- enabled: false,
- fields: {
- FLOW: 'BREAK',
- },
- },
- ],
- },
- {
- kind: 'sep',
- },
- {
- kind: 'category',
- name: 'Variables',
- custom: 'VARIABLE',
- categorystyle: 'variable_category',
- },
- {
- kind: 'category',
- name: 'Buttons and Blocks',
- categorystyle: 'loop_category',
- contents: [
- {
- type: 'controls_repeat',
- kind: 'block',
- fields: {
- TIMES: 10,
- },
- },
- {
- kind: 'BUTTON',
- text: 'Randomize Button Style',
- callbackkey: 'setRandomStyle',
- },
- {
- kind: 'BUTTON',
- text: 'Randomize Button Style',
- callbackkey: 'setRandomStyle',
- },
- {
- type: 'controls_repeat',
- kind: 'block',
- fields: {
- TIMES: 10,
- },
- },
- {
- kind: 'BUTTON',
- text: 'Randomize Button Style',
- callbackkey: 'setRandomStyle',
- },
- ],
- },
- {
- kind: 'sep',
- },
- {
- kind: 'category',
- name: 'Nested Categories',
- contents: [
- {
- kind: 'category',
- name: 'sub-category 1',
- contents: [
- {
- kind: 'BUTTON',
- text: 'Randomize Button Style',
- callbackkey: 'setRandomStyle',
- },
- {
- type: 'logic_boolean',
- kind: 'block',
- fields: {
- BOOL: 'TRUE',
- },
- },
- ],
- },
- {
- kind: 'category',
- name: 'sub-category 2',
- contents: [
- {
- type: 'logic_boolean',
- kind: 'block',
- fields: {
- BOOL: 'FALSE',
- },
- },
- {
- kind: 'BUTTON',
- text: 'Randomize Button Style',
- callbackkey: 'setRandomStyle',
- },
- ],
- },
- ],
- },
- ],
-};
From 735959d58b3945e70aabb728205e380c9d253e33 Mon Sep 17 00:00:00 2001
From: Christopher Allen
Date: Fri, 9 May 2025 19:29:43 +0100
Subject: [PATCH 06/33] chore(deps): Update `blockly` dev dependency to
`blockly@12.0.0-beta.4` (#2504)
* fix: Fix clean:node script
This was inadvertently broken by a mistranscription in PR #2453.
* chore(deps): Update blockly to v12.0.0-beta.4
* fix(FieldColour): Fix type of FieldColour.prototype.isFullBlockField
Method on superclass became public in v12.0.0.
* fix(FieldMultilineInput): Use string literal instead of Field.NBSP
Workaround for removal of that constant in google/blockly#8738.
* fix(FieldGridDropdown): Fix type error caused by separators
---
package-lock.json | 14 +++++++-------
package.json | 2 +-
plugins/field-colour/package.json | 2 +-
plugins/field-colour/src/field_colour.ts | 2 +-
plugins/field-grid-dropdown/src/grid.ts | 5 ++++-
.../src/field_multilineinput.ts | 7 +++++--
plugins/package.json | 2 +-
7 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index e850941a98..8d22bf4faf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
"@eslint/js": "^8.49.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "blockly": "^12.0.0-beta.1",
+ "blockly": "^12.0.0-beta.4",
"conventional-changelog-conventionalcommits": "^5.0.0",
"eslint": "^8.49.0",
"eslint-config-google": "^0.14.0",
@@ -911,9 +911,9 @@
}
},
"node_modules/blockly": {
- "version": "12.0.0-beta.1",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.1.tgz",
- "integrity": "sha512-lECwZ4K+YuLXMM0yxWTz1lwkmDl424sst7h/dhtSefuCki8afjI/F87byYK/ZIZsMKBEz2+8wEJ1Wlx5cYWIAg==",
+ "version": "12.0.0-beta.4",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.4.tgz",
+ "integrity": "sha512-KY26RP8GfJRTqX/EUWSwu7ilVwhdGU0qQTrgdUGl+frsgqlBqCtIWZJVCxMafCAUWyAlU9+5aQ7UBItcR2MVQQ==",
"dev": true,
"dependencies": {
"jsdom": "25.0.1"
@@ -6367,9 +6367,9 @@
"dev": true
},
"blockly": {
- "version": "12.0.0-beta.1",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.1.tgz",
- "integrity": "sha512-lECwZ4K+YuLXMM0yxWTz1lwkmDl424sst7h/dhtSefuCki8afjI/F87byYK/ZIZsMKBEz2+8wEJ1Wlx5cYWIAg==",
+ "version": "12.0.0-beta.4",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.4.tgz",
+ "integrity": "sha512-KY26RP8GfJRTqX/EUWSwu7ilVwhdGU0qQTrgdUGl+frsgqlBqCtIWZJVCxMafCAUWyAlU9+5aQ7UBItcR2MVQQ==",
"dev": true,
"requires": {
"jsdom": "25.0.1"
diff --git a/package.json b/package.json
index be5e65263e..8f4b7071c5 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,7 @@
"@eslint/js": "^8.49.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "blockly": "^12.0.0-beta.1",
+ "blockly": "^12.0.0-beta.4",
"conventional-changelog-conventionalcommits": "^5.0.0",
"eslint": "^8.49.0",
"eslint-config-google": "^0.14.0",
diff --git a/plugins/field-colour/package.json b/plugins/field-colour/package.json
index ce5d006ddf..84b7bef0fd 100644
--- a/plugins/field-colour/package.json
+++ b/plugins/field-colour/package.json
@@ -48,7 +48,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/field-colour/src/field_colour.ts b/plugins/field-colour/src/field_colour.ts
index 4d125853d2..88e1409225 100644
--- a/plugins/field-colour/src/field_colour.ts
+++ b/plugins/field-colour/src/field_colour.ts
@@ -209,7 +209,7 @@ export class FieldColour extends Blockly.Field {
*
* @returns True if this field should take up the full block. False otherwise.
*/
- protected isFullBlockField(): boolean {
+ override isFullBlockField(): boolean {
const block = this.getSourceBlock();
if (!block) throw new Blockly.UnattachedFieldError();
diff --git a/plugins/field-grid-dropdown/src/grid.ts b/plugins/field-grid-dropdown/src/grid.ts
index c02d7600e9..9208b77090 100644
--- a/plugins/field-grid-dropdown/src/grid.ts
+++ b/plugins/field-grid-dropdown/src/grid.ts
@@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-import {utils, browserEvents, MenuOption} from 'blockly/core';
+import {utils, browserEvents, MenuOption, FieldDropdown} from 'blockly/core';
import {GridItem} from './grid_item';
/**
@@ -88,6 +88,9 @@ export class Grid {
private populateItems(options: MenuOption[]) {
let row = document.createElement('div');
for (const [index, item] of options.entries()) {
+ // TODO(#2507): Don't just ignore separators.
+ if (item === FieldDropdown.SEPARATOR) continue;
+
if (index % this.columns === 0) {
row = document.createElement('div');
row.className = 'blocklyFieldGridRow';
diff --git a/plugins/field-multilineinput/src/field_multilineinput.ts b/plugins/field-multilineinput/src/field_multilineinput.ts
index ee518fba1c..74415f18cd 100644
--- a/plugins/field-multilineinput/src/field_multilineinput.ts
+++ b/plugins/field-multilineinput/src/field_multilineinput.ts
@@ -163,9 +163,11 @@ export class FieldMultilineInput extends Blockly.FieldTextInput {
);
}
let textLines = this.getText();
+ // TODO(google/blockly#8738): Use minimum-width setting mechanism
+ // to be introduced in PR #9011.
if (!textLines) {
// Prevent the field from disappearing if empty.
- return Blockly.Field.NBSP;
+ return '\u00A0'; // Non-breaking space.
}
const lines = textLines.split('\n');
textLines = '';
@@ -182,7 +184,8 @@ export class FieldMultilineInput extends Blockly.FieldTextInput {
}
// Replace whitespace with non-breaking spaces so the text doesn't
// collapse.
- text = text.replace(/\s/g, Blockly.Field.NBSP);
+ // TODO(google/blockly#8738): Use Blockly.Field.NBSP.
+ text = text.replace(/\s/g, '\u00A0'); // Non-breaking space.
textLines += text;
if (i !== displayLinesNumber - 1) {
diff --git a/plugins/package.json b/plugins/package.json
index 8783b26f78..2466a84cd2 100644
--- a/plugins/package.json
+++ b/plugins/package.json
@@ -7,7 +7,7 @@
"boot": "lerna bootstrap",
"build": "lerna run build",
"clean": "lerna run clean",
- "clean:node": "lerna run clean --yes",
+ "clean:node": "lerna clean --yes",
"postinstall": "npm run boot",
"predeploy": "lerna run predeploy",
"test": "lerna run test"
From 04abb7bb050c8206aa35c0bfb32ea8889bab9e85 Mon Sep 17 00:00:00 2001
From: Christopher Allen
Date: Thu, 8 May 2025 23:23:10 +0100
Subject: [PATCH 07/33] fix!: Delete old keyboard-navigation plugin (#2508)
This depends on things that no longer exist in
blockly@v12.0.0-beta.4, like BasicCursor and Cursor, and also
on other things that will cease to exist before 12.0.0, like
ASTNode.
We need to update the samples repository to be able to test
plugins with v12, and this plugin is soon to be replaced by
the new plugin being developed in
google/blockly-keyboard-experimentation, so the most expedient
course of action is just to delete this one to allow upgrading
this repo's blockly devDependency.
BREAKING CHANGE:
Removes the keyboard-experimentation plugin, obviously.
Conflicts:
plugins/keyboard-navigation/CHANGELOG.md
plugins/keyboard-navigation/package-lock.json
plugins/keyboard-navigation/package.json
plugins/keyboard-navigation/src/navigation.js
plugins/keyboard-navigation/src/navigation_controller.js
plugins/keyboard-navigation/test/navigation_test.mocha.js
---
gh-pages/_index.html | 8 +-
plugins/keyboard-navigation/CHANGELOG.md | 582 ----
plugins/keyboard-navigation/GETSTARTED.md | 24 -
plugins/keyboard-navigation/README.md | 52 -
plugins/keyboard-navigation/package-lock.json | 3070 -----------------
plugins/keyboard-navigation/package.json | 60 -
plugins/keyboard-navigation/src/constants.js | 63 -
.../keyboard-navigation/src/flyout_cursor.js | 93 -
.../src/gesture_monkey_patch.js | 59 -
plugins/keyboard-navigation/src/index.js | 25 -
.../keyboard-navigation/src/line_cursor.js | 190 -
plugins/keyboard-navigation/src/navigation.js | 1287 -------
.../src/navigation_controller.js | 1020 ------
plugins/keyboard-navigation/test/index.html | 53 -
plugins/keyboard-navigation/test/index.js | 83 -
.../test/navigation_modify_test.mocha.js | 691 ----
.../test/navigation_test.mocha.js | 1365 --------
.../test/shortcuts_test.mocha.js | 531 ---
.../keyboard-navigation/test/test_helper.js | 89 -
plugins/keyboard-navigation/test/toolbox.js | 218 --
20 files changed, 7 insertions(+), 9556 deletions(-)
delete mode 100644 plugins/keyboard-navigation/CHANGELOG.md
delete mode 100644 plugins/keyboard-navigation/GETSTARTED.md
delete mode 100644 plugins/keyboard-navigation/README.md
delete mode 100644 plugins/keyboard-navigation/package-lock.json
delete mode 100644 plugins/keyboard-navigation/package.json
delete mode 100644 plugins/keyboard-navigation/src/constants.js
delete mode 100644 plugins/keyboard-navigation/src/flyout_cursor.js
delete mode 100644 plugins/keyboard-navigation/src/gesture_monkey_patch.js
delete mode 100644 plugins/keyboard-navigation/src/index.js
delete mode 100644 plugins/keyboard-navigation/src/line_cursor.js
delete mode 100644 plugins/keyboard-navigation/src/navigation.js
delete mode 100644 plugins/keyboard-navigation/src/navigation_controller.js
delete mode 100644 plugins/keyboard-navigation/test/index.html
delete mode 100644 plugins/keyboard-navigation/test/index.js
delete mode 100644 plugins/keyboard-navigation/test/navigation_modify_test.mocha.js
delete mode 100644 plugins/keyboard-navigation/test/navigation_test.mocha.js
delete mode 100644 plugins/keyboard-navigation/test/shortcuts_test.mocha.js
delete mode 100644 plugins/keyboard-navigation/test/test_helper.js
delete mode 100644 plugins/keyboard-navigation/test/toolbox.js
diff --git a/gh-pages/_index.html b/gh-pages/_index.html
index eb8d2e97fd..ac2486fc20 100644
--- a/gh-pages/_index.html
+++ b/gh-pages/_index.html
@@ -286,7 +286,7 @@
-
+
@@ -297,6 +297,12 @@
A plugin that allows users to manipulate and connect blocks using a keyboard-driven cursor.
+
+ This plugin (and its demo) is temporarily unavailable while we
+ develop an new and improved version; you can follow along with
+ our work in the blockly-keyboard-experimentation
+ GitHub repository.
+
diff --git a/plugins/keyboard-navigation/CHANGELOG.md b/plugins/keyboard-navigation/CHANGELOG.md
deleted file mode 100644
index 805ed4315f..0000000000
--- a/plugins/keyboard-navigation/CHANGELOG.md
+++ /dev/null
@@ -1,582 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [0.6.14](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.13...@blockly/keyboard-navigation@0.6.14) (2025-02-13)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.13](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.12...@blockly/keyboard-navigation@0.6.13) (2024-12-19)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.12](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.11...@blockly/keyboard-navigation@0.6.12) (2024-12-03)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.11](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.10...@blockly/keyboard-navigation@0.6.11) (2024-11-07)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.10](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.9...@blockly/keyboard-navigation@0.6.10) (2024-09-26)
-
-
-### Bug Fixes
-
-* **field-*:** Remove unneeded `fieldRegistry.unregister` calls ([#2454](https://github.com/google/blockly-samples/issues/2454)) ([b3ba30e](https://github.com/google/blockly-samples/commit/b3ba30e23dddf0bd98c266659aa229ba6ba685b0)), closes [#2453](https://github.com/google/blockly-samples/issues/2453)
-
-
-
-
-
-## [0.6.9](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.8...@blockly/keyboard-navigation@0.6.9) (2024-08-29)
-
-
-### Bug Fixes
-
-* predeploy plugins ([#2449](https://github.com/google/blockly-samples/issues/2449)) ([6b36d8b](https://github.com/google/blockly-samples/commit/6b36d8b344a969f79d89bbc7dcee29ae554759f9))
-
-
-
-
-
-## [0.6.8](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.7...@blockly/keyboard-navigation@0.6.8) (2024-08-22)
-
-
-### Bug Fixes
-
-* lerna v8 breaking our whole shebangle ([#2446](https://github.com/google/blockly-samples/issues/2446)) ([b8b4c21](https://github.com/google/blockly-samples/commit/b8b4c21d4eaf81f527336ae46f6679ff99ac23c3))
-
-
-
-
-
-## [0.6.7](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.6...@blockly/keyboard-navigation@0.6.7) (2024-08-08)
-
-
-### Bug Fixes
-
-* **keyboard-navigation:** remove references to blockly.fieldcolour ([#2441](https://github.com/google/blockly-samples/issues/2441)) ([81787b7](https://github.com/google/blockly-samples/commit/81787b7008b2e255da74487ee32eafeff2477177))
-
-
-
-## [0.6.6](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.5...@blockly/keyboard-navigation@0.6.6) (2024-08-01)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.5](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.4...@blockly/keyboard-navigation@0.6.5) (2024-07-25)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.4](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.3...@blockly/keyboard-navigation@0.6.4) (2024-07-11)
-
-
-### Reverts
-
-* Revert "chore(deps): Bump the npm_and_yarn group across 54 directories with 19 updates (#2403)" (#2410) ([bad8ffb](https://github.com/google/blockly-samples/commit/bad8ffbf85caa4e5b68d2f010cd0deaa9e3dd98f)), closes [#2403](https://github.com/google/blockly-samples/issues/2403) [#2410](https://github.com/google/blockly-samples/issues/2410)
-* Revert "chore(deps): Bump the npm_and_yarn group across 6 directories with 11…" (#2408) ([95b13c7](https://github.com/google/blockly-samples/commit/95b13c7de3b6b3892b5c04bdc02a798ff04061b4)), closes [#2408](https://github.com/google/blockly-samples/issues/2408)
-
-
-
-## [0.6.3](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.2...@blockly/keyboard-navigation@0.6.3) (2024-07-04)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.2](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.1...@blockly/keyboard-navigation@0.6.2) (2024-06-06)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.6.1](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.6.0...@blockly/keyboard-navigation@0.6.1) (2024-05-30)
-
-
-### Bug Fixes
-
-* multiple blockly instances ([#2375](https://github.com/google/blockly-samples/issues/2375)) ([b231e59](https://github.com/google/blockly-samples/commit/b231e598f2f5f5b0abbfd01d981e35572ad50a26))
-
-
-
-## [0.6.0](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.13...@blockly/keyboard-navigation@0.6.0) (2024-05-21)
-
-
-### âš BREAKING CHANGES
-
-* update all plugins to v11 of blockly
-* **dev-scripts:** This PR removes the support that was added
-
-### Features
-
-* support keyboard navigation of flyout buttons ([#2200](https://github.com/google/blockly-samples/issues/2200)) ([c2abe4d](https://github.com/google/blockly-samples/commit/c2abe4da9808f64161d5dc89a5e4d1b546ec279b))
-* update all plugins to v11 of blockly ([5fcd3e7](https://github.com/google/blockly-samples/commit/5fcd3e7d53eaadffe9bda9a378b404d34b2f8be2))
-
-
-### Bug Fixes
-
-* build for the v11 branch ([#2268](https://github.com/google/blockly-samples/issues/2268)) ([c7a4fc5](https://github.com/google/blockly-samples/commit/c7a4fc5e72c5e8d9e9bc926bbbbadd1eb31792fc))
-* Call blocks handle both manual disabling and disabled defs ([#2334](https://github.com/google/blockly-samples/issues/2334)) ([5eade55](https://github.com/google/blockly-samples/commit/5eade55779c4022d14ad4472ff32c93c78199887))
-* **dev-scripts:** Fixes, refactoring and simplification of `webpack.config.js` and `'blockly'` imports ([#2229](https://github.com/google/blockly-samples/issues/2229)) ([f5ffdb9](https://github.com/google/blockly-samples/commit/f5ffdb961e3b60ddb164087f4bddc4e6215906b7)), closes [#335](https://github.com/google/blockly-samples/issues/335) [#335](https://github.com/google/blockly-samples/issues/335) [#1630](https://github.com/google/blockly-samples/issues/1630) [#335](https://github.com/google/blockly-samples/issues/335) [#226](https://github.com/google/blockly-samples/issues/226) [google/blockly#7822](https://github.com/google/blockly/issues/7822) [google/blockly#7822](https://github.com/google/blockly/issues/7822) [/github.com/google/blockly-samples/pull/2229#issuecomment-1979123919](https://github.com/google//github.com/google/blockly-samples/pull/2229/issues/issuecomment-1979123919)
-* update keyboard nav to use proper getContents ([#2342](https://github.com/google/blockly-samples/issues/2342)) ([4d429c0](https://github.com/google/blockly-samples/commit/4d429c092c59045b6a284f0d62a4afcda994e90d))
-
-
-
-## [0.5.13](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.12...@blockly/keyboard-navigation@0.5.13) (2024-05-16)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.12](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.11...@blockly/keyboard-navigation@0.5.12) (2024-05-09)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.11](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.10...@blockly/keyboard-navigation@0.5.11) (2024-04-25)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.10](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.9...@blockly/keyboard-navigation@0.5.10) (2024-04-04)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.9](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.8...@blockly/keyboard-navigation@0.5.9) (2024-03-28)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.8](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.7...@blockly/keyboard-navigation@0.5.8) (2024-02-08)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.7](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.6...@blockly/keyboard-navigation@0.5.7) (2023-12-14)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.6](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.5...@blockly/keyboard-navigation@0.5.6) (2023-12-07)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.5](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.4...@blockly/keyboard-navigation@0.5.5) (2023-12-07)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.4](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.3...@blockly/keyboard-navigation@0.5.4) (2023-11-16)
-
-
-### Bug Fixes
-
-* resolved 15 ESLint warnings ([#2065](https://github.com/google/blockly-samples/issues/2065)) ([2436337](https://github.com/google/blockly-samples/commit/243633746542bb1518fe2893c0421a5a6f79fd32))
-
-
-
-## [0.5.3](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.2...@blockly/keyboard-navigation@0.5.3) (2023-11-09)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.2](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.1...@blockly/keyboard-navigation@0.5.2) (2023-11-02)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.1](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.5.0...@blockly/keyboard-navigation@0.5.1) (2023-10-30)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.5.0](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.7...@blockly/keyboard-navigation@0.5.0) (2023-09-28)
-
-
-### âš BREAKING CHANGES
-
-* changes for v10.2.0 (#1989)
-
-### release
-
-* changes for v10.2.0 ([#1989](https://github.com/google/blockly-samples/issues/1989)) ([4d81ea7](https://github.com/google/blockly-samples/commit/4d81ea7254412ef199a270fc740c2f45755a2725)), closes [#1844](https://github.com/google/blockly-samples/issues/1844) [#1845](https://github.com/google/blockly-samples/issues/1845) [#1863](https://github.com/google/blockly-samples/issues/1863) [#1880](https://github.com/google/blockly-samples/issues/1880) [#1885](https://github.com/google/blockly-samples/issues/1885) [#1886](https://github.com/google/blockly-samples/issues/1886) [#1887](https://github.com/google/blockly-samples/issues/1887) [#1888](https://github.com/google/blockly-samples/issues/1888) [#1919](https://github.com/google/blockly-samples/issues/1919) [#1920](https://github.com/google/blockly-samples/issues/1920) [#1983](https://github.com/google/blockly-samples/issues/1983) [#1984](https://github.com/google/blockly-samples/issues/1984) [#1985](https://github.com/google/blockly-samples/issues/1985) [#1991](https://github.com/google/blockly-samples/issues/1991)
-
-
-
-## [0.4.7](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.6...@blockly/keyboard-navigation@0.4.7) (2023-09-28)
-
-
-### Bug Fixes
-
-* make keyboard nav compatible with v10.2.0 ([#1990](https://github.com/google/blockly-samples/issues/1990)) ([e0915b3](https://github.com/google/blockly-samples/commit/e0915b36afb7d049665673e89c4340bc01cdf08c))
-
-
-
-## [0.4.6](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.5...@blockly/keyboard-navigation@0.4.6) (2023-09-14)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.4.5](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.4...@blockly/keyboard-navigation@0.4.5) (2023-08-17)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.4.4](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.3...@blockly/keyboard-navigation@0.4.4) (2023-07-24)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.4.3](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.2...@blockly/keyboard-navigation@0.4.3) (2023-07-20)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.4.2](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.1...@blockly/keyboard-navigation@0.4.2) (2023-07-13)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.4.1](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.4.0...@blockly/keyboard-navigation@0.4.1) (2023-07-06)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.4.0](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.18...@blockly/keyboard-navigation@0.4.0) (2023-06-28)
-
-
-### âš BREAKING CHANGES
-
-* update all plugins to use blockly-v10.0.0 (#1744)
-
-### Features
-
-* update all plugins to use blockly-v10.0.0 ([#1744](https://github.com/google/blockly-samples/issues/1744)) ([6cc88cb](https://github.com/google/blockly-samples/commit/6cc88cbef39d4ad664a668d3d46eb29ba7292f9c))
-
-
-
-## [0.3.18](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.17...@blockly/keyboard-navigation@0.3.18) (2023-06-22)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.17](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.16...@blockly/keyboard-navigation@0.3.17) (2023-05-18)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.16](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.15...@blockly/keyboard-navigation@0.3.16) (2023-05-11)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.15](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.14...@blockly/keyboard-navigation@0.3.15) (2023-05-04)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.14](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.13...@blockly/keyboard-navigation@0.3.14) (2023-04-27)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.13](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.12...@blockly/keyboard-navigation@0.3.13) (2023-04-13)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.12](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.11...@blockly/keyboard-navigation@0.3.12) (2023-03-23)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.11](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.10...@blockly/keyboard-navigation@0.3.11) (2023-03-09)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.10](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.9...@blockly/keyboard-navigation@0.3.10) (2023-03-02)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.9](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.8...@blockly/keyboard-navigation@0.3.9) (2023-02-23)
-
-
-### Bug Fixes
-
-* remove prepublishOnly scripts ([#1579](https://github.com/google/blockly-samples/issues/1579)) ([27da6cd](https://github.com/google/blockly-samples/commit/27da6cd04c38f6ba417f4e7446bb6218c475448d))
-
-
-
-## [0.3.8](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.7...@blockly/keyboard-navigation@0.3.8) (2023-02-23)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.7](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.6...@blockly/keyboard-navigation@0.3.7) (2023-02-16)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.6](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.5...@blockly/keyboard-navigation@0.3.6) (2023-02-09)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.5](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.4...@blockly/keyboard-navigation@0.3.5) (2023-01-26)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.4](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.3...@blockly/keyboard-navigation@0.3.4) (2023-01-05)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.3](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.2...@blockly/keyboard-navigation@0.3.3) (2022-12-15)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.2](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.1...@blockly/keyboard-navigation@0.3.2) (2022-10-27)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.1](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.3.0...@blockly/keyboard-navigation@0.3.1) (2022-10-13)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## [0.3.0](https://github.com/google/blockly-samples/compare/@blockly/keyboard-navigation@0.2.22...@blockly/keyboard-navigation@0.3.0) (2022-10-05)
-
-
-### âš BREAKING CHANGES
-
-* update peer and devDependencies of all plugins to require Blockly v9 (#1314)
-
-### Bug Fixes
-
-* keyboard navigation tests ([#1311](https://github.com/google/blockly-samples/issues/1311)) ([8299646](https://github.com/google/blockly-samples/commit/8299646ecf26bf0a95df11bfb24ae2e219c88176))
-* references to deprecated functions in v9 ([#1313](https://github.com/google/blockly-samples/issues/1313)) ([cb2e679](https://github.com/google/blockly-samples/commit/cb2e67987e0b62a77c26adc660cc6ade1ba67954))
-
-
-### Miscellaneous Chores
-
-* update peer and devDependencies of all plugins to require Blockly v9 ([#1314](https://github.com/google/blockly-samples/issues/1314)) ([03d4912](https://github.com/google/blockly-samples/commit/03d4912c42c8de0f30493037ccc28dddaea0f266))
-
-
-
-## 0.2.22 (2022-08-11)
-
-
-### Bug Fixes
-
-* Remove the deprecated block-extension-tooltip ([#1215](https://github.com/google/blockly-samples/issues/1215)) ([a044478](https://github.com/google/blockly-samples/commit/a044478c86a73e3065bc866e427f175cbec6fc13))
-
-
-
-
-
-## 0.2.21 (2022-08-04)
-
-
-### Bug Fixes
-
-* fix the name of the package of suggested-blocks ([#1214](https://github.com/google/blockly-samples/issues/1214)) ([35aa8ec](https://github.com/google/blockly-samples/commit/35aa8ec73a60a4eb5b1e80cb2fc71dcd83d05e27))
-
-
-
-
-
-## 0.2.19 (2022-07-21)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## 0.2.18 (2022-07-06)
-
-
-### Bug Fixes
-
-* Update blockly-react to use functional components instead of class components. ([#1178](https://github.com/google/blockly-samples/issues/1178)) ([fa21187](https://github.com/google/blockly-samples/commit/fa21187cdbe4ec3a5c69f185540dd68a98eb69d7))
-
-
-
-
-
-## 0.2.17 (2022-06-27)
-
-
-### Bug Fixes
-
-* Update package import for keyboard navigation demo ([#1170](https://github.com/google/blockly-samples/issues/1170)) ([69c1725](https://github.com/google/blockly-samples/commit/69c1725b775279fcc397dc178935208d5f42b08c))
-
-
-
-
-
-## 0.2.16 (2022-06-21)
-
-**Note:** Version bump only for package @blockly/keyboard-navigation
-
-
-
-
-
-## 0.2.15 (2022-06-08)
-
-
-### Bug Fixes
-
-* package versions to support patch releases ([#1150](https://github.com/google/blockly-samples/issues/1150)) ([e1ae378](https://github.com/google/blockly-samples/commit/e1ae378d779531621c3d948566257d069002963f))
-
-
-
-
-
-## 0.2.14 (2022-06-02)
-
-
-### Bug Fixes
-
-* add git identity ([#1156](https://github.com/google/blockly-samples/issues/1156)) ([8d80924](https://github.com/google/blockly-samples/commit/8d809243b277375beb2ce75d4e157b5e17f78193))
diff --git a/plugins/keyboard-navigation/GETSTARTED.md b/plugins/keyboard-navigation/GETSTARTED.md
deleted file mode 100644
index 99e93c7e9a..0000000000
--- a/plugins/keyboard-navigation/GETSTARTED.md
+++ /dev/null
@@ -1,24 +0,0 @@
-This package was bootstrapped with [@blockly/create-package](https://www.npmjs.com/package/@blockly/create-package).
-
-## Available Scripts
-
-In this directory, you can run:
-
-### `npm start`
-
-Runs the package in development mode.
-
-Open [http://localhost:3000/test](http://localhost:3000/test) to view the test
-playground in the browser. The page will reload if you make edits.
-
-### `npm run build`
-
-Builds the package into the `dist` directory.
-
-### `npm run lint`
-
-Runs eslint on the `src` and `test` directories.
-
-### `npm run clean`
-
-Deletes the `dist` and `build` directories if they exist.
diff --git a/plugins/keyboard-navigation/README.md b/plugins/keyboard-navigation/README.md
deleted file mode 100644
index abf069175b..0000000000
--- a/plugins/keyboard-navigation/README.md
+++ /dev/null
@@ -1,52 +0,0 @@
-# @blockly/keyboard-navigation [](https://github.com/google/blockly)
-
-A [Blockly](https://www.npmjs.com/package/blockly) plugin that adds keyboard
-navigation to Blockly. This allows users to use the keyboard to navigate the
-toolbox and the blocks. More information on keyboard navigation can be found
-on our [keyboard navigation documentation page](https://developers.google.com/blockly/guides/configure/web/keyboard-nav).
-
-## Installation
-
-### Yarn
-
-```
-yarn add @blockly/keyboard-navigation
-```
-
-### npm
-
-```
-npm install @blockly/keyboard-navigation --save
-```
-
-## Usage
-
-```js
-import * as Blockly from 'blockly';
-import {NavigationController} from '@blockly/keyboard-navigation';
-// Inject Blockly.
-const workspace = Blockly.inject('blocklyDiv', {
- toolbox: toolboxCategories,
-});
-// Initialize plugin.
-const navigationController = new NavigationController();
-navigationController.init();
-navigationController.addWorkspace(workspace);
-// Turns on keyboard navigation.
-navigationController.enable(workspace);
-```
-
-## API
-
-This plugin exports the following classes:
-
-- `NavigationController`: Class in charge of registering all keyboard shortcuts.
-- `Navigation`: This holds all the functions necessary to navigate around Blockly using the keyboard.
-- `FlyoutCursor`: Cursor in charge of navigating the flyout.
-- `LineCursor`: Alternative cursor that tries to navigate blocks like lines of code.
-
-You should only need to use these if you plan on changing the default functionality.
-
-## License
-
-Apache 2.0
diff --git a/plugins/keyboard-navigation/package-lock.json b/plugins/keyboard-navigation/package-lock.json
deleted file mode 100644
index 2037b47982..0000000000
--- a/plugins/keyboard-navigation/package-lock.json
+++ /dev/null
@@ -1,3070 +0,0 @@
-{
- "name": "@blockly/keyboard-navigation",
- "version": "0.6.14",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "name": "@blockly/keyboard-navigation",
- "version": "0.6.14",
- "license": "Apache-2.0",
- "devDependencies": {
- "chai": "^4.2.0",
- "jsdom": "^16.4.0",
- "jsdom-global": "^3.0.2",
- "mocha": "^10.7.0",
- "sinon": "^9.0.1"
- },
- "engines": {
- "node": ">=8.17.0"
- },
- "peerDependencies": {
- "blockly": "^11.0.0"
- }
- },
- "node_modules/@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
- "dev": true,
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/@sinonjs/fake-timers": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
- "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "node_modules/@sinonjs/samsam": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz",
- "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.6.0",
- "lodash.get": "^4.4.2",
- "type-detect": "^4.0.8"
- }
- },
- "node_modules/@sinonjs/text-encoding": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
- "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
- "dev": true
- },
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/abab": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
- "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
- "dev": true
- },
- "node_modules/acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dev": true,
- "dependencies": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- }
- },
- "node_modules/acorn-globals/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
- "node_modules/browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/chai": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
- "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
- "dev": true,
- "dependencies": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "loupe": "^2.3.1",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "node_modules/cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "dependencies": {
- "cssom": "~0.3.6"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cssstyle/node_modules/cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- },
- "node_modules/data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decimal.js": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
- "dev": true
- },
- "node_modules/deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "dependencies": {
- "type-detect": "^4.0.0"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/diff": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
- "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
- "dev": true,
- "dependencies": {
- "webidl-conversions": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/domexception/node_modules/webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/escodegen": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
- "dev": true,
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
- "engines": {
- "node": ">=6.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true,
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true,
- "bin": {
- "flat": "cli.js"
- }
- },
- "node_modules/form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "dev": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/glob/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "dependencies": {
- "whatwg-encoding": "^1.0.5"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "dev": true,
- "dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "node_modules/jsdom": {
- "version": "16.7.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
- "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.5",
- "acorn": "^8.2.4",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.3.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.1",
- "domexception": "^2.0.1",
- "escodegen": "^2.0.0",
- "form-data": "^3.0.0",
- "html-encoding-sniffer": "^2.0.1",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.5.0",
- "ws": "^7.4.6",
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "canvas": "^2.5.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
- "node_modules/jsdom-global": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
- "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=",
- "dev": true,
- "peerDependencies": {
- "jsdom": ">=10.0.0"
- }
- },
- "node_modules/just-extend": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
- "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
- "dev": true
- },
- "node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "dependencies": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
- "dev": true
- },
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/loupe": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz",
- "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==",
- "dev": true,
- "dependencies": {
- "get-func-name": "^2.0.0"
- }
- },
- "node_modules/mime-db": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
- "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.34",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
- "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
- "dev": true,
- "dependencies": {
- "mime-db": "1.51.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mocha": {
- "version": "10.7.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.0.tgz",
- "integrity": "sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "^4.1.3",
- "browser-stdout": "^1.3.1",
- "chokidar": "^3.5.3",
- "debug": "^4.3.5",
- "diff": "^5.2.0",
- "escape-string-regexp": "^4.0.0",
- "find-up": "^5.0.0",
- "glob": "^8.1.0",
- "he": "^1.2.0",
- "js-yaml": "^4.1.0",
- "log-symbols": "^4.1.0",
- "minimatch": "^5.1.6",
- "ms": "^2.1.3",
- "serialize-javascript": "^6.0.2",
- "strip-json-comments": "^3.1.1",
- "supports-color": "^8.1.1",
- "workerpool": "^6.5.1",
- "yargs": "^16.2.0",
- "yargs-parser": "^20.2.9",
- "yargs-unparser": "^2.0.0"
- },
- "bin": {
- "_mocha": "bin/_mocha",
- "mocha": "bin/mocha.js"
- },
- "engines": {
- "node": ">= 14.0.0"
- }
- },
- "node_modules/mocha/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/mocha/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/mocha/node_modules/debug": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
- "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/mocha/node_modules/debug/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/mocha/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/mocha/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mocha/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/mocha/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/nise": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz",
- "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.7.0",
- "@sinonjs/fake-timers": "^6.0.0",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "path-to-regexp": "^1.7.0"
- }
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nwsapi": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
- "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
- "dev": true
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "dependencies": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "dependencies": {
- "isarray": "0.0.1"
- }
- },
- "node_modules/pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "dev": true
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "dev": true
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "node_modules/saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "dependencies": {
- "xmlchars": "^2.2.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/sinon": {
- "version": "9.2.4",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz",
- "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.8.1",
- "@sinonjs/fake-timers": "^6.0.1",
- "@sinonjs/samsam": "^5.3.1",
- "diff": "^4.0.2",
- "nise": "^4.0.4",
- "supports-color": "^7.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/sinon"
- }
- },
- "node_modules/sinon/node_modules/diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/tough-cookie": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
- "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
- "dev": true,
- "dependencies": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tough-cookie/node_modules/universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/tr46": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
- "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "dependencies": {
- "prelude-ls": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "node_modules/w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "dependencies": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "node_modules/w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "dependencies": {
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true,
- "engines": {
- "node": ">=10.4"
- }
- },
- "node_modules/whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "dependencies": {
- "iconv-lite": "0.4.24"
- }
- },
- "node_modules/whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "node_modules/whatwg-url": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
- "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/workerpool": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
- "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
- "dev": true
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "dev": true,
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "node_modules/xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "dependencies": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-unparser/node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- },
- "dependencies": {
- "@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
- "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "@sinonjs/samsam": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz",
- "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.6.0",
- "lodash.get": "^4.4.2",
- "type-detect": "^4.0.8"
- }
- },
- "@sinonjs/text-encoding": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
- "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
- "dev": true
- },
- "@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "dev": true
- },
- "abab": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
- "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
- "dev": true
- },
- "acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "dev": true
- },
- "acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dev": true,
- "requires": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- },
- "dependencies": {
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- }
- }
- },
- "acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "requires": {
- "debug": "4"
- }
- },
- "ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true
- },
- "braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "requires": {
- "fill-range": "^7.1.1"
- }
- },
- "browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
- },
- "chai": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
- "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "loupe": "^2.3.1",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true
- },
- "chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- }
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "requires": {
- "cssom": "~0.3.6"
- },
- "dependencies": {
- "cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- }
- }
- },
- "data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
- "dev": true,
- "requires": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- }
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
- },
- "decimal.js": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
- "dev": true
- },
- "deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
- "diff": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
- "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
- "dev": true
- },
- "domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
- "dev": true,
- "requires": {
- "webidl-conversions": "^5.0.0"
- },
- "dependencies": {
- "webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true
- }
- }
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "escodegen": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
- "dev": true,
- "requires": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
- },
- "form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "optional": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true
- },
- "glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "requires": {
- "whatwg-encoding": "^1.0.5"
- }
- },
- "http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "dev": true,
- "requires": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- }
- },
- "https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true
- },
- "is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true
- },
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "jsdom": {
- "version": "16.7.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
- "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
- "dev": true,
- "requires": {
- "abab": "^2.0.5",
- "acorn": "^8.2.4",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.3.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.1",
- "domexception": "^2.0.1",
- "escodegen": "^2.0.0",
- "form-data": "^3.0.0",
- "html-encoding-sniffer": "^2.0.1",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.5.0",
- "ws": "^7.4.6",
- "xml-name-validator": "^3.0.0"
- }
- },
- "jsdom-global": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
- "integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk=",
- "dev": true
- },
- "just-extend": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
- "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
- "dev": true
- },
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
- "dev": true
- },
- "log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- }
- },
- "loupe": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz",
- "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.0"
- }
- },
- "mime-db": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
- "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.34",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
- "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
- "dev": true,
- "requires": {
- "mime-db": "1.51.0"
- }
- },
- "mocha": {
- "version": "10.7.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.0.tgz",
- "integrity": "sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.3",
- "browser-stdout": "^1.3.1",
- "chokidar": "^3.5.3",
- "debug": "^4.3.5",
- "diff": "^5.2.0",
- "escape-string-regexp": "^4.0.0",
- "find-up": "^5.0.0",
- "glob": "^8.1.0",
- "he": "^1.2.0",
- "js-yaml": "^4.1.0",
- "log-symbols": "^4.1.0",
- "minimatch": "^5.1.6",
- "ms": "^2.1.3",
- "serialize-javascript": "^6.0.2",
- "strip-json-comments": "^3.1.1",
- "supports-color": "^8.1.1",
- "workerpool": "^6.5.1",
- "yargs": "^16.2.0",
- "yargs-parser": "^20.2.9",
- "yargs-unparser": "^2.0.0"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "debug": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
- "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
- }
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "nise": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz",
- "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0",
- "@sinonjs/fake-timers": "^6.0.0",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "path-to-regexp": "^1.7.0"
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "nwsapi": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
- "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "requires": {
- "isarray": "0.0.1"
- }
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
- "punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true
- },
- "querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "dev": true
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true
- },
- "requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "requires": {
- "xmlchars": "^2.2.0"
- }
- },
- "serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "sinon": {
- "version": "9.2.4",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz",
- "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.8.1",
- "@sinonjs/fake-timers": "^6.0.1",
- "@sinonjs/samsam": "^5.3.1",
- "diff": "^4.0.2",
- "nise": "^4.0.4",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true
- }
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "tough-cookie": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
- "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
- "dev": true,
- "requires": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
- "dependencies": {
- "universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "dev": true
- }
- }
- },
- "tr46": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
- "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.1"
- }
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2"
- }
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
- },
- "url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "requires": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "requires": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "requires": {
- "xml-name-validator": "^3.0.0"
- }
- },
- "webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true
- },
- "whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "requires": {
- "iconv-lite": "0.4.24"
- }
- },
- "whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "whatwg-url": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
- "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
- "dev": true,
- "requires": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
- }
- },
- "word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true
- },
- "workerpool": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
- "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
- "dev": true
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "dev": true
- },
- "xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true
- },
- "yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "requires": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "dependencies": {
- "is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
- }
- }
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- }
- }
-}
\ No newline at end of file
diff --git a/plugins/keyboard-navigation/package.json b/plugins/keyboard-navigation/package.json
deleted file mode 100644
index 14cba18f45..0000000000
--- a/plugins/keyboard-navigation/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "name": "@blockly/keyboard-navigation",
- "version": "0.6.14",
- "description": "A Blockly plugin that adds keyboard navigation support.",
- "scripts": {
- "audit:fix": "blockly-scripts auditFix",
- "build": "blockly-scripts build",
- "clean": "blockly-scripts clean",
- "lint": "eslint .",
- "predeploy": "blockly-scripts predeploy",
- "start": "blockly-scripts start",
- "test": "blockly-scripts test"
- },
- "main": "./dist/index.js",
- "module": "./src/index.js",
- "unpkg": "./dist/index.js",
- "author": "Blockly Team",
- "keywords": [
- "blockly",
- "blockly-plugin",
- "keyboard-navigation"
- ],
- "homepage": "https://github.com/google/blockly-samples/tree/master/plugins/keyboard-navigation#readme",
- "bugs": {
- "url": "https://github.com/google/blockly-samples/issues"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/google/blockly-samples.git",
- "directory": "plugins/keyboard-navigation"
- },
- "license": "Apache-2.0",
- "directories": {
- "dist": "dist",
- "src": "src"
- },
- "files": [
- "dist",
- "src"
- ],
- "devDependencies": {
- "@blockly/dev-scripts": "^4.0.7",
- "@blockly/dev-tools": "^8.1.0",
- "chai": "^4.2.0",
- "jsdom": "^16.4.0",
- "jsdom-global": "^3.0.2",
- "mocha": "^10.7.0",
- "sinon": "^9.0.1"
- },
- "peerDependencies": {
- "blockly": "^11.0.0"
- },
- "publishConfig": {
- "access": "public",
- "registry": "https://wombat-dressing-room.appspot.com"
- },
- "engines": {
- "node": ">=8.17.0"
- }
-}
diff --git a/plugins/keyboard-navigation/src/constants.js b/plugins/keyboard-navigation/src/constants.js
deleted file mode 100644
index 187ad47dcf..0000000000
--- a/plugins/keyboard-navigation/src/constants.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Constants for keyboard navigation.
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-
-/**
- * Keyboard navigation states.
- * The different parts of Blockly that the user navigates between.
- * @enum {string}
- * @const
- * @public
- */
-export const STATE = {
- WORKSPACE: 'workspace',
- FLYOUT: 'flyout',
- TOOLBOX: 'toolbox',
-};
-
-/**
- * Default keyboard navigation shortcut names.
- * @enum {string}
- * @const
- * @public
- */
-export const SHORTCUT_NAMES = {
- PREVIOUS: 'previous',
- NEXT: 'next',
- IN: 'in',
- OUT: 'out',
- INSERT: 'insert',
- MARK: 'mark',
- DISCONNECT: 'disconnect',
- TOOLBOX: 'toolbox',
- EXIT: 'exit',
- TOGGLE_KEYBOARD_NAV: 'toggle_keyboard_nav',
- COPY: 'keyboard_nav_copy',
- CUT: 'keyboard_nav_cut',
- PASTE: 'keyboard_nav_paste',
- DELETE: 'keyboard_nav_delete',
- MOVE_WS_CURSOR_UP: 'workspace_up',
- MOVE_WS_CURSOR_DOWN: 'workspace_down',
- MOVE_WS_CURSOR_LEFT: 'workspace_left',
- MOVE_WS_CURSOR_RIGHT: 'workspace_right',
-};
-
-/**
- * Types of possible messages passed into the loggingCallback in the Navigation
- * class.
- * @enum {string}
- * @const
- * @public
- */
-export const LOGGING_MSG_TYPE = {
- ERROR: 'error',
- WARN: 'warn',
- LOG: 'log',
-};
diff --git a/plugins/keyboard-navigation/src/flyout_cursor.js b/plugins/keyboard-navigation/src/flyout_cursor.js
deleted file mode 100644
index 20cd17b957..0000000000
--- a/plugins/keyboard-navigation/src/flyout_cursor.js
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview The class representing a cursor used to navigate the flyout.
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-
-import * as Blockly from 'blockly/core';
-
-/**
- * Class for a flyout cursor.
- * This controls how a user navigates blocks in the flyout.
- * This cursor only allows a user to go to the previous or next stack.
- * @constructor
- * @extends {Blockly.Cursor}
- */
-export class FlyoutCursor extends Blockly.Cursor {
- /**
- * The constructor for the FlyoutCursor.
- */
- constructor() {
- super();
- }
-
- /**
- * Moves the cursor to the next stack of blocks in the flyout.
- * @returns {Blockly.ASTNode} The next element, or null if the current node is
- * not set or there is no next value.
- * @override
- */
- next() {
- const curNode = this.getCurNode();
- if (!curNode) {
- return null;
- }
- const newNode = curNode.next();
-
- if (newNode) {
- this.setCurNode(newNode);
- }
- return newNode;
- }
-
- /**
- * This is a no-op since a flyout cursor can not go in.
- * @returns {null} Always null.
- * @override
- */
- in() {
- return null;
- }
-
- /**
- * Moves the cursor to the previous stack of blocks in the flyout.
- * @returns {Blockly.ASTNode} The previous element, or null if the current
- * node is not set or there is no previous value.
- * @override
- */
- prev() {
- const curNode = this.getCurNode();
- if (!curNode) {
- return null;
- }
- const newNode = curNode.prev();
-
- if (newNode) {
- this.setCurNode(newNode);
- }
- return newNode;
- }
-
- /**
- * This is a no-op since a flyout cursor can not go out.
- * @returns {null} Always null.
- * @override
- */
- out() {
- return null;
- }
-}
-
-export const registrationType = Blockly.registry.Type.CURSOR;
-export const registrationName = 'FlyoutCursor';
-
-Blockly.registry.register(registrationType, registrationName, FlyoutCursor);
-
-export const pluginInfo = {
- [registrationType]: registrationName,
-};
diff --git a/plugins/keyboard-navigation/src/gesture_monkey_patch.js b/plugins/keyboard-navigation/src/gesture_monkey_patch.js
deleted file mode 100644
index ba5d6eb790..0000000000
--- a/plugins/keyboard-navigation/src/gesture_monkey_patch.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Overrides methods on Blockly.Gesture in order to allow users
- * to move the cursor to blocks or the workspace using shift click.
- * TODO(google/blockly#4584): We do not have a way to do this currently without
- * monkey patching Blockly.
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-
-import * as Blockly from 'blockly/core';
-
-const oldDoWorkspaceClick = Blockly.Gesture.prototype.doWorkspaceClick_;
-
-/**
- * Execute a workspace click. When in accessibility mode shift clicking will
- * move the cursor.
- * @param {!Event} e A mouse up or touch end event.
- * @this {Blockly.Gesture}
- * @override
- */
-Blockly.Gesture.prototype.doWorkspaceClick_ = function (e) {
- oldDoWorkspaceClick.call(this, e);
- const ws = this.creatorWorkspace_;
- if (e.shiftKey && ws.keyboardAccessibilityMode) {
- const screenCoord = new Blockly.utils.Coordinate(e.clientX, e.clientY);
- const wsCoord = Blockly.utils.svgMath.screenToWsCoordinates(
- ws,
- screenCoord,
- );
- const wsNode = Blockly.ASTNode.createWorkspaceNode(ws, wsCoord);
- ws.getCursor().setCurNode(wsNode);
- }
-};
-
-const oldDoBlockClick = Blockly.Gesture.prototype.doBlockClick_;
-
-/**
- * Execute a block click. When in accessibility mode shift clicking will move
- * the cursor to the block.
- * @this {Blockly.Gesture}
- * @override
- */
-Blockly.Gesture.prototype.doBlockClick_ = function (e) {
- oldDoBlockClick.call(this, e);
- if (
- !this.targetBlock_.isInFlyout &&
- this.mostRecentEvent_.shiftKey &&
- this.targetBlock_.workspace.keyboardAccessibilityMode
- ) {
- this.creatorWorkspace_
- .getCursor()
- .setCurNode(Blockly.ASTNode.createTopNode(this.targetBlock_));
- }
-};
diff --git a/plugins/keyboard-navigation/src/index.js b/plugins/keyboard-navigation/src/index.js
deleted file mode 100644
index 75ef7e0157..0000000000
--- a/plugins/keyboard-navigation/src/index.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-import * as Constants from '../src/constants';
-
-import {
- FlyoutCursor,
- pluginInfo as FlyoutCursorPluginInfo,
-} from './flyout_cursor';
-import {LineCursor, pluginInfo as LineCursorPluginInfo} from './line_cursor';
-import {Navigation} from './navigation';
-import {NavigationController} from './navigation_controller';
-
-export {
- Constants,
- FlyoutCursor,
- FlyoutCursorPluginInfo,
- LineCursor,
- LineCursorPluginInfo,
- Navigation,
- NavigationController,
-};
diff --git a/plugins/keyboard-navigation/src/line_cursor.js b/plugins/keyboard-navigation/src/line_cursor.js
deleted file mode 100644
index 8f1595b925..0000000000
--- a/plugins/keyboard-navigation/src/line_cursor.js
+++ /dev/null
@@ -1,190 +0,0 @@
-/**
- * @license
- * Copyright 2020 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview The class representing a line cursor.
- * A line cursor tries to traverse the blocks and connections on a block as if
- * they were lines of code in a text editor. Previous and next traverse previous
- * connections, next connections and blocks, while in and out traverse input
- * connections and fields.
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-
-import * as Blockly from 'blockly/core';
-
-/**
- * Class for a line cursor.
- * @constructor
- * @extends {Blockly.BasicCursor}
- */
-export class LineCursor extends Blockly.BasicCursor {
- /**
- * Constructor for a line cursor.
- */
- constructor() {
- super();
- }
-
- /**
- * Moves the cursor to the next previous connection, next connection or block
- * in the pre order traversal. Finds the next node in the pre order traversal.
- * @returns {Blockly.ASTNode} The next node, or null if the current node is
- * not set or there is no next value.
- * @override
- */
- next() {
- const curNode = this.getCurNode();
- if (!curNode) {
- return null;
- }
- let newNode = this.getNextNode_(curNode, this.validLineNode);
-
- // Skip the input or next value if there is a connected block.
- if (
- newNode &&
- (newNode.getType() == Blockly.ASTNode.types.INPUT ||
- newNode.getType() == Blockly.ASTNode.types.NEXT) &&
- newNode.getLocation().targetBlock()
- ) {
- newNode = this.getNextNode_(newNode, this.validLineNode);
- }
- if (newNode) {
- this.setCurNode(newNode);
- }
- return newNode;
- }
-
- /**
- * Moves the cursor to the next input connection or field
- * in the pre order traversal.
- * @returns {Blockly.ASTNode} The next node, or null if the current node is
- * not set or there is no next value.
- * @override
- */
- in() {
- const curNode = this.getCurNode();
- if (!curNode) {
- return null;
- }
- const newNode = this.getNextNode_(curNode, this.validInLineNode);
-
- if (newNode) {
- this.setCurNode(newNode);
- }
- return newNode;
- }
- /**
- * Moves the cursor to the previous next connection or previous connection in
- * the pre order traversal.
- * @returns {Blockly.ASTNode} The previous node, or null if the current node
- * is not set or there is no previous value.
- * @override
- */
- prev() {
- const curNode = this.getCurNode();
- if (!curNode) {
- return null;
- }
- let newNode = this.getPreviousNode_(curNode, this.validLineNode);
-
- if (
- newNode &&
- (newNode.getType() == Blockly.ASTNode.types.INPUT ||
- newNode.getType() == Blockly.ASTNode.types.NEXT) &&
- newNode.getLocation().targetBlock()
- ) {
- newNode = this.getPreviousNode_(newNode, this.validLineNode);
- }
-
- if (newNode) {
- this.setCurNode(newNode);
- }
- return newNode;
- }
- /**
- * Moves the cursor to the previous input connection or field in the pre order
- * traversal.
- * @returns {Blockly.ASTNode} The previous node, or null if the current node
- * is not set or there is no previous value.
- * @override
- */
- out() {
- const curNode = this.getCurNode();
- if (!curNode) {
- return null;
- }
- const newNode = this.getPreviousNode_(curNode, this.validInLineNode);
-
- if (newNode) {
- this.setCurNode(newNode);
- }
- return newNode;
- }
-
- /**
- * Decides if the previous and next methods should traverse the given node.
- * The previous and next method only traverse previous connections, next
- * connections and blocks.
- * @param {Blockly.ASTNode} node The AST node to check.
- * @returns {boolean} True if the node should be visited, false otherwise.
- * @protected
- */
- validLineNode(node) {
- if (!node) {
- return false;
- }
- let isValid = false;
- const location = node.getLocation();
- const type = node && node.getType();
- if (type == Blockly.ASTNode.types.BLOCK) {
- if (location.outputConnection === null) {
- isValid = true;
- }
- } else if (
- type == Blockly.ASTNode.types.INPUT &&
- location.type == Blockly.NEXT_STATEMENT
- ) {
- isValid = true;
- } else if (type == Blockly.ASTNode.types.NEXT) {
- isValid = true;
- }
- return isValid;
- }
-
- /**
- * Decides if the in and out methods should traverse the given node.
- * The in and out method only traverse fields and input connections.
- * @param {Blockly.ASTNode} node The AST node to check whether it is valid.
- * @returns {boolean} True if the node should be visited, false otherwise.
- * @protected
- */
- validInLineNode(node) {
- if (!node) {
- return false;
- }
- let isValid = false;
- const location = node.getLocation();
- const type = node && node.getType();
- if (type == Blockly.ASTNode.types.FIELD) {
- isValid = true;
- } else if (
- type == Blockly.ASTNode.types.INPUT &&
- location.type == Blockly.INPUT_VALUE
- ) {
- isValid = true;
- }
- return isValid;
- }
-}
-
-export const registrationName = 'LineCursor';
-export const registrationType = Blockly.registry.Type.CURSOR;
-
-Blockly.registry.register(registrationType, registrationName, LineCursor);
-
-export const pluginInfo = {
- [registrationType]: registrationName,
-};
diff --git a/plugins/keyboard-navigation/src/navigation.js b/plugins/keyboard-navigation/src/navigation.js
deleted file mode 100644
index 9fc285ba8d..0000000000
--- a/plugins/keyboard-navigation/src/navigation.js
+++ /dev/null
@@ -1,1287 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Holds all methods necessary to use Blockly through the
- * keyboard.
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-
-import * as Blockly from 'blockly/core';
-import * as Constants from './constants';
-import {
- registrationName as cursorRegistrationName,
- registrationType as cursorRegistrationType,
-} from './flyout_cursor';
-
-/**
- * Class that holds all methods necessary for keyboard navigation to work.
- */
-export class Navigation {
- /**
- * Constructor for keyboard navigation.
- */
- constructor() {
- /**
- * Object holding the location of the cursor for each workspace.
- * Possible locations of the cursor are: workspace, flyout or toolbox.
- * @type {Object}
- * @protected
- */
- this.workspaceStates = {};
-
- /**
- * An optional method that allows a developer to customize how to handle
- * logs, warnings, and errors. The first argument is one of 'log', 'warn',
- * or 'error'. The second argument is the message.
- * @type {?function(Constants.LOGGING_MSG_TYPE, string)}
- * @public
- */
- this.loggingCallback = null;
-
- /**
- * The distance to move the cursor when the cursor is on the workspace.
- * @type {number}
- * @public
- */
- this.WS_MOVE_DISTANCE = 40;
-
- /**
- * The name of the marker to use for keyboard navigation.
- * @type {string}
- * @public
- */
- this.MARKER_NAME = 'local_marker_1';
-
- /**
- * The default coordinate to use when focusing on the workspace and no
- * blocks are present. In pixel coordinates, but will be converted to
- * workspace coordinates when used to position the cursor.
- * @type {!Blockly.utils.Coordinate}
- * @public
- */
- this.DEFAULT_WS_COORDINATE = new Blockly.utils.Coordinate(100, 100);
-
- /**
- * The default coordinate to use when moving the cursor to the workspace
- * after a block has been deleted. In pixel coordinates, but will be
- * converted to workspace coordinates when used to position the cursor.
- * @type {!Blockly.utils.Coordinate}
- * @public
- */
- this.WS_COORDINATE_ON_DELETE = new Blockly.utils.Coordinate(100, 100);
-
- /**
- * Wrapper for method that deals with workspace changes.
- * Used for removing change listener.
- * @type {Function}
- * @protected
- */
- this.wsChangeWrapper = this.workspaceChangeListener.bind(this);
-
- /**
- * Wrapper for method that deals with flyout changes.
- * Used for removing change listener.
- * @type {Function}
- * @protected
- */
- this.flyoutChangeWrapper = this.flyoutChangeListener.bind(this);
-
- /**
- * The list of registered workspaces.
- * Used when removing change listeners in dispose.
- * @type {!Array}
- * @protected
- */
- this.workspaces = [];
- }
-
- /**
- * Adds all necessary change listeners and markers to a workspace for keyboard
- * navigation to work. This must be called for keyboard navigation to work
- * on a workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to add keyboard
- * navigation to.
- * @public
- */
- addWorkspace(workspace) {
- this.workspaces.push(workspace);
- const flyout = workspace.getFlyout();
- workspace
- .getMarkerManager()
- .registerMarker(this.MARKER_NAME, new Blockly.Marker());
- workspace.addChangeListener(this.wsChangeWrapper);
-
- if (flyout) {
- this.addFlyout(flyout);
- }
- }
-
- /**
- * Removes all keyboard navigation change listeners and markers.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to remove keyboard
- * navigation from.
- * @public
- */
- removeWorkspace(workspace) {
- const workspaceIdx = this.workspaces.indexOf(workspace);
- const flyout = workspace.getFlyout();
-
- if (workspace.getCursor()) {
- this.disableKeyboardAccessibility(workspace);
- }
-
- if (workspaceIdx > -1) {
- this.workspaces.splice(workspaceIdx, 1);
- }
- if (workspace.getMarkerManager()) {
- workspace.getMarkerManager().unregisterMarker(this.MARKER_NAME);
- }
- workspace.removeChangeListener(this.wsChangeWrapper);
-
- if (flyout) {
- this.removeFlyout(flyout);
- }
- }
-
- /**
- * Sets the state for the given workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to set the state on.
- * @param {!Constants.STATE} state The navigation state.
- * @protected
- */
- setState(workspace, state) {
- this.workspaceStates[workspace.id] = state;
- }
-
- /**
- * Gets the navigation state of the current workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to get the state of.
- * @returns {!Constants.STATE} The state of the given workspace.
- * @package
- */
- getState(workspace) {
- return this.workspaceStates[workspace.id];
- }
-
- /**
- * Gets the marker created for keyboard navigation.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to get the marker
- * from.
- * @returns {?Blockly.Marker} The marker created for keyboard navigation.
- * @protected
- */
- getMarker(workspace) {
- return workspace.getMarker(this.MARKER_NAME);
- }
-
- /**
- * Adds all event listeners and cursors to the flyout that are needed for
- * keyboard navigation to work.
- * @param {!Blockly.IFlyout} flyout The flyout to add a cursor and change
- * listeners to.
- * @protected
- */
- addFlyout(flyout) {
- const flyoutWorkspace = flyout.getWorkspace();
- flyoutWorkspace.addChangeListener(this.flyoutChangeWrapper);
- const FlyoutCursorClass = Blockly.registry.getClass(
- cursorRegistrationType,
- cursorRegistrationName,
- );
- flyoutWorkspace.getMarkerManager().setCursor(new FlyoutCursorClass());
- }
-
- /**
- * Removes all change listeners from the flyout that are needed for
- * keyboard navigation to work.
- * @param {!Blockly.IFlyout} flyout The flyout to add a cursor and event
- * listeners to.
- * @protected
- */
- removeFlyout(flyout) {
- const flyoutWorkspace = flyout.getWorkspace();
- flyoutWorkspace.removeChangeListener(this.flyoutChangeWrapper);
- }
-
- /**
- * Updates the state of keyboard navigation and the position of the cursor
- * based on workspace events.
- * @param {!Blockly.Events.Abstract} e The Blockly event to process.
- * @protected
- */
- workspaceChangeListener(e) {
- const workspace = Blockly.Workspace.getById(e.workspaceId);
- if (!workspace || !workspace.keyboardAccessibilityMode) {
- return;
- }
- switch (e.type) {
- case Blockly.Events.DELETE:
- this.handleBlockDeleteByDrag(workspace, e);
- break;
- case Blockly.Events.BLOCK_CHANGE:
- if (e.element === 'mutation') {
- this.handleBlockMutation(
- workspace,
- /** @type {Blockly.Events.BlockChange} */ (e),
- );
- }
- break;
- case Blockly.Events.CLICK:
- this.handleWorkspaceClick(
- workspace,
- /** @type {Blockly.Events.Click} */ (e),
- );
- break;
- case Blockly.Events.TOOLBOX_ITEM_SELECT:
- this.handleToolboxCategoryClick(
- workspace,
- /** @type {Blockly.Events.ToolboxItemSelect} */ (e),
- );
- break;
- case Blockly.Events.BLOCK_CREATE:
- this.handleBlockCreate(workspace, e);
- }
- }
-
- /**
- * Updates the state of keyboard navigation and the position of the cursor
- * based on events emitted from the flyout's workspace.
- * @param {!Blockly.Events.Abstract} e The Blockly event to process.
- * @protected
- */
- flyoutChangeListener(e) {
- const flyoutWorkspace = Blockly.Workspace.getById(e.workspaceId);
- const mainWorkspace = flyoutWorkspace.targetWorkspace;
- const flyout = mainWorkspace.getFlyout();
-
- // This is called for simple toolboxes and for toolboxes that have a flyout
- // that does not close. Autoclosing flyouts close before we need to focus
- // the cursor on the block that was clicked.
- if (
- mainWorkspace &&
- mainWorkspace.keyboardAccessibilityMode &&
- !flyout.autoClose
- ) {
- if (e.type === Blockly.Events.CLICK && e.targetType === 'block') {
- const block = flyoutWorkspace.getBlockById(e.blockId);
- this.handleBlockClickInFlyout(mainWorkspace, block);
- } else if (e.type === Blockly.Events.SELECTED) {
- const block = flyoutWorkspace.getBlockById(e.newElementId);
- this.handleBlockClickInFlyout(mainWorkspace, block);
- }
- }
- }
-
- /**
- * Moves the cursor to the workspace if a block has been dragged from a simple
- * toolbox. For a category toolbox this is handled in
- * handleToolboxCategoryClick_.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor belongs
- * to.
- * @param {!Blockly.Events.Abstract} e The Blockly event to process.
- * @protected
- */
- handleBlockCreate(workspace, e) {
- if (this.getState(workspace) === Constants.STATE.FLYOUT) {
- this.resetFlyout(workspace, !!workspace.getToolbox());
- this.setState(workspace, Constants.STATE.WORKSPACE);
- }
- }
-
- /**
- * Moves the cursor to the block level when the block the cursor is on
- * mutates.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor belongs
- * to.
- * @param {!Blockly.Events.BlockChange} e The Blockly event to process.
- * @protected
- */
- handleBlockMutation(workspace, e) {
- const mutatedBlockId = e.blockId;
- const cursor = workspace.getCursor();
- if (cursor) {
- const curNode = cursor.getCurNode();
- const block = curNode ? curNode.getSourceBlock() : null;
- if (block && block.id === mutatedBlockId) {
- cursor.setCurNode(Blockly.ASTNode.createBlockNode(block));
- }
- }
- }
-
- /**
- * Moves the cursor to the workspace when a user clicks on the workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor belongs
- * to.
- * @param {!Blockly.Events.Click} e The Blockly event to process.
- * @protected
- */
- handleWorkspaceClick(workspace, e) {
- const workspaceState = this.getState(workspace);
- if (workspaceState !== Constants.STATE.WORKSPACE) {
- this.resetFlyout(workspace, !!workspace.getToolbox());
- this.setState(workspace, Constants.STATE.WORKSPACE);
- }
- }
-
- /**
- * Moves the cursor to the toolbox when a user clicks on a toolbox category.
- * Moves the cursor to the workspace if theh user closes the toolbox category.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the toolbox is on.
- * @param {!Blockly.Events.ToolboxItemSelect} e The event emitted from the
- * workspace.
- * @protected
- */
- handleToolboxCategoryClick(workspace, e) {
- const workspaceState = this.getState(workspace);
- if (e.newItem && workspaceState !== Constants.STATE.TOOLBOX) {
- // If the toolbox category was just clicked, focus on the toolbox.
- this.focusToolbox(workspace);
- } else if (!e.newItem) {
- // If the toolbox was closed, focus on the workspace.
- this.resetFlyout(workspace, !!workspace.getToolbox());
- this.setState(workspace, Constants.STATE.WORKSPACE);
- }
- }
-
- /**
- * Moves the cursor to the workspace when its parent block is deleted by
- * being dragged to the flyout or to the trashcan.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the block was on.
- * @param {!Blockly.Events.Delete} e The event emitted when a block is
- * deleted.
- * @protected
- */
- handleBlockDeleteByDrag(workspace, e) {
- const deletedBlockId = e.blockId;
- const ids = e.ids;
- const cursor = workspace.getCursor();
-
- // Make sure the cursor is on a block.
- if (
- !cursor ||
- !cursor.getCurNode() ||
- !cursor.getCurNode().getSourceBlock()
- ) {
- return;
- }
-
- const curNode = cursor.getCurNode();
- const sourceBlock = curNode.getSourceBlock();
- if (sourceBlock.id === deletedBlockId || ids.indexOf(sourceBlock.id) > -1) {
- cursor.setCurNode(
- Blockly.ASTNode.createWorkspaceNode(
- workspace,
- this.WS_COORDINATE_ON_DELETE,
- ),
- );
- }
- }
-
- /**
- * Handles when a user clicks on a block in the flyout by moving the cursor
- * to that stack of blocks and setting the state of navigation to the flyout.
- * @param {!Blockly.WorkspaceSvg} mainWorkspace The workspace the user clicked
- * on.
- * @param {!Blockly.BlockSvg} block The block the user clicked on.
- * @protected
- */
- handleBlockClickInFlyout(mainWorkspace, block) {
- if (!block) {
- return;
- }
- if (block.isShadow()) {
- block = /** @type {Blockly.BlockSvg}*/ (block.getParent());
- }
- this.getFlyoutCursor(mainWorkspace).setCurNode(
- Blockly.ASTNode.createStackNode(block),
- );
- this.setState(mainWorkspace, Constants.STATE.FLYOUT);
- }
-
- /**
- * Moves the cursor to the appropriate location before a block is deleted.
- * This is used when the user deletes a block using the delete or backspace
- * key.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the block is being
- * deleted on.
- * @param {!Blockly.BlockSvg} deletedBlock The block that is being deleted.
- * @package
- */
- moveCursorOnBlockDelete(workspace, deletedBlock) {
- if (!workspace || !workspace.getCursor()) {
- return;
- }
- const cursor = workspace.getCursor();
- const curNode = cursor.getCurNode();
- const block = curNode ? curNode.getSourceBlock() : null;
-
- if (block === deletedBlock) {
- // If the block has a parent move the cursor to their connection point.
- if (block.getParent()) {
- const topConnection =
- block.previousConnection || block.outputConnection;
- if (topConnection) {
- cursor.setCurNode(
- Blockly.ASTNode.createConnectionNode(
- topConnection.targetConnection,
- ),
- );
- }
- } else {
- // If the block is by itself move the cursor to the workspace.
- cursor.setCurNode(
- Blockly.ASTNode.createWorkspaceNode(
- block.workspace,
- block.getRelativeToSurfaceXY(),
- ),
- );
- }
- // If the cursor is on a block whose parent is being deleted, move the
- // cursor to the workspace.
- } else if (block && deletedBlock.getChildren(false).indexOf(block) > -1) {
- cursor.setCurNode(
- Blockly.ASTNode.createWorkspaceNode(
- block.workspace,
- block.getRelativeToSurfaceXY(),
- ),
- );
- }
- }
-
- /**
- * Sets the navigation state to toolbox and selects the first category in the
- * toolbox. No-op if a toolbox does not exist on the given workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to get the toolbox
- * on.
- * @package
- */
- focusToolbox(workspace) {
- const toolbox = workspace.getToolbox();
- if (!toolbox) {
- return;
- }
-
- this.setState(workspace, Constants.STATE.TOOLBOX);
- this.resetFlyout(workspace, false /* shouldHide */);
-
- if (!this.getMarker(workspace).getCurNode()) {
- this.markAtCursor(workspace);
- }
-
- if (!toolbox.getSelectedItem()) {
- // Find the first item that is selectable.
- const toolboxItems = toolbox.getToolboxItems();
- for (let i = 0, toolboxItem; (toolboxItem = toolboxItems[i]); i++) {
- if (toolboxItem.isSelectable()) {
- toolbox.selectItemByPosition(i);
- break;
- }
- }
- }
- }
-
- /**
- * Sets the navigation state to flyout and moves the cursor to the first
- * block or button in the flyout.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the flyout is on.
- * @package
- */
- focusFlyout(workspace) {
- const flyout = workspace.getFlyout();
-
- this.setState(workspace, Constants.STATE.FLYOUT);
-
- if (!this.getMarker(workspace).getCurNode()) {
- this.markAtCursor(workspace);
- }
-
- if (flyout && flyout.getWorkspace()) {
- const flyoutContents = flyout.getContents();
- const firstFlyoutItem = flyoutContents[0];
- if (!firstFlyoutItem) return;
- if (firstFlyoutItem.button) {
- const astNode = Blockly.ASTNode.createButtonNode(
- firstFlyoutItem.button,
- );
- this.getFlyoutCursor(workspace).setCurNode(astNode);
- } else if (firstFlyoutItem.block) {
- const astNode = Blockly.ASTNode.createStackNode(firstFlyoutItem.block);
- this.getFlyoutCursor(workspace).setCurNode(astNode);
- }
- }
- }
-
- /**
- * Sets the navigation state to workspace and moves the cursor to either the
- * top block on a workspace or to the workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to focus on.
- * @package
- */
- focusWorkspace(workspace) {
- workspace.hideChaff();
- const reset = !!workspace.getToolbox();
-
- this.resetFlyout(workspace, reset);
- this.setState(workspace, Constants.STATE.WORKSPACE);
- this.setCursorOnWorkspaceFocus(workspace);
- }
-
- /**
- * Moves the cursor to the top connection point on on the first top block.
- * If the workspace is empty, moves the cursor to the default location on
- * the workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The main Blockly workspace.
- * @protected
- */
- setCursorOnWorkspaceFocus(workspace) {
- const topBlocks = workspace.getTopBlocks(true);
- const cursor = workspace.getCursor();
- const wsCoordinates = new Blockly.utils.Coordinate(
- this.DEFAULT_WS_COORDINATE.x / workspace.scale,
- this.DEFAULT_WS_COORDINATE.y / workspace.scale,
- );
- if (topBlocks.length > 0) {
- cursor.setCurNode(Blockly.ASTNode.createTopNode(topBlocks[0]));
- } else {
- const wsNode = Blockly.ASTNode.createWorkspaceNode(
- workspace,
- wsCoordinates,
- );
- cursor.setCurNode(wsNode);
- }
- }
-
- /**
- * Gets the cursor on the flyout's workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The main workspace the flyout is
- * on.
- * @returns {?Blockly.FlyoutCursor} The flyout's cursor or null if no flyout
- * exists.
- * @protected
- */
- getFlyoutCursor(workspace) {
- const flyout = workspace.getFlyout();
- const cursor = flyout ? flyout.getWorkspace().getCursor() : null;
-
- return /** @type {?Blockly.FlyoutCursor} */ (cursor);
- }
-
- /**
- * Inserts a block from the flyout.
- * Tries to find a connection on the block to connect to the marked
- * location. If no connection has been marked, or there is not a compatible
- * connection then the block is placed on the workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The main workspace. The workspace
- * the block will be placed on.
- * @package
- */
- insertFromFlyout(workspace) {
- const newBlock = this.createNewBlock(workspace);
- if (!newBlock) {
- return;
- }
- const markerNode = this.getMarker(workspace).getCurNode();
- if (
- !this.tryToConnectMarkerAndCursor(
- workspace,
- markerNode,
- Blockly.ASTNode.createBlockNode(newBlock),
- )
- ) {
- this.warn(
- 'Something went wrong while inserting a block from the flyout.',
- );
- }
-
- this.focusWorkspace(workspace);
- workspace.getCursor().setCurNode(Blockly.ASTNode.createTopNode(newBlock));
- this.removeMark(workspace);
- }
-
- /**
- * Creates a new block based on the current block the flyout cursor is on.
- * @param {!Blockly.WorkspaceSvg} workspace The main workspace. The workspace
- * the block will be placed on.
- * @returns {?Blockly.BlockSvg} The newly created block.
- * @protected
- */
- createNewBlock(workspace) {
- const flyout = workspace.getFlyout();
- if (!flyout || !flyout.isVisible()) {
- this.warn(
- 'Trying to insert from the flyout when the flyout does not ' +
- ' exist or is not visible',
- );
- return null;
- }
-
- const curBlock = /** @type {!Blockly.BlockSvg} */ (
- this.getFlyoutCursor(workspace).getCurNode().getLocation()
- );
- if (!curBlock.isEnabled()) {
- this.warn("Can't insert a disabled block.");
- return null;
- }
-
- const newBlock = flyout.createBlock(curBlock);
- // Render to get the sizing right.
- newBlock.render();
- // Connections are not tracked when the block is first created. Normally
- // there's enough time for them to become tracked in the user's mouse
- // movements, but not here.
- newBlock.setConnectionTracking(true);
- return newBlock;
- }
-
- /**
- * Hides the flyout cursor and optionally hides the flyout.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace.
- * @param {boolean} shouldHide True if the flyout should be hidden.
- * @protected
- */
- resetFlyout(workspace, shouldHide) {
- if (this.getFlyoutCursor(workspace)) {
- this.getFlyoutCursor(workspace).hide();
- if (shouldHide) {
- workspace.getFlyout().hide();
- }
- }
- }
-
- /**
- * Connects the location of the marker and the location of the cursor.
- * No-op if the marker or cursor node are null.
- * @param {!Blockly.WorkspaceSvg} workspace The main workspace.
- * @returns {boolean} True if the cursor and marker locations were connected,
- * false otherwise.
- * @package
- */
- connectMarkerAndCursor(workspace) {
- const markerNode = this.getMarker(workspace).getCurNode();
- const cursorNode = workspace.getCursor().getCurNode();
-
- if (markerNode && cursorNode) {
- return this.tryToConnectMarkerAndCursor(
- workspace,
- markerNode,
- cursorNode,
- );
- }
- return false;
- }
-
- /**
- * Tries to connect the given marker and cursor node.
- * @param {!Blockly.WorkspaceSvg} workspace The main workspace.
- * @param {!Blockly.ASTNode} markerNode The node to try to connect to.
- * @param {!Blockly.ASTNode} cursorNode The node to connect to the markerNode.
- * @returns {boolean} True if the key was handled; false if something went
- * wrong.
- * @protected
- */
- tryToConnectMarkerAndCursor(workspace, markerNode, cursorNode) {
- if (!this.logConnectionWarning(markerNode, cursorNode)) {
- return false;
- }
-
- const markerType = markerNode.getType();
- const cursorType = cursorNode.getType();
-
- const cursorLoc = cursorNode.getLocation();
- const markerLoc = markerNode.getLocation();
- if (markerNode.isConnection() && cursorNode.isConnection()) {
- const cursorConnection = /** @type {!Blockly.RenderedConnection} */ (
- cursorLoc
- );
- const markerConnection = /** @type {!Blockly.RenderedConnection} */ (
- markerLoc
- );
- return this.connect(cursorConnection, markerConnection);
- } else if (
- markerNode.isConnection() &&
- (cursorType == Blockly.ASTNode.types.BLOCK ||
- cursorType == Blockly.ASTNode.types.STACK)
- ) {
- const cursorBlock = /** @type {!Blockly.BlockSvg} */ (cursorLoc);
- const markerConnection = /** @type {!Blockly.RenderedConnection} */ (
- markerLoc
- );
- return this.insertBlock(cursorBlock, markerConnection);
- } else if (markerType == Blockly.ASTNode.types.WORKSPACE) {
- const block = cursorNode ? cursorNode.getSourceBlock() : null;
- return this.moveBlockToWorkspace(
- /** @type {Blockly.BlockSvg} */ (block),
- markerNode,
- );
- }
- this.warn('Unexpected state in tryToConnectMarkerAndCursor.');
- return false;
- }
-
- /**
- * Warns the user if the given cursor or marker node can not be connected.
- * @param {!Blockly.ASTNode} markerNode The node to try to connect to.
- * @param {!Blockly.ASTNode} cursorNode The node to connect to the markerNode.
- * @returns {boolean} True if the marker and cursor are valid types, false
- * otherwise.
- * @protected
- */
- logConnectionWarning(markerNode, cursorNode) {
- if (!markerNode) {
- this.warn('Cannot insert with no marked node.');
- return false;
- }
-
- if (!cursorNode) {
- this.warn('Cannot insert with no cursor node.');
- return false;
- }
- const markerType = markerNode.getType();
- const cursorType = cursorNode.getType();
-
- // Check the marker for invalid types.
- if (markerType == Blockly.ASTNode.types.FIELD) {
- this.warn('Should not have been able to mark a field.');
- return false;
- } else if (markerType == Blockly.ASTNode.types.BLOCK) {
- this.warn('Should not have been able to mark a block.');
- return false;
- } else if (markerType == Blockly.ASTNode.types.STACK) {
- this.warn('Should not have been able to mark a stack.');
- return false;
- }
-
- // Check the cursor for invalid types.
- if (cursorType == Blockly.ASTNode.types.FIELD) {
- this.warn('Cannot attach a field to anything else.');
- return false;
- } else if (cursorType == Blockly.ASTNode.types.WORKSPACE) {
- this.warn('Cannot attach a workspace to anything else.');
- return false;
- }
- return true;
- }
-
- /**
- * Disconnects the block from its parent and moves it to the position of the
- * workspace node.
- * @param {?Blockly.BlockSvg} block The block to be moved to the workspace.
- * @param {!Blockly.ASTNode} wsNode The workspace node holding the position
- * the block will be moved to.
- * @returns {boolean} True if the block can be moved to the workspace,
- * false otherwise.
- * @protected
- */
- moveBlockToWorkspace(block, wsNode) {
- if (!block) {
- return false;
- }
- if (block.isShadow()) {
- this.warn('Cannot move a shadow block to the workspace.');
- return false;
- }
- if (block.getParent()) {
- block.unplug(false);
- }
- block.moveTo(wsNode.getWsCoordinate());
- return true;
- }
-
- /**
- * Disconnects the child block from its parent block. No-op if the two given
- * connections are unrelated.
- * @param {!Blockly.RenderedConnection} movingConnection The connection that
- * is being moved.
- * @param {!Blockly.RenderedConnection} destConnection The connection to be
- * moved to.
- * @protected
- */
- disconnectChild(movingConnection, destConnection) {
- const movingBlock = movingConnection.getSourceBlock();
- const destBlock = destConnection.getSourceBlock();
- let inferiorConnection;
-
- if (movingBlock.getRootBlock() === destBlock.getRootBlock()) {
- if (movingBlock.getDescendants(false).indexOf(destBlock) > -1) {
- inferiorConnection = this.getInferiorConnection(destConnection);
- if (inferiorConnection) {
- inferiorConnection.disconnect();
- }
- } else {
- inferiorConnection = this.getInferiorConnection(movingConnection);
- if (inferiorConnection) {
- inferiorConnection.disconnect();
- }
- }
- }
- }
-
- /**
- * Tries to connect the given connections.
- *
- * If the given connections are not compatible try finding compatible
- * connections on the source blocks of the given connections.
- * @param {?Blockly.RenderedConnection} movingConnection The connection that
- * is being moved.
- * @param {?Blockly.RenderedConnection} destConnection The connection to be
- * moved to.
- * @returns {boolean} True if the two connections or their target connections
- * were connected, false otherwise.
- * @protected
- */
- connect(movingConnection, destConnection) {
- if (!movingConnection || !destConnection) {
- return false;
- }
-
- const movingInferior = this.getInferiorConnection(movingConnection);
- const destSuperior = this.getSuperiorConnection(destConnection);
-
- const movingSuperior = this.getSuperiorConnection(movingConnection);
- const destInferior = this.getInferiorConnection(destConnection);
-
- if (
- movingInferior &&
- destSuperior &&
- this.moveAndConnect(movingInferior, destSuperior)
- ) {
- return true;
- // Try swapping the inferior and superior connections on the blocks.
- } else if (
- movingSuperior &&
- destInferior &&
- this.moveAndConnect(movingSuperior, destInferior)
- ) {
- return true;
- } else if (this.moveAndConnect(movingConnection, destConnection)) {
- return true;
- } else {
- const checker = movingConnection.getConnectionChecker();
- const reason = checker.canConnectWithReason(
- movingConnection,
- destConnection,
- false,
- );
- this.warn(
- 'Connection failed with error: ' +
- checker.getErrorMessage(reason, movingConnection, destConnection),
- );
- return false;
- }
- }
-
- /**
- * Finds the inferior connection on the source block if the given connection
- * is superior.
- * @param {?Blockly.RenderedConnection} connection The connection trying to be
- * connected.
- * @returns {?Blockly.RenderedConnection} The inferior connection or null if
- * none exists.
- * @protected
- */
- getInferiorConnection(connection) {
- const block = /** @type{!Blockly.BlockSvg} */ (connection.getSourceBlock());
- if (!connection.isSuperior()) {
- return connection;
- } else if (block.previousConnection) {
- return block.previousConnection;
- } else if (block.outputConnection) {
- return block.outputConnection;
- } else {
- return null;
- }
- }
-
- /**
- * Finds a superior connection on the source block if the given connection is
- * inferior.
- * @param {?Blockly.RenderedConnection} connection The connection trying to be
- * connected.
- * @returns {?Blockly.RenderedConnection} The superior connection or null if
- * none exists.
- * @protected
- */
- getSuperiorConnection(connection) {
- if (connection.isSuperior()) {
- return connection;
- } else if (connection.targetConnection) {
- return connection.targetConnection;
- }
- return null;
- }
-
- /**
- * Moves the moving connection to the target connection and connects them.
- * @param {?Blockly.RenderedConnection} movingConnection The connection that
- * is being moved.
- * @param {?Blockly.RenderedConnection} destConnection The connection to be
- * moved to.
- * @returns {boolean} True if the connections were connected, false otherwise.
- * @protected
- */
- moveAndConnect(movingConnection, destConnection) {
- if (!movingConnection || !destConnection) {
- return false;
- }
- const movingBlock = movingConnection.getSourceBlock();
- const checker = movingConnection.getConnectionChecker();
-
- if (
- checker.canConnect(movingConnection, destConnection, false) &&
- !destConnection.getSourceBlock().isShadow()
- ) {
- this.disconnectChild(movingConnection, destConnection);
-
- // Position the root block near the connection so it does not move the
- // other block when they are connected.
- if (!destConnection.isSuperior()) {
- const rootBlock = movingBlock.getRootBlock();
-
- const originalOffsetToTarget = {
- x: destConnection.x - movingConnection.x,
- y: destConnection.y - movingConnection.y,
- };
- const originalOffsetInBlock = movingConnection
- .getOffsetInBlock()
- .clone();
- rootBlock.positionNearConnection(
- movingConnection,
- originalOffsetToTarget,
- originalOffsetInBlock,
- );
- }
- destConnection.connect(movingConnection);
- return true;
- }
- return false;
- }
-
- /**
- * Tries to connect the given block to the destination connection, making an
- * intelligent guess about which connection to use on the moving block.
- * @param {!Blockly.BlockSvg} block The block to move.
- * @param {!Blockly.RenderedConnection} destConnection The connection to
- * connect to.
- * @returns {boolean} Whether the connection was successful.
- * @protected
- */
- insertBlock(block, destConnection) {
- switch (destConnection.type) {
- case Blockly.PREVIOUS_STATEMENT:
- if (this.connect(block.nextConnection, destConnection)) {
- return true;
- }
- break;
- case Blockly.NEXT_STATEMENT:
- if (this.connect(block.previousConnection, destConnection)) {
- return true;
- }
- break;
- case Blockly.INPUT_VALUE:
- if (this.connect(block.outputConnection, destConnection)) {
- return true;
- }
- break;
- case Blockly.OUTPUT_VALUE:
- for (let i = 0; i < block.inputList.length; i++) {
- const inputConnection = /** @type {Blockly.RenderedConnection} */ (
- block.inputList[i].connection
- );
- if (
- inputConnection &&
- inputConnection.type === Blockly.INPUT_VALUE &&
- this.connect(inputConnection, destConnection)
- ) {
- return true;
- }
- }
- // If there are no input values pass the output and destination
- // connections to connect_ to find a way to connect the two.
- if (
- block.outputConnection &&
- this.connect(block.outputConnection, destConnection)
- ) {
- return true;
- }
- break;
- }
- this.warn('This block can not be inserted at the marked location.');
- return false;
- }
-
- /**
- * Disconnects the connection that the cursor is pointing to, and bump blocks.
- * This is a no-op if the connection cannot be broken or if the cursor is not
- * pointing to a connection.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace.
- * @package
- */
- disconnectBlocks(workspace) {
- const curNode = workspace.getCursor().getCurNode();
- if (!curNode.isConnection()) {
- this.log(
- 'Cannot disconnect blocks when the cursor is not on a connection',
- );
- return;
- }
- const curConnection = /** @type {!Blockly.RenderedConnection} */ (
- curNode.getLocation()
- );
- if (!curConnection.isConnected()) {
- this.log('Cannot disconnect unconnected connection');
- return;
- }
- const superiorConnection = curConnection.isSuperior()
- ? curConnection
- : curConnection.targetConnection;
-
- const inferiorConnection = curConnection.isSuperior()
- ? curConnection.targetConnection
- : curConnection;
-
- if (inferiorConnection.getSourceBlock().isShadow()) {
- this.log('Cannot disconnect a shadow block');
- return;
- }
- superiorConnection.disconnect();
- inferiorConnection.bumpAwayFrom(superiorConnection);
-
- const rootBlock = superiorConnection.getSourceBlock().getRootBlock();
- rootBlock.bringToFront();
-
- const connectionNode =
- Blockly.ASTNode.createConnectionNode(superiorConnection);
- workspace.getCursor().setCurNode(connectionNode);
- }
-
- /**
- * Moves the marker to the cursor's current location.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace.
- * @protected
- */
- markAtCursor(workspace) {
- this.getMarker(workspace).setCurNode(workspace.getCursor().getCurNode());
- }
-
- /**
- * Removes the marker from its current location and hide it.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace.
- * @protected
- */
- removeMark(workspace) {
- const marker = this.getMarker(workspace);
- marker.setCurNode(null);
- marker.hide();
- }
-
- /**
- * Enables accessibility mode.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to enable keyboard
- * accessibility mode on.
- * @package
- */
- enableKeyboardAccessibility(workspace) {
- if (
- this.workspaces.indexOf(workspace) > -1 &&
- !workspace.keyboardAccessibilityMode
- ) {
- workspace.keyboardAccessibilityMode = true;
- this.focusWorkspace(workspace);
- }
- }
-
- /**
- * Disables accessibility mode.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to disable keyboard
- * accessibility mode on.
- * @package
- */
- disableKeyboardAccessibility(workspace) {
- if (
- this.workspaces.indexOf(workspace) > -1 &&
- workspace.keyboardAccessibilityMode
- ) {
- workspace.keyboardAccessibilityMode = false;
- workspace.getCursor().hide();
- this.getMarker(workspace).hide();
- if (this.getFlyoutCursor(workspace)) {
- this.getFlyoutCursor(workspace).hide();
- }
- }
- }
-
- /**
- * Navigation log handler. If loggingCallback is defined, use it.
- * Otherwise just log to the console.log.
- * @param {string} msg The message to log.
- * @protected
- */
- log(msg) {
- if (this.loggingCallback) {
- this.loggingCallback(Constants.LOGGING_MSG_TYPE.LOG, msg);
- } else {
- console.log(msg);
- }
- }
-
- /**
- * Navigation warning handler. If loggingCallback is defined, use it.
- * Otherwise call console.warn.
- * @param {string} msg The warning message.
- * @protected
- */
- warn(msg) {
- if (this.loggingCallback) {
- this.loggingCallback(Constants.LOGGING_MSG_TYPE.WARN, msg);
- } else {
- console.warn(msg);
- }
- }
-
- /**
- * Navigation error handler. If loggingCallback is defined, use it.
- * Otherwise call console.error.
- * @param {string} msg The error message.
- * @protected
- */
- error(msg) {
- if (this.loggingCallback) {
- this.loggingCallback(Constants.LOGGING_MSG_TYPE.ERROR, msg);
- } else {
- console.error(msg);
- }
- }
-
- /**
- * Moves the workspace cursor in the given direction.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace the cursor is on.
- * @param {number} xDirection -1 to move cursor left. 1 to move cursor right.
- * @param {number} yDirection -1 to move cursor up. 1 to move cursor down.
- * @returns {boolean} True if the current node is a workspace, false
- * otherwise.
- * @package
- */
- moveWSCursor(workspace, xDirection, yDirection) {
- const cursor = workspace.getCursor();
- const curNode = workspace.getCursor().getCurNode();
-
- if (curNode.getType() !== Blockly.ASTNode.types.WORKSPACE) {
- return false;
- }
-
- const wsCoord = curNode.getWsCoordinate();
- const newX = xDirection * this.WS_MOVE_DISTANCE + wsCoord.x;
- const newY = yDirection * this.WS_MOVE_DISTANCE + wsCoord.y;
-
- cursor.setCurNode(
- Blockly.ASTNode.createWorkspaceNode(
- workspace,
- new Blockly.utils.Coordinate(newX, newY),
- ),
- );
- return true;
- }
-
- /**
- * Handles hitting the enter key on the workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace.
- * @package
- */
- handleEnterForWS(workspace) {
- const cursor = workspace.getCursor();
- const curNode = cursor.getCurNode();
- const nodeType = curNode.getType();
- if (nodeType == Blockly.ASTNode.types.FIELD) {
- /** @type {!Blockly.Field} */ (curNode.getLocation()).showEditor();
- } else if (
- curNode.isConnection() ||
- nodeType == Blockly.ASTNode.types.WORKSPACE
- ) {
- this.markAtCursor(workspace);
- } else if (nodeType == Blockly.ASTNode.types.BLOCK) {
- this.warn('Cannot mark a block.');
- } else if (nodeType == Blockly.ASTNode.types.STACK) {
- this.warn('Cannot mark a stack.');
- }
- }
-
- /**
- * Pastes the copied block to the marked location.
- * @param {Blockly.BlockCopyData} copyData The data
- * to paste into the workspace.
- * @param {Blockly.WorkspaceSvg} workspace The workspace to paste the data
- * into.
- * @returns {boolean} True if the paste was sucessful, false otherwise.
- * @package
- */
- paste(copyData, workspace) {
- let isHandled = false;
- Blockly.Events.setGroup(true);
- const block = /** @type {Blockly.BlockSvg} */ (
- Blockly.clipboard.paste(copyData, workspace)
- );
- if (block) {
- isHandled = this.insertPastedBlock(workspace, block);
- }
- Blockly.Events.setGroup(false);
- return isHandled;
- }
-
- /**
- * Inserts the pasted block at the marked location if a compatible connection
- * exists. If no connection has been marked, or there is not a compatible
- * connection then the block is placed on the workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to paste the block
- * on.
- * @param {!Blockly.BlockSvg} block The block to paste.
- * @returns {boolean} True if the block was pasted to the workspace, false
- * otherwise.
- * @protected
- */
- insertPastedBlock(workspace, block) {
- let isHandled = false;
- const markedNode = workspace.getMarker(this.MARKER_NAME).getCurNode();
- if (markedNode) {
- isHandled = this.tryToConnectMarkerAndCursor(
- workspace,
- markedNode,
- Blockly.ASTNode.createBlockNode(block),
- );
- }
- return isHandled;
- }
-
- /**
- * Triggers a flyout button's callback.
- * @param {!Blockly.WorkspaceSvg} workspace The main workspace. The workspace
- * containing a flyout with a button.
- * @package
- */
- triggerButtonCallback(workspace) {
- const button = /** @type {!Blockly.FlyoutButton} */ (
- this.getFlyoutCursor(workspace).getCurNode().getLocation()
- );
- const buttonCallback = workspace.flyoutButtonCallbacks.get(
- button.callbackKey,
- );
- if (typeof buttonCallback === 'function') {
- buttonCallback(button);
- } else {
- throw new Error('No callback function found for flyout button.');
- }
- }
-
- /**
- * Removes the change listeners on all registered workspaces.
- * @package
- */
- dispose() {
- for (const workspace of this.workspaces) {
- this.removeWorkspace(workspace);
- }
- }
-}
diff --git a/plugins/keyboard-navigation/src/navigation_controller.js b/plugins/keyboard-navigation/src/navigation_controller.js
deleted file mode 100644
index 8f3820a906..0000000000
--- a/plugins/keyboard-navigation/src/navigation_controller.js
+++ /dev/null
@@ -1,1020 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Registers all of the keyboard shortcuts that are necessary for
- * navigating blockly using the keyboard.
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-
-import './gesture_monkey_patch';
-
-import * as Blockly from 'blockly/core';
-
-import * as Constants from './constants';
-import {Navigation} from './navigation';
-
-/**
- * Class for registering shortcuts for keyboard navigation.
- */
-export class NavigationController {
- /** Data copied by the copy or cut keyboard shortcuts. */
- copyData = null;
-
- /** The workspace a copy or cut keyboard shortcut happened in. */
- copyWorkspace = null;
-
- /**
- * Constructor used for registering shortcuts.
- * This will register any default shortcuts for keyboard navigation.
- * This is intended to be a singleton.
- * @param {!Navigation=} optNavigation The class that handles keyboard
- * navigation shortcuts. (Ex: inserting a block, focusing the flyout).
- */
- constructor(optNavigation) {
- /**
- * Handles any keyboard navigation shortcuts.
- * @type {!Navigation}
- * @public
- */
- this.navigation = optNavigation || new Navigation();
- }
-
- /**
- * Registers the default keyboard shortcuts for keyboard navigation.
- * @public
- */
- init() {
- this.addShortcutHandlers();
- this.registerDefaults();
- }
-
- /**
- * Adds methods to core Blockly components that allows them to handle keyboard
- * shortcuts when in keyboard navigation mode.
- * @protected
- */
- addShortcutHandlers() {
- if (Blockly.FieldDropdown) {
- Blockly.FieldDropdown.prototype.onShortcut = this.fieldDropdownHandler;
- }
-
- if (Blockly.Toolbox) {
- Blockly.Toolbox.prototype.onShortcut = this.toolboxHandler;
- }
- }
-
- /**
- * Removes methods on core Blockly components that allows them to handle
- * keyboard shortcuts.
- * @protected
- */
- removeShortcutHandlers() {
- if (Blockly.FieldDropdown) {
- Blockly.FieldDropdown.prototype.onShortcut = null;
- }
-
- if (Blockly.Toolbox) {
- Blockly.Toolbox.prototype.onShortcut = null;
- }
- }
-
- /**
- * Handles the given keyboard shortcut.
- * This is only triggered when keyboard accessibility mode is enabled.
- * @param {!Blockly.ShortcutRegistry.KeyboardShortcut} shortcut The shortcut
- * to be handled.
- * @returns {boolean} True if the field handled the shortcut,
- * false otherwise.
- * @this {Blockly.FieldDropdown}
- * @protected
- */
- fieldDropdownHandler(shortcut) {
- if (this.menu_) {
- switch (shortcut.name) {
- case Constants.SHORTCUT_NAMES.PREVIOUS:
- this.menu_.highlightPrevious();
- return true;
- case Constants.SHORTCUT_NAMES.NEXT:
- this.menu_.highlightNext();
- return true;
- default:
- return false;
- }
- }
- // If we haven't already handled the shortcut, let the default Field
- // handler try.
- return Blockly.Field.prototype.onShortcut.call(this, shortcut);
- }
-
- /**
- * Handles the given keyboard shortcut.
- * This is only triggered when keyboard accessibility mode is enabled.
- * @param {!Blockly.ShortcutRegistry.KeyboardShortcut} shortcut The shortcut
- * to be handled.
- * @returns {boolean} True if the toolbox handled the shortcut,
- * false otherwise.
- * @this {Blockly.Toolbox}
- * @protected
- */
- toolboxHandler(shortcut) {
- if (!this.selectedItem_) {
- return false;
- }
- switch (shortcut.name) {
- case Constants.SHORTCUT_NAMES.PREVIOUS:
- return this.selectPrevious_();
- case Constants.SHORTCUT_NAMES.OUT:
- return this.selectParent_();
- case Constants.SHORTCUT_NAMES.NEXT:
- return this.selectNext_();
- case Constants.SHORTCUT_NAMES.IN:
- return this.selectChild_();
- default:
- return false;
- }
- }
-
- /**
- * Adds all necessary event listeners and markers to a workspace for keyboard
- * navigation to work. This must be called for keyboard navigation to work
- * on a workspace.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to add keyboard
- * navigation to.
- * @public
- */
- addWorkspace(workspace) {
- this.navigation.addWorkspace(workspace);
- }
-
- /**
- * Removes all necessary event listeners and markers to a workspace for
- * keyboard navigation to work.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to remove keyboard
- * navigation from.
- * @public
- */
- removeWorkspace(workspace) {
- this.navigation.removeWorkspace(workspace);
- }
-
- /**
- * Turns on keyboard navigation.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to turn on keyboard
- * navigation for.
- * @public
- */
- enable(workspace) {
- this.navigation.enableKeyboardAccessibility(workspace);
- }
-
- /**
- * Turns off keyboard navigation.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to turn off keyboard
- * navigation on.
- * @public
- */
- disable(workspace) {
- this.navigation.disableKeyboardAccessibility(workspace);
- }
-
- /**
- * Gives the cursor to the field to handle if the cursor is on a field.
- * @param {!Blockly.WorkspaceSvg} workspace The workspace to check.
- * @param {!Blockly.ShortcutRegistry.KeyboardShortcut} shortcut The shortcut
- * to give to the field.
- * @returns {boolean} True if the shortcut was handled by the field, false
- * otherwise.
- * @protected
- */
- fieldShortcutHandler(workspace, shortcut) {
- const cursor = workspace.getCursor();
- if (!cursor || !cursor.getCurNode()) {
- return false;
- }
- const curNode = cursor.getCurNode();
- if (curNode.getType() === Blockly.ASTNode.types.FIELD) {
- return /** @type {!Blockly.Field} */ (curNode.getLocation()).onShortcut(
- shortcut,
- );
- }
- return false;
- }
-
- /**
- * Keyboard shortcut to go to the previous location when in keyboard
- * navigation mode.
- * @protected
- */
- registerPrevious() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const previousShortcut = {
- name: Constants.SHORTCUT_NAMES.PREVIOUS,
- preconditionFn: (workspace) => {
- return workspace.keyboardAccessibilityMode;
- },
- callback: (workspace, e, shortcut) => {
- const flyout = workspace.getFlyout();
- const toolbox = workspace.getToolbox();
- let isHandled = false;
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- isHandled = this.fieldShortcutHandler(workspace, shortcut);
- if (!isHandled) {
- workspace.getCursor().prev();
- isHandled = true;
- }
- return isHandled;
- case Constants.STATE.FLYOUT:
- isHandled = this.fieldShortcutHandler(workspace, shortcut);
- if (!isHandled) {
- flyout.getWorkspace().getCursor().prev();
- isHandled = true;
- }
- return isHandled;
- case Constants.STATE.TOOLBOX:
- return toolbox && typeof toolbox.onShortcut == 'function'
- ? toolbox.onShortcut(shortcut)
- : false;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(previousShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.W,
- previousShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to turn keyboard navigation on or off.
- * @protected
- */
- registerToggleKeyboardNav() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const toggleKeyboardNavShortcut = {
- name: Constants.SHORTCUT_NAMES.TOGGLE_KEYBOARD_NAV,
- callback: (workspace) => {
- if (workspace.keyboardAccessibilityMode) {
- this.navigation.disableKeyboardAccessibility(workspace);
- } else {
- this.navigation.enableKeyboardAccessibility(workspace);
- }
- return true;
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(toggleKeyboardNavShortcut);
- const ctrlShiftK = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.K,
- [Blockly.utils.KeyCodes.CTRL, Blockly.utils.KeyCodes.SHIFT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- ctrlShiftK,
- toggleKeyboardNavShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to go to the out location when in keyboard navigation
- * mode.
- * @protected
- */
- registerOut() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const outShortcut = {
- name: Constants.SHORTCUT_NAMES.OUT,
- preconditionFn: (workspace) => {
- return workspace.keyboardAccessibilityMode;
- },
- callback: (workspace, e, shortcut) => {
- const toolbox = workspace.getToolbox();
- let isHandled = false;
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- isHandled = this.fieldShortcutHandler(workspace, shortcut);
- if (!isHandled) {
- workspace.getCursor().out();
- isHandled = true;
- }
- return isHandled;
- case Constants.STATE.FLYOUT:
- this.navigation.focusToolbox(workspace);
- return true;
- case Constants.STATE.TOOLBOX:
- return toolbox && typeof toolbox.onShortcut == 'function'
- ? toolbox.onShortcut(shortcut)
- : false;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(outShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.A,
- outShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to go to the next location when in keyboard navigation
- * mode.
- * @protected
- */
- registerNext() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const nextShortcut = {
- name: Constants.SHORTCUT_NAMES.NEXT,
- preconditionFn: (workspace) => {
- return workspace.keyboardAccessibilityMode;
- },
- callback: (workspace, e, shortcut) => {
- const toolbox = workspace.getToolbox();
- const flyout = workspace.getFlyout();
- let isHandled = false;
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- isHandled = this.fieldShortcutHandler(workspace, shortcut);
- if (!isHandled) {
- workspace.getCursor().next();
- isHandled = true;
- }
- return isHandled;
- case Constants.STATE.FLYOUT:
- isHandled = this.fieldShortcutHandler(workspace, shortcut);
- if (!isHandled) {
- flyout.getWorkspace().getCursor().next();
- isHandled = true;
- }
- return isHandled;
- case Constants.STATE.TOOLBOX:
- return toolbox && typeof toolbox.onShortcut == 'function'
- ? toolbox.onShortcut(shortcut)
- : false;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(nextShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.S,
- nextShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to go to the in location when in keyboard navigation
- * mode.
- * @protected
- */
- registerIn() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const inShortcut = {
- name: Constants.SHORTCUT_NAMES.IN,
- preconditionFn: (workspace) => {
- return workspace.keyboardAccessibilityMode;
- },
- callback: (workspace, e, shortcut) => {
- const toolbox = workspace.getToolbox();
- let isHandled = false;
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- isHandled = this.fieldShortcutHandler(workspace, shortcut);
- if (!isHandled) {
- workspace.getCursor().in();
- isHandled = true;
- }
- return isHandled;
- case Constants.STATE.TOOLBOX:
- isHandled =
- toolbox && typeof toolbox.onShortcut == 'function'
- ? toolbox.onShortcut(shortcut)
- : false;
- if (!isHandled) {
- this.navigation.focusFlyout(workspace);
- }
- return true;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(inShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.D,
- inShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to connect a block to a marked location when in keyboard
- * navigation mode.
- * @protected
- */
- registerInsert() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const insertShortcut = {
- name: Constants.SHORTCUT_NAMES.INSERT,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- return this.navigation.connectMarkerAndCursor(workspace);
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(insertShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.I,
- insertShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to mark a location when in keyboard navigation mode.
- * @protected
- */
- registerMark() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const markShortcut = {
- name: Constants.SHORTCUT_NAMES.MARK,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- let flyoutCursor;
- let curNode;
- let nodeType;
-
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- this.navigation.handleEnterForWS(workspace);
- return true;
- case Constants.STATE.FLYOUT:
- flyoutCursor = this.navigation.getFlyoutCursor(workspace);
- if (!flyoutCursor) {
- return false;
- }
- curNode = flyoutCursor.getCurNode();
- nodeType = curNode.getType();
-
- switch (nodeType) {
- case Blockly.ASTNode.types.STACK:
- this.navigation.insertFromFlyout(workspace);
- break;
- case Blockly.ASTNode.types.BUTTON:
- this.navigation.triggerButtonCallback(workspace);
- break;
- }
-
- return true;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(markShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.ENTER,
- markShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to disconnect two blocks when in keyboard navigation
- * mode.
- * @protected
- */
- registerDisconnect() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const disconnectShortcut = {
- name: Constants.SHORTCUT_NAMES.DISCONNECT,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- this.navigation.disconnectBlocks(workspace);
- return true;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(disconnectShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.X,
- disconnectShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to focus on the toolbox when in keyboard navigation
- * mode.
- * @protected
- */
- registerToolboxFocus() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const focusToolboxShortcut = {
- name: Constants.SHORTCUT_NAMES.TOOLBOX,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.WORKSPACE:
- if (!workspace.getToolbox()) {
- this.navigation.focusFlyout(workspace);
- } else {
- this.navigation.focusToolbox(workspace);
- }
- return true;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(focusToolboxShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.T,
- focusToolboxShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to exit the current location and focus on the workspace
- * when in keyboard navigation mode.
- * @protected
- */
- registerExit() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const exitShortcut = {
- name: Constants.SHORTCUT_NAMES.EXIT,
- preconditionFn: (workspace) => {
- return workspace.keyboardAccessibilityMode;
- },
- callback: (workspace) => {
- switch (this.navigation.getState(workspace)) {
- case Constants.STATE.FLYOUT:
- this.navigation.focusWorkspace(workspace);
- return true;
- case Constants.STATE.TOOLBOX:
- this.navigation.focusWorkspace(workspace);
- return true;
- default:
- return false;
- }
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(exitShortcut, true);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.ESC,
- exitShortcut.name,
- true,
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.E,
- exitShortcut.name,
- true,
- );
- }
-
- /**
- * Keyboard shortcut to move the cursor on the workspace to the left when in
- * keyboard navigation mode.
- * @protected
- */
- registerWorkspaceMoveLeft() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const wsMoveLeftShortcut = {
- name: Constants.SHORTCUT_NAMES.MOVE_WS_CURSOR_LEFT,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- return this.navigation.moveWSCursor(workspace, -1, 0);
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(wsMoveLeftShortcut);
- const shiftA = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.A,
- [Blockly.utils.KeyCodes.SHIFT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- shiftA,
- wsMoveLeftShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to move the cursor on the workspace to the right when in
- * keyboard navigation mode.
- * @protected
- */
- registerWorkspaceMoveRight() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const wsMoveRightShortcut = {
- name: Constants.SHORTCUT_NAMES.MOVE_WS_CURSOR_RIGHT,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- return this.navigation.moveWSCursor(workspace, 1, 0);
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(wsMoveRightShortcut);
- const shiftD = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.D,
- [Blockly.utils.KeyCodes.SHIFT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- shiftD,
- wsMoveRightShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to move the cursor on the workspace up when in keyboard
- * navigation mode.
- * @protected
- */
- registerWorkspaceMoveUp() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const wsMoveUpShortcut = {
- name: Constants.SHORTCUT_NAMES.MOVE_WS_CURSOR_UP,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- return this.navigation.moveWSCursor(workspace, 0, -1);
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(wsMoveUpShortcut);
- const shiftW = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.W,
- [Blockly.utils.KeyCodes.SHIFT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- shiftW,
- wsMoveUpShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to move the cursor on the workspace down when in
- * keyboard navigation mode.
- * @protected
- */
- registerWorkspaceMoveDown() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const wsMoveDownShortcut = {
- name: Constants.SHORTCUT_NAMES.MOVE_WS_CURSOR_DOWN,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode && !workspace.options.readOnly
- );
- },
- callback: (workspace) => {
- return this.navigation.moveWSCursor(workspace, 0, 1);
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(wsMoveDownShortcut);
- const shiftW = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.S,
- [Blockly.utils.KeyCodes.SHIFT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- shiftW,
- wsMoveDownShortcut.name,
- );
- }
-
- /**
- * Keyboard shortcut to copy the block the cursor is currently on.
- * @protected
- */
- registerCopy() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const copyShortcut = {
- name: Constants.SHORTCUT_NAMES.COPY,
- preconditionFn: (workspace) => {
- if (
- workspace.keyboardAccessibilityMode &&
- !workspace.options.readOnly
- ) {
- const curNode = workspace.getCursor().getCurNode();
- if (curNode && curNode.getSourceBlock()) {
- const sourceBlock = curNode.getSourceBlock();
- return (
- !Blockly.Gesture.inProgress() &&
- sourceBlock &&
- sourceBlock.isDeletable() &&
- sourceBlock.isMovable()
- );
- }
- }
- return false;
- },
- callback: (workspace) => {
- const sourceBlock = /** @type {Blockly.BlockSvg} */ (
- workspace.getCursor().getCurNode().getSourceBlock()
- );
- workspace.hideChaff();
- this.copyData = sourceBlock.toCopyData();
- this.copyWorkspace = sourceBlock.workspace;
- return !!this.copyData;
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(copyShortcut);
-
- const ctrlC = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.C,
- [Blockly.utils.KeyCodes.CTRL],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- ctrlC,
- copyShortcut.name,
- true,
- );
-
- const altC = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.C,
- [Blockly.utils.KeyCodes.ALT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- altC,
- copyShortcut.name,
- true,
- );
-
- const metaC = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.C,
- [Blockly.utils.KeyCodes.META],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- metaC,
- copyShortcut.name,
- true,
- );
- }
-
- /**
- * Register shortcut to paste the copied block to the marked location.
- * @protected
- */
- registerPaste() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const pasteShortcut = {
- name: Constants.SHORTCUT_NAMES.PASTE,
- preconditionFn: (workspace) => {
- return (
- workspace.keyboardAccessibilityMode &&
- !workspace.options.readOnly &&
- !Blockly.Gesture.inProgress()
- );
- },
- callback: () => {
- if (!this.copyData || !this.copyWorkspace) return false;
- return this.navigation.paste(this.copyData, this.copyWorkspace);
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(pasteShortcut);
-
- const ctrlV = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.V,
- [Blockly.utils.KeyCodes.CTRL],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- ctrlV,
- pasteShortcut.name,
- true,
- );
-
- const altV = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.V,
- [Blockly.utils.KeyCodes.ALT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- altV,
- pasteShortcut.name,
- true,
- );
-
- const metaV = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.V,
- [Blockly.utils.KeyCodes.META],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- metaV,
- pasteShortcut.name,
- true,
- );
- }
-
- /**
- * Keyboard shortcut to copy and delete the block the cursor is on using
- * ctrl+x, cmd+x, or alt+x.
- * @protected
- */
- registerCut() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const cutShortcut = {
- name: Constants.SHORTCUT_NAMES.CUT,
- preconditionFn: (workspace) => {
- if (
- workspace.keyboardAccessibilityMode &&
- !workspace.options.readOnly
- ) {
- const curNode = workspace.getCursor().getCurNode();
- if (curNode && curNode.getSourceBlock()) {
- const sourceBlock = curNode.getSourceBlock();
- return (
- !Blockly.Gesture.inProgress() &&
- sourceBlock &&
- sourceBlock.isDeletable() &&
- sourceBlock.isMovable() &&
- !sourceBlock.workspace.isFlyout
- );
- }
- }
- return false;
- },
- callback: (workspace) => {
- const sourceBlock = /** @type {Blockly.BlockSvg} */ (
- workspace.getCursor().getCurNode().getSourceBlock()
- );
- this.copyData = sourceBlock.toCopyData();
- this.copyWorkspace = sourceBlock.workspace;
- this.navigation.moveCursorOnBlockDelete(workspace, sourceBlock);
- sourceBlock.checkAndDelete();
- return true;
- },
- };
-
- Blockly.ShortcutRegistry.registry.register(cutShortcut);
-
- const ctrlX = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.X,
- [Blockly.utils.KeyCodes.CTRL],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- ctrlX,
- cutShortcut.name,
- true,
- );
-
- const altX = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.X,
- [Blockly.utils.KeyCodes.ALT],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- altX,
- cutShortcut.name,
- true,
- );
-
- const metaX = Blockly.ShortcutRegistry.registry.createSerializedKey(
- Blockly.utils.KeyCodes.X,
- [Blockly.utils.KeyCodes.META],
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- metaX,
- cutShortcut.name,
- true,
- );
- }
-
- /**
- * Registers shortcut to delete the block the cursor is on using delete or
- * backspace.
- * @protected
- */
- registerDelete() {
- /** @type {!Blockly.ShortcutRegistry.KeyboardShortcut} */
- const deleteShortcut = {
- name: Constants.SHORTCUT_NAMES.DELETE,
- preconditionFn: function (workspace) {
- if (
- workspace.keyboardAccessibilityMode &&
- !workspace.options.readOnly
- ) {
- const curNode = workspace.getCursor().getCurNode();
- if (curNode && curNode.getSourceBlock()) {
- const sourceBlock = curNode.getSourceBlock();
- return sourceBlock && sourceBlock.isDeletable();
- }
- }
- return false;
- },
- callback: (workspace, e) => {
- const sourceBlock = workspace.getCursor().getCurNode().getSourceBlock();
- // Delete or backspace.
- // Stop the browser from going back to the previous page.
- // Do this first to prevent an error in the delete code from resulting
- // in data loss.
- e.preventDefault();
- // Don't delete while dragging. Jeez.
- if (Blockly.Gesture.inProgress()) {
- return false;
- }
- this.navigation.moveCursorOnBlockDelete(workspace, sourceBlock);
- sourceBlock.checkAndDelete();
- return true;
- },
- };
- Blockly.ShortcutRegistry.registry.register(deleteShortcut);
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.DELETE,
- deleteShortcut.name,
- true,
- );
- Blockly.ShortcutRegistry.registry.addKeyMapping(
- Blockly.utils.KeyCodes.BACKSPACE,
- deleteShortcut.name,
- true,
- );
- }
-
- /**
- * Registers all default keyboard shortcut items for keyboard navigation. This
- * should be called once per instance of KeyboardShortcutRegistry.
- * @protected
- */
- registerDefaults() {
- this.registerPrevious();
- this.registerNext();
- this.registerIn();
- this.registerOut();
-
- this.registerDisconnect();
- this.registerExit();
- this.registerInsert();
- this.registerMark();
- this.registerToolboxFocus();
- this.registerToggleKeyboardNav();
-
- this.registerWorkspaceMoveDown();
- this.registerWorkspaceMoveLeft();
- this.registerWorkspaceMoveUp();
- this.registerWorkspaceMoveRight();
-
- this.registerCopy();
- this.registerPaste();
- this.registerCut();
- this.registerDelete();
- }
-
- /**
- * Removes all the keyboard navigation shortcuts.
- * @public
- */
- dispose() {
- const shortcutNames = Object.values(Constants.SHORTCUT_NAMES);
- for (const name of shortcutNames) {
- Blockly.ShortcutRegistry.registry.unregister(name);
- }
- this.removeShortcutHandlers();
- this.navigation.dispose();
- }
-}
diff --git a/plugins/keyboard-navigation/test/index.html b/plugins/keyboard-navigation/test/index.html
deleted file mode 100644
index e0db0d3253..0000000000
--- a/plugins/keyboard-navigation/test/index.html
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
- Blockly Plugin Test
-
-
-
-
-
- Keyboard Navigation is our first step towards an accessible Blockly.
- For more information on how the default keyboard navigation works please
- see the
- documentation .
-
-
-
- Cursors
- The cursor controls how the user navigates the blocks, inputs, fields and
- connections on a workspace. This demo shows three different cursors:
- Default Cursor: This cursor uses previous, next, in, and out to
- navigate through the different parts of a block. See the
- developer documentation
- for more information.
- Basic Cursor: Uses pre order traversal to allow users to navigate
- through everything using only the previous and next command.
- Line Cursor: We tried to make this cursor mimic a text editor.
- Navigating up and down will take the cursor to the next and previous
- "line" of code. Navigating in and out will move the cursor through all the
- fields and inputs in that "line" of code.
-
- Enable Accessibility Mode:
-
-
- Default Cursor
- Basic Cursor
- Line Cursor
-
-
-
-
-
diff --git a/plugins/keyboard-navigation/test/index.js b/plugins/keyboard-navigation/test/index.js
deleted file mode 100644
index 919ab31037..0000000000
--- a/plugins/keyboard-navigation/test/index.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * @license
- * Copyright 2020 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview Plugin test.
- */
-
-import {createPlayground} from '@blockly/dev-tools';
-import * as Blockly from 'blockly';
-import {toolbox} from './toolbox';
-
-import {LineCursor, NavigationController} from '../src';
-
-let controller;
-
-/**
- * Create a workspace.
- * @param {HTMLElement} blocklyDiv The blockly container div.
- * @param {!Blockly.BlocklyOptions} options The Blockly options.
- * @returns {!Blockly.WorkspaceSvg} The created workspace.
- */
-function createWorkspace(blocklyDiv, options) {
- const workspace = Blockly.inject(blocklyDiv, options);
- controller.addWorkspace(workspace);
- return workspace;
-}
-
-document.addEventListener('DOMContentLoaded', function () {
- controller = new NavigationController();
- controller.init();
- const defaultOptions = {
- toolbox: toolbox,
- };
- createPlayground(
- document.getElementById('root'),
- createWorkspace,
- defaultOptions,
- );
-});
-
-document
- .getElementById('accessibilityModeCheck')
- .addEventListener('click', (e) => {
- if (e.target.checked) {
- controller.enable(Blockly.getMainWorkspace());
- } else {
- controller.disable(Blockly.getMainWorkspace());
- }
- });
-
-document.getElementById('cursorChanger').addEventListener('change', (e) => {
- const cursorType = e.target.value;
- const accessibilityCheckbox = document.getElementById(
- 'accessibilityModeCheck',
- );
- const markerManager = Blockly.getMainWorkspace().getMarkerManager();
- const oldCurNode = markerManager.getCursor().getCurNode();
-
- document.getElementById('cursorChanger').value = cursorType;
- if (cursorType === 'basic') {
- Blockly.ASTNode.NAVIGATE_ALL_FIELDS = false;
- markerManager.setCursor(new Blockly.BasicCursor());
- } else if (cursorType === 'line') {
- Blockly.ASTNode.NAVIGATE_ALL_FIELDS = true;
- markerManager.setCursor(new LineCursor());
- } else {
- Blockly.ASTNode.NAVIGATE_ALL_FIELDS = false;
- markerManager.setCursor(new Blockly.Cursor());
- }
- if (oldCurNode) {
- markerManager.getCursor().setCurNode(oldCurNode);
- }
-
- if (!accessibilityCheckbox.checked) {
- accessibilityCheckbox.checked = true;
- controller.enable(Blockly.getMainWorkspace());
- }
-
- document.activeElement.blur();
-});
diff --git a/plugins/keyboard-navigation/test/navigation_modify_test.mocha.js b/plugins/keyboard-navigation/test/navigation_modify_test.mocha.js
deleted file mode 100644
index 492b98f9c5..0000000000
--- a/plugins/keyboard-navigation/test/navigation_modify_test.mocha.js
+++ /dev/null
@@ -1,691 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-const chai = require('chai');
-const Blockly = require('blockly');
-const {Navigation} = require('../src/navigation');
-const assert = chai.assert;
-const {testHelpers} = require('@blockly/dev-tools');
-const {captureWarnings} = testHelpers;
-
-suite('Insert/Modify', function () {
- /**
- * Check that modify failed.
- * @param {Navigation} navigation The class under test.
- * @param {Blockly.WorkspaceSvg} workspace The main workspace.
- * @param {!Blockly.ASTNode} markerNode The node to try to connect to.
- * @param {!Blockly.ASTNode} cursorNode The node to connect to the markerNode.
- */
- function assertModifyFails(navigation, workspace, markerNode, cursorNode) {
- let modifyResult;
- const warnings = captureWarnings(function () {
- modifyResult = navigation.tryToConnectMarkerAndCursor(
- workspace,
- markerNode,
- cursorNode,
- );
- });
- assert.isFalse(modifyResult);
- assert.equal(
- warnings.length,
- 1,
- 'Expecting 1 warnings for why modify failed.',
- );
- }
-
- /**
- * Define default blocks.
- */
- function defineTestBlocks() {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'stack_block',
- message0: '',
- previousStatement: null,
- nextStatement: null,
- },
- {
- type: 'row_block',
- message0: '%1',
- args0: [
- {
- type: 'input_value',
- name: 'INPUT',
- },
- ],
- output: null,
- },
- {
- type: 'statement_block',
- message0: '%1',
- args0: [
- {
- type: 'input_statement',
- name: 'NAME',
- },
- ],
- previousStatement: null,
- nextStatement: null,
- colour: 230,
- tooltip: '',
- helpUrl: '',
- },
- ]);
- }
-
- setup(function () {
- this.jsdomCleanup = require('jsdom-global')(
- '
',
- );
- // We are running these tests in node even thought they require a rendered
- // workspace, which doesn't exactly work. The rendering system expects
- // cancelAnimationFrame to be defined so we need to define it.
- window.cancelAnimationFrame = function () {};
-
- // NOTE: block positions chosen such that they aren't unintentionally
- // bumped out of bounds during tests.
- const xmlText = `
-
-
-
-
-
-
-
-
- `;
-
- defineTestBlocks();
-
- this.workspace = Blockly.inject('blocklyDiv', {
- toolbox: `
-
-
-
- `,
- });
- Blockly.Xml.domToWorkspace(
- Blockly.utils.xml.textToDom(xmlText),
- this.workspace,
- );
- this.navigation = new Navigation();
- this.navigation.addWorkspace(this.workspace);
-
- this.stack_block_1 = this.workspace.getBlockById('stack_block_1');
- this.stack_block_2 = this.workspace.getBlockById('stack_block_2');
- this.row_block_1 = this.workspace.getBlockById('row_block_1');
- this.row_block_2 = this.workspace.getBlockById('row_block_2');
- this.statement_block_1 = this.workspace.getBlockById('statement_block_1');
- this.statement_block_2 = this.workspace.getBlockById('statement_block_2');
- this.navigation.enableKeyboardAccessibility(this.workspace);
- });
-
- teardown(function () {
- delete Blockly.Blocks['stack_block'];
- delete Blockly.Blocks['row_block'];
- delete Blockly.Blocks['statement_block'];
- window.cancelAnimationFrame = undefined;
- this.jsdomCleanup();
- });
-
- suite('Marked Connection', function () {
- suite('Marker on next', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_1.nextConnection,
- );
- });
- test('Cursor on workspace', function () {
- const cursorNode = Blockly.ASTNode.createWorkspaceNode(
- this.workspace,
- new Blockly.utils.Coordinate(0, 0),
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on compatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.previousConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.stack_block_1.getNextBlock().id, 'stack_block_2');
- });
- test('Cursor on incompatible connection', function () {
- // Connect method will try to find a way to connect blocks with
- // incompatible types.
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.nextConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.stack_block_1.getNextBlock(), this.stack_block_2);
- });
- test('Cursor on really incompatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.outputConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- assert.isNull(this.stack_block_1.getNextBlock());
- });
- test('Cursor on block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_2);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.stack_block_1.getNextBlock().id, 'stack_block_2');
- });
- });
-
- suite('Marker on previous', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_1.previousConnection,
- );
- });
- test('Cursor on compatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.nextConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.stack_block_1.getPreviousBlock().id, 'stack_block_2');
- });
- test('Cursor on incompatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.previousConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- assert.isNull(this.stack_block_1.getPreviousBlock());
- });
- test('Cursor on really incompatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.outputConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- assert.isNull(this.stack_block_1.getNextBlock());
- });
- test('Cursor on block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_2);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.stack_block_1.getPreviousBlock().id, 'stack_block_2');
- });
- test('Cursor on incompatible block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_1);
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- assert.isNull(this.stack_block_1.getPreviousBlock());
- });
- });
-
- suite('Marker on value input', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.inputList[0].connection,
- );
- });
- test('Cursor on compatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_2.outputConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.row_block_2.getParent().id, 'row_block_1');
- });
- test('Cursor on incompatible connection', function () {
- // Connect method will try to find a way to connect blocks with
- // incompatible types.
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_2.inputList[0].connection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(
- this.row_block_1.inputList[0].connection.targetBlock(),
- this.row_block_2,
- );
- });
- test('Cursor on really incompatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_1.previousConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_2);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.row_block_2.getParent().id, 'row_block_1');
- });
- });
-
- suite('Marked Statement input', function () {
- setup(function () {
- this.statement_block_1.inputList[0].connection.connect(
- this.stack_block_1.previousConnection,
- );
- this.stack_block_1.nextConnection.connect(
- this.stack_block_2.previousConnection,
- );
- this.markerNode = Blockly.ASTNode.createInputNode(
- this.statement_block_1.inputList[0],
- );
- });
- test('Cursor on block inside statement', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.previousConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(
- this.stack_block_2.previousConnection.targetBlock(),
- this.statement_block_1,
- );
- });
- test('Cursor on stack', function () {
- const cursorNode = Blockly.ASTNode.createStackNode(
- this.statement_block_2,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(
- this.statement_block_2.getParent().id,
- 'statement_block_1',
- );
- });
- test('Cursor on incompatible type', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.outputConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- assert.isNull(this.row_block_1.getParent());
- });
- });
-
- suite('Marker on output', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.outputConnection,
- );
- });
- test('Cursor on compatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_2.inputList[0].connection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.row_block_1.getParent().id, 'row_block_2');
- });
- test('Cursor on incompatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_2.outputConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on really incompatible connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_1.previousConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_2);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.equal(this.row_block_1.getParent().id, 'row_block_2');
- });
- });
- });
-
- suite('Marked Workspace', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createWorkspaceNode(
- this.workspace,
- new Blockly.utils.Coordinate(100, 200),
- );
- });
- test('Cursor on row block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_1);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- const pos = this.row_block_1.getRelativeToSurfaceXY();
- assert.equal(pos.x, 100);
- assert.equal(pos.y, 200);
- });
-
- test('Cursor on output connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.outputConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- const pos = this.row_block_1.getRelativeToSurfaceXY();
- assert.equal(pos.x, 100);
- assert.equal(pos.y, 200);
- });
-
- test('Cursor on previous connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_1.previousConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- const pos = this.stack_block_1.getRelativeToSurfaceXY();
- assert.equal(pos.x, 100);
- assert.equal(pos.y, 200);
- });
-
- test('Cursor on input connection', function () {
- // Move the source block to the marked location on the workspace.
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_1.inputList[0].connection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- });
-
- test('Cursor on next connection', function () {
- // Move the source block to the marked location on the workspace.
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_1.nextConnection,
- );
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- });
-
- test('Cursor on child block (row)', function () {
- this.row_block_1.inputList[0].connection.connect(
- this.row_block_2.outputConnection,
- );
-
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_2);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.isNull(this.row_block_2.getParent());
- const pos = this.row_block_2.getRelativeToSurfaceXY();
- assert.equal(pos.x, 100);
- assert.equal(pos.y, 200);
- });
-
- test('Cursor on child block (stack)', function () {
- this.stack_block_1.nextConnection.connect(
- this.stack_block_2.previousConnection,
- );
-
- const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_2);
- assert.isTrue(
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- this.markerNode,
- cursorNode,
- ),
- );
- assert.isNull(this.stack_block_2.getParent());
- const pos = this.stack_block_2.getRelativeToSurfaceXY();
- assert.equal(pos.x, 100);
- assert.equal(pos.y, 200);
- });
-
- test('Cursor on workspace', function () {
- const cursorNode = Blockly.ASTNode.createWorkspaceNode(
- this.workspace,
- new Blockly.utils.Coordinate(100, 100),
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- });
-
- suite('Marked Block', function () {
- suite('Marked any block', function () {
- // These tests are using a stack block, but do not depend on the type of
- // the block.
- setup(function () {
- this.markerNode = Blockly.ASTNode.createBlockNode(this.stack_block_1);
- });
- test('Cursor on workspace', function () {
- const cursorNode = Blockly.ASTNode.createWorkspaceNode(
- this.workspace,
- new Blockly.utils.Coordinate(100, 100),
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- });
- suite('Marked stack block', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createBlockNode(this.stack_block_1);
- });
- test('Cursor on row block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_1);
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on stack block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_1);
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on next connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.nextConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on previous connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.stack_block_2.previousConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- });
- suite('Marked row block', function () {
- setup(function () {
- this.markerNode = Blockly.ASTNode.createBlockNode(this.row_block_1);
- });
- test('Cursor on stack block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.stack_block_1);
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on row block', function () {
- const cursorNode = Blockly.ASTNode.createBlockNode(this.row_block_1);
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on value input connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_2.inputList[0].connection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- test('Cursor on output connection', function () {
- const cursorNode = Blockly.ASTNode.createConnectionNode(
- this.row_block_2.outputConnection,
- );
- assertModifyFails(
- this.navigation,
- this.workspace,
- this.markerNode,
- cursorNode,
- );
- });
- });
- });
-});
diff --git a/plugins/keyboard-navigation/test/navigation_test.mocha.js b/plugins/keyboard-navigation/test/navigation_test.mocha.js
deleted file mode 100644
index ed5c67e989..0000000000
--- a/plugins/keyboard-navigation/test/navigation_test.mocha.js
+++ /dev/null
@@ -1,1365 +0,0 @@
-/**
- * @license
- * Copyright 2020 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview
- * @author aschmiedt@google.com (Abby Schmiedt)
- */
-'use strict';
-
-const chai = require('chai');
-const sinon = require('sinon');
-
-const Blockly = require('blockly');
-const {NavigationController, Constants} = require('../src/index');
-const {
- createNavigationWorkspace,
- createKeyDownEvent,
-} = require('./test_helper');
-
-suite('Navigation', function () {
- setup(function () {
- this.jsdomCleanup = require('jsdom-global')(
- '
',
- );
- // We are running these tests in node even thought they require a rendered
- // workspace, which doesn't exactly work. The rendering system expects
- // cancelAnimationFrame to be defined so we need to define it.
- window.cancelAnimationFrame = function () {};
- this.controller = new NavigationController();
- this.controller.init();
- this.navigation = this.controller.navigation;
-
- this.getContextStub = sinon
- .stub(window.HTMLCanvasElement.prototype, 'getContext')
- .callsFake(() => {
- return {
- measureText: function () {
- return {width: 0};
- },
- };
- });
- });
-
- teardown(function () {
- this.controller.dispose();
- window.cancelAnimationFrame = undefined;
- this.jsdomCleanup();
- sinon.restore();
- });
-
- // Test that toolbox key handlers call through to the right functions and
- // transition correctly between toolbox, workspace, and flyout.
- suite('Tests toolbox keys', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
- this.navigation.focusToolbox(this.workspace);
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- });
-
- const testCases = [
- [
- 'Calls toolbox selectNext',
- createKeyDownEvent(Blockly.utils.KeyCodes.S, 'NotAField'),
- 'selectNext_',
- ],
- [
- 'Calls toolbox selectPrevious',
- createKeyDownEvent(Blockly.utils.KeyCodes.W, 'NotAField'),
- 'selectPrevious_',
- ],
- [
- 'Calls toolbox selectParent',
- createKeyDownEvent(Blockly.utils.KeyCodes.D, 'NotAField'),
- 'selectChild_',
- ],
- [
- 'Calls toolbox selectChild',
- createKeyDownEvent(Blockly.utils.KeyCodes.A, 'NotAField'),
- 'selectParent_',
- ],
- ];
-
- testCases.forEach(function (testCase) {
- const testCaseName = testCase[0];
- const mockEvent = testCase[1];
- const stubName = testCase[2];
- test(testCaseName, function () {
- const toolbox = this.workspace.getToolbox();
- const selectStub = sinon.stub(toolbox, stubName);
- toolbox.selectedItem_ = toolbox.contents_[0];
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
- sinon.assert.called(selectStub);
- });
- });
-
- test('Go to flyout', function () {
- const navigation = this.navigation;
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.D,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
-
- const flyoutCursor = navigation.getFlyoutCursor(this.workspace);
- // See test_helper.js for hardcoded field values.
- chai.assert.equal(
- flyoutCursor.getCurNode().getLocation().getFieldValue('TEXTFIELD'),
- 'first',
- );
- });
-
- test('Focuses workspace from toolbox (e)', function () {
- const navigation = this.navigation;
- navigation.setState(this.workspace, Constants.STATE.TOOLBOX);
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.E,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
- test('Focuses workspace from toolbox (escape)', function () {
- const navigation = this.navigation;
- navigation.setState(this.workspace, Constants.STATE.TOOLBOX);
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.ESC,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
- });
-
- // Test that flyout key handlers call through to the right functions and
- // transition correctly between toolbox, workspace, and flyout.
- suite('Tests flyout keys', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
- this.navigation.focusToolbox(this.workspace);
- this.navigation.focusFlyout(this.workspace);
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- });
- // Should be a no-op
- test('Previous at beginning', function () {
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.W,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
- // See test_helper.js for hardcoded field values.
- chai.assert.equal(
- this.navigation
- .getFlyoutCursor(this.workspace)
- .getCurNode()
- .getLocation()
- .getFieldValue('TEXTFIELD'),
- 'first',
- );
- });
- test('Previous', function () {
- const flyoutBlocks = this.workspace
- .getFlyout()
- .getWorkspace()
- .getTopBlocks();
- this.navigation
- .getFlyoutCursor(this.workspace)
- .setCurNode(Blockly.ASTNode.createStackNode(flyoutBlocks[1]));
- let flyoutBlock = this.navigation
- .getFlyoutCursor(this.workspace)
- .getCurNode()
- .getLocation();
- // See test_helper.js for hardcoded field values.
- chai.assert.equal(flyoutBlock.getFieldValue('TEXTFIELD'), 'second');
-
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.W,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
- flyoutBlock = this.navigation
- .getFlyoutCursor(this.workspace)
- .getCurNode()
- .getLocation();
- // See test_helper.js for hardcoded field values.
- chai.assert.equal(flyoutBlock.getFieldValue('TEXTFIELD'), 'first');
- });
-
- test('Next', function () {
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.S,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
- const flyoutBlock = this.navigation
- .getFlyoutCursor(this.workspace)
- .getCurNode()
- .getLocation();
- // See test_helper.js for hardcoded field values.
- chai.assert.equal(flyoutBlock.getFieldValue('TEXTFIELD'), 'second');
- });
-
- test('Out', function () {
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.A,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.TOOLBOX,
- );
- });
-
- test('Mark', function () {
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.ENTER,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- chai.assert.equal(this.workspace.getTopBlocks().length, 1);
- });
-
- test('Mark - Disabled Block', function () {
- this.navigation.loggingCallback = function (type, msg) {
- chai.assert.equal(msg, "Can't insert a disabled block.");
- };
- const flyout = this.workspace.getFlyout();
- const topBlock = flyout.getWorkspace().getTopBlocks()[0];
- topBlock.setEnabled(false);
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.ENTER,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
- chai.assert.equal(this.workspace.getTopBlocks().length, 0);
- this.navigation.loggingCallback = null;
- });
-
- test('Exit', function () {
- const mockEvent = createKeyDownEvent(
- Blockly.utils.KeyCodes.ESC,
- 'NotAField',
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
- });
- // Test that workspace key handlers call through to the right functions and
- // transition correctly between toolbox, workspace, and flyout.
- suite('Tests workspace keys', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- previousStatement: null,
- nextStatement: null,
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
- this.basicBlock = this.workspace.newBlock('basic_block');
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- });
-
- test('Previous', function () {
- const prevSpy = sinon.spy(this.workspace.getCursor(), 'prev');
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const wEvent = createKeyDownEvent(Blockly.utils.KeyCodes.W, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, wEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(prevSpy);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Next', function () {
- const nextSpy = sinon.spy(this.workspace.getCursor(), 'next');
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const sEvent = createKeyDownEvent(Blockly.utils.KeyCodes.S, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, sEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(nextSpy);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Out', function () {
- const outSpy = sinon.spy(this.workspace.getCursor(), 'out');
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const aEvent = createKeyDownEvent(Blockly.utils.KeyCodes.A, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, aEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(outSpy);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('In', function () {
- const inSpy = sinon.spy(this.workspace.getCursor(), 'in');
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const dEvent = createKeyDownEvent(Blockly.utils.KeyCodes.D, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, dEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(inSpy);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Insert', function () {
- const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock);
- this.navigation.getMarker(this.workspace).setCurNode(blockNode);
- // Stub modify as we are not testing its behavior, only if it was called.
- // Otherwise, there is a warning because there is no marked node.
- const modifyStub = sinon
- .stub(this.navigation, 'tryToConnectMarkerAndCursor')
- .returns(true);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const iEvent = createKeyDownEvent(Blockly.utils.KeyCodes.I, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, iEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(modifyStub);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Mark', function () {
- this.workspace
- .getCursor()
- .setCurNode(
- Blockly.ASTNode.createConnectionNode(
- this.basicBlock.previousConnection,
- ),
- );
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const enterEvent = createKeyDownEvent(Blockly.utils.KeyCodes.ENTER, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, enterEvent);
-
- const markedNode = this.workspace
- .getMarker(this.navigation.MARKER_NAME)
- .getCurNode();
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- markedNode.getLocation(),
- this.basicBlock.previousConnection,
- );
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Toolbox', function () {
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- const tEvent = createKeyDownEvent(Blockly.utils.KeyCodes.T, '');
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, tEvent);
-
- const firstCategory = this.workspace.getToolbox().contents_[0];
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.equal(
- this.workspace.getToolbox().getSelectedItem(),
- firstCategory,
- );
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.TOOLBOX,
- );
- });
- });
-
- suite('Test key press', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
-
- this.workspace.getCursor().drawer_ = null;
- this.basicBlock = this.workspace.newBlock('basic_block');
- this.basicBlock.initSvg();
- this.basicBlock.render();
- });
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- });
-
- test('Action does not exist', function () {
- const block = this.workspace.getTopBlocks()[0];
- const field = block.inputList[0].fieldRow[0];
- const fieldSpy = sinon.spy(field, 'onShortcut');
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.N, '');
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- this.workspace
- .getCursor()
- .setCurNode(Blockly.ASTNode.createFieldNode(field));
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isFalse(keyDownSpy.returned(true));
- sinon.assert.notCalled(fieldSpy);
- });
-
- test('Action exists - field handles action', function () {
- const block = this.workspace.getTopBlocks()[0];
- const field = block.inputList[0].fieldRow[0];
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.A, '');
- const fieldSpy = sinon.stub(field, 'onShortcut').returns(true);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- this.workspace
- .getCursor()
- .setCurNode(Blockly.ASTNode.createFieldNode(field));
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(fieldSpy);
- });
-
- test('Action exists - field does not handle action', function () {
- const block = this.workspace.getTopBlocks()[0];
- const field = block.inputList[0].fieldRow[0];
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.A, '');
- const fieldSpy = sinon.spy(field, 'onShortcut');
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- this.workspace
- .getCursor()
- .setCurNode(Blockly.ASTNode.createFieldNode(field));
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- sinon.assert.calledOnce(fieldSpy);
- });
-
- test('Toggle Action Off', function () {
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.K, '', [
- Blockly.utils.KeyCodes.SHIFT,
- Blockly.utils.KeyCodes.CTRL,
- ]);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- this.workspace.keyboardAccessibilityMode = true;
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.isFalse(this.workspace.keyboardAccessibilityMode);
- });
-
- test('Toggle Action On', function () {
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.K, '', [
- Blockly.utils.KeyCodes.SHIFT,
- Blockly.utils.KeyCodes.CTRL,
- ]);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
- this.workspace.keyboardAccessibilityMode = false;
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- chai.assert.isTrue(this.workspace.keyboardAccessibilityMode);
- });
-
- suite('Test key press in read only mode', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'field_block',
- message0: '%1 %2',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- {
- type: 'input_value',
- name: 'NAME',
- },
- ],
- previousStatement: null,
- nextStatement: null,
- colour: 230,
- tooltip: '',
- helpUrl: '',
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true, true);
- Blockly.common.setMainWorkspace(this.workspace);
- this.workspace.getCursor().drawer_ = null;
-
- this.fieldBlock1 = this.workspace.newBlock('field_block');
- this.fieldBlock1.initSvg();
- this.fieldBlock1.render();
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['field_block'];
- });
-
- test('Perform valid action for read only', function () {
- const astNode = Blockly.ASTNode.createBlockNode(this.fieldBlock1);
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.S, '');
- this.workspace.getCursor().setCurNode(astNode);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(true));
- });
-
- test('Perform invalid action for read only', function () {
- const astNode = Blockly.ASTNode.createBlockNode(this.fieldBlock1);
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.I, '');
- this.workspace.getCursor().setCurNode(astNode);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(false));
- });
-
- test('Try to perform action on a field', function () {
- const field = this.fieldBlock1.inputList[0].fieldRow[0];
- const astNode = Blockly.ASTNode.createFieldNode(field);
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.ENTER, '');
- this.workspace.getCursor().setCurNode(astNode);
- const keyDownSpy = sinon.spy(
- Blockly.ShortcutRegistry.registry,
- 'onKeyDown',
- );
-
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
-
- chai.assert.isTrue(keyDownSpy.returned(false));
- });
- });
- });
- suite('Insert Functions', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- previousStatement: null,
- nextStatement: null,
- },
- ]);
-
- this.workspace = createNavigationWorkspace(this.navigation, true);
-
- const basicBlock = this.workspace.newBlock('basic_block');
- const basicBlock2 = this.workspace.newBlock('basic_block');
-
- this.basicBlock = basicBlock;
- this.basicBlock2 = basicBlock2;
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- });
-
- test('Insert from flyout with a valid connection marked', function () {
- const previousConnection = this.basicBlock.previousConnection;
- const prevNode = Blockly.ASTNode.createConnectionNode(previousConnection);
- this.workspace
- .getMarker(this.navigation.MARKER_NAME)
- .setCurNode(prevNode);
-
- this.navigation.focusToolbox(this.workspace);
- this.navigation.focusFlyout(this.workspace);
- this.navigation.insertFromFlyout(this.workspace);
-
- const insertedBlock = this.basicBlock.previousConnection.targetBlock();
-
- chai.assert.isTrue(insertedBlock !== null);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Insert Block from flyout without marking a connection', function () {
- this.navigation.focusToolbox(this.workspace);
- this.navigation.focusFlyout(this.workspace);
- this.navigation.insertFromFlyout(this.workspace);
-
- const numBlocks = this.workspace.getTopBlocks().length;
-
- // Make sure the block was not connected to anything
- chai.assert.isNull(this.basicBlock.previousConnection.targetConnection);
- chai.assert.isNull(this.basicBlock.nextConnection.targetConnection);
-
- // Make sure that the block was added to the workspace
- chai.assert.equal(numBlocks, 3);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
-
- test('Connect two blocks that are on the workspace', function () {
- const targetNode = Blockly.ASTNode.createConnectionNode(
- this.basicBlock.previousConnection,
- );
- const sourceNode = Blockly.ASTNode.createConnectionNode(
- this.basicBlock2.nextConnection,
- );
-
- this.navigation.tryToConnectMarkerAndCursor(
- this.workspace,
- targetNode,
- sourceNode,
- );
- const insertedBlock = this.basicBlock.previousConnection.targetBlock();
-
- chai.assert.isNotNull(insertedBlock);
- });
- });
- suite('Connect Blocks', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '',
- previousStatement: null,
- nextStatement: null,
- },
- {
- type: 'inline_block',
- message0: '%1 %2',
- args0: [
- {
- type: 'input_value',
- name: 'NAME',
- },
- {
- type: 'input_value',
- name: 'NAME',
- },
- ],
- inputsInline: true,
- output: null,
- tooltip: '',
- helpUrl: '',
- },
- ]);
-
- this.workspace = createNavigationWorkspace(this.navigation, true);
-
- const basicBlock = this.workspace.newBlock('basic_block');
- const basicBlock2 = this.workspace.newBlock('basic_block');
- const basicBlock3 = this.workspace.newBlock('basic_block');
- const basicBlock4 = this.workspace.newBlock('basic_block');
-
- const inlineBlock1 = this.workspace.newBlock('inline_block');
- const inlineBlock2 = this.workspace.newBlock('inline_block');
- const inlineBlock3 = this.workspace.newBlock('inline_block');
-
- this.basicBlock = basicBlock;
- this.basicBlock2 = basicBlock2;
- this.basicBlock3 = basicBlock3;
- this.basicBlock4 = basicBlock4;
-
- this.inlineBlock1 = inlineBlock1;
- this.inlineBlock2 = inlineBlock2;
- this.inlineBlock3 = inlineBlock3;
-
- this.basicBlock.nextConnection.connect(
- this.basicBlock2.previousConnection,
- );
-
- this.basicBlock3.nextConnection.connect(
- this.basicBlock4.previousConnection,
- );
-
- this.inlineBlock1.inputList[0].connection.connect(
- this.inlineBlock2.outputConnection,
- );
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- delete Blockly.Blocks['inline_block'];
- });
-
- test('Connect cursor on previous into stack', function () {
- const markedLocation = this.basicBlock2.previousConnection;
- const cursorLocation = this.basicBlock3.previousConnection;
-
- this.navigation.connect(cursorLocation, markedLocation);
-
- chai.assert.equal(
- this.basicBlock.nextConnection.targetBlock(),
- this.basicBlock3,
- );
- chai.assert.equal(
- this.basicBlock2.previousConnection.targetBlock(),
- this.basicBlock4,
- );
- });
-
- test('Connect marker on previous into stack', function () {
- const markedLocation = this.basicBlock3.previousConnection;
- const cursorLocation = this.basicBlock2.previousConnection;
-
- this.navigation.connect(cursorLocation, markedLocation);
-
- chai.assert.equal(
- this.basicBlock.nextConnection.targetBlock(),
- this.basicBlock3,
- );
- chai.assert.equal(
- this.basicBlock2.previousConnection.targetBlock(),
- this.basicBlock4,
- );
- });
-
- test('Connect cursor on next into stack', function () {
- const markedLocation = this.basicBlock2.previousConnection;
- const cursorLocation = this.basicBlock4.nextConnection;
-
- this.navigation.connect(cursorLocation, markedLocation);
-
- chai.assert.equal(
- this.basicBlock.nextConnection.targetBlock(),
- this.basicBlock4,
- );
- chai.assert.isNull(this.basicBlock3.nextConnection.targetConnection);
- });
-
- test('Connect cursor with parents', function () {
- const markedLocation = this.basicBlock3.previousConnection;
- const cursorLocation = this.basicBlock2.nextConnection;
-
- this.navigation.connect(cursorLocation, markedLocation);
-
- chai.assert.equal(
- this.basicBlock3.previousConnection.targetBlock(),
- this.basicBlock2,
- );
- });
-
- test('Try to connect input that is descendant of output', function () {
- const markedLocation = this.inlineBlock2.inputList[0].connection;
- const cursorLocation = this.inlineBlock1.outputConnection;
-
- this.navigation.connect(cursorLocation, markedLocation);
-
- chai.assert.isNull(this.inlineBlock2.outputConnection.targetBlock());
- chai.assert.equal(
- this.inlineBlock1.outputConnection.targetBlock(),
- this.inlineBlock2,
- );
- });
- test.skip('Do not connect a shadow block', function () {
- // TODO(https://github.com/google/blockly-samples/issues/538): Update
- // tests after this bug is fixed.
- this.inlineBlock2.setShadow(true);
-
- const markedLocation = this.inlineBlock2.outputConnection;
- const cursorLocation = this.inlineBlock3.inputList[0].connection;
- const didConnect = this.navigation.connect(
- cursorLocation,
- markedLocation,
- );
- chai.assert.isFalse(didConnect);
- chai.assert.isNull(this.inlineBlock2.outputConnection.targetBlock());
- chai.assert.equal(
- this.inlineBlock1.outputConnection.targetBlock(),
- this.inlineBlock2,
- );
- });
- });
-
- suite('Test cursor move on block delete', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '',
- previousStatement: null,
- nextStatement: null,
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
-
- this.basicBlockA = this.workspace.newBlock('basic_block');
- this.basicBlockB = this.workspace.newBlock('basic_block');
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- delete Blockly.Blocks['basic_block'];
- });
-
- test('Delete block - has parent ', function () {
- this.basicBlockA.nextConnection.connect(
- this.basicBlockB.previousConnection,
- );
- const astNode = Blockly.ASTNode.createBlockNode(this.basicBlockB);
- // Set the cursor to be on the child block
- this.workspace.getCursor().setCurNode(astNode);
- // Remove the child block
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.DELETE, '');
-
- // Actions that happen when a block is deleted were causing problems.
- // Since this is not what we are trying to test and does not effect the
- // feature, disable events.
- Blockly.Events.disable();
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
- Blockly.Events.enable();
-
- chai.assert.equal(
- this.workspace.getCursor().getCurNode().getType(),
- Blockly.ASTNode.types.NEXT,
- );
- });
-
- test('Delete block - no parent ', function () {
- const astNode = Blockly.ASTNode.createBlockNode(this.basicBlockB);
- this.workspace.getCursor().setCurNode(astNode);
-
- const mockEvent = createKeyDownEvent(Blockly.utils.KeyCodes.DELETE, '');
-
- // Actions that happen when a block is deleted were causing problems.
- // Since this is not what we are trying to test and does not effect the
- // feature, disable events.
- Blockly.Events.disable();
- Blockly.ShortcutRegistry.registry.onKeyDown(this.workspace, mockEvent);
- Blockly.Events.enable();
-
- chai.assert.equal(
- this.workspace.getCursor().getCurNode().getType(),
- Blockly.ASTNode.types.WORKSPACE,
- );
- });
-
- test('Delete parent block', function () {
- this.basicBlockA.nextConnection.connect(
- this.basicBlockB.previousConnection,
- );
- const astNode = Blockly.ASTNode.createBlockNode(this.basicBlockB);
- const mockDeleteBlockEvent = {
- blockId: this.basicBlockA,
- ids: [this.basicBlockA.id, this.basicBlockB.id],
- };
- // Set the cursor to be on the child block
- this.workspace.getCursor().setCurNode(astNode);
- // Remove the parent block
- this.navigation.handleBlockDeleteByDrag(
- this.workspace,
- mockDeleteBlockEvent,
- );
- chai.assert.equal(
- this.workspace.getCursor().getCurNode().getType(),
- Blockly.ASTNode.types.WORKSPACE,
- );
- });
-
- test('Delete top block in stack', function () {
- this.basicBlockA.nextConnection.connect(
- this.basicBlockB.previousConnection,
- );
- const astNode = Blockly.ASTNode.createStackNode(this.basicBlockA);
- const mockDeleteBlockEvent = {
- blockId: this.basicBlockA.id,
- ids: [this.basicBlockA.id, this.basicBlockB.id],
- };
- // Set the cursor to be on the stack
- this.workspace.getCursor().setCurNode(astNode);
- // Remove the top block in the stack
- this.navigation.handleBlockDeleteByDrag(
- this.workspace,
- mockDeleteBlockEvent,
- );
- chai.assert.equal(
- this.workspace.getCursor().getCurNode().getType(),
- Blockly.ASTNode.types.WORKSPACE,
- );
- });
- });
-
- suite('Test workspace listener', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- previousStatement: null,
- nextStatement: null,
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
- this.workspaceChangeListener = this.navigation.wsChangeWrapper;
- this.basicBlockA = this.workspace.newBlock('basic_block');
- });
-
- teardown(function () {
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- delete Blockly.Blocks['basic_block'];
- sinon.restore();
- });
-
- test('Handle block mutation', function () {
- const e = {
- type: Blockly.Events.BLOCK_CHANGE,
- element: 'mutation',
- blockId: this.basicBlockA.id,
- workspaceId: this.workspace.id,
- };
- const cursor = this.workspace.getCursor();
- const nextNode = Blockly.ASTNode.createConnectionNode(
- this.basicBlockA.nextConnection,
- );
- cursor.setCurNode(nextNode);
- this.workspaceChangeListener(e);
- chai.assert.equal(
- cursor.getCurNode().getType(),
- Blockly.ASTNode.types.BLOCK,
- );
- });
- test('Handle workspace click', function () {
- const e = {
- type: Blockly.Events.CLICK,
- workspaceId: this.workspace.id,
- };
- this.navigation.focusFlyout(this.workspace);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
-
- this.workspaceChangeListener(e);
-
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
- test('Focus toolbox if category clicked', function () {
- const e = {
- type: Blockly.Events.TOOLBOX_ITEM_SELECT,
- workspaceId: this.workspace.id,
- newItem: true,
- };
- const toolboxFocusStub = sinon.spy(this.navigation, 'focusToolbox');
-
- this.navigation.focusWorkspace(this.workspace);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
-
- this.workspaceChangeListener(e);
-
- sinon.assert.calledOnce(toolboxFocusStub);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.TOOLBOX,
- );
- });
- test('Focus workspace if toolbox is unselected', function () {
- const e = {
- type: Blockly.Events.TOOLBOX_ITEM_SELECT,
- workspaceId: this.workspace.id,
- newItem: false,
- };
- const resetFlyoutStub = sinon.spy(this.navigation, 'resetFlyout');
- this.navigation.setState(this.workspace, Constants.STATE.TOOLBOX);
-
- this.workspaceChangeListener(e);
-
- sinon.assert.calledOnce(resetFlyoutStub);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
- test('Focus workspace when block created on workspace', function () {
- const e = {
- type: Blockly.Events.BLOCK_CREATE,
- workspaceId: this.workspace.id,
- };
- const resetFlyoutStub = sinon.spy(this.navigation, 'resetFlyout');
- // Only works when someone is in the flyout.
- this.navigation.setState(this.workspace, Constants.STATE.FLYOUT);
-
- this.workspaceChangeListener(e);
-
- sinon.assert.calledOnce(resetFlyoutStub);
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.WORKSPACE,
- );
- });
- });
-
- suite('Test simple flyout listener', function () {
- setup(function () {
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '%1',
- args0: [
- {
- type: 'field_input',
- name: 'TEXTFIELD',
- text: 'test',
- },
- ],
- },
- ]);
- this.workspace = createNavigationWorkspace(this.navigation, true);
- this.flyoutChangeListener = this.navigation.flyoutChangeWrapper;
- this.basicBlockA = this.workspace.newBlock('basic_block');
-
- this.navigation.focusToolbox(this.workspace);
- this.workspace.getFlyout().autoClose = false;
- });
-
- teardown(function () {
- delete Blockly.Blocks['basic_block'];
- this.navigation.removeWorkspace(this.workspace);
- this.workspace.dispose();
- sinon.restore();
- });
- test('Handle block click in flyout - click event', function () {
- const flyout = this.workspace.getFlyout();
- const flyoutWorkspace = flyout.getWorkspace();
- const firstFlyoutBlock = flyoutWorkspace.getTopBlocks()[0];
- const e = {
- type: Blockly.Events.CLICK,
- workspaceId: flyoutWorkspace.id,
- targetType: 'block',
- blockId: firstFlyoutBlock.id,
- };
- const flyoutCursor = flyoutWorkspace.getCursor();
- this.navigation.focusWorkspace(this.workspace);
-
- this.flyoutChangeListener(e);
-
- chai.assert.equal(
- flyoutCursor.getCurNode().getType(),
- Blockly.ASTNode.types.STACK,
- );
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
- });
- test('Handle block click in flyout - select event', function () {
- const flyout = this.workspace.getFlyout();
- const flyoutWorkspace = flyout.getWorkspace();
- const firstFlyoutBlock = flyoutWorkspace.getTopBlocks()[0];
- const e = {
- type: Blockly.Events.SELECTED,
- workspaceId: flyoutWorkspace.id,
- newElementId: firstFlyoutBlock.id,
- };
- const flyoutCursor = flyoutWorkspace.getCursor();
- this.navigation.focusWorkspace(this.workspace);
-
- this.flyoutChangeListener(e);
-
- chai.assert.equal(
- flyoutCursor.getCurNode().getType(),
- Blockly.ASTNode.types.STACK,
- );
- chai.assert.equal(
- this.navigation.getState(this.workspace),
- Constants.STATE.FLYOUT,
- );
- });
- });
-
- suite('Test clean up methods', function () {
- setup(function () {
- this.workspace = createNavigationWorkspace(this.navigation, true);
- });
- test('All listeners and markers removed', function () {
- const numListeners = this.workspace.listeners.length;
- const markerName = this.navigation.MARKER_NAME;
- this.navigation.removeWorkspace(this.workspace);
- chai.assert.equal(this.workspace.listeners.length, numListeners - 1);
-
- const marker = this.workspace.getMarkerManager().getMarker(markerName);
- chai.assert.isNull(marker);
- });
- test('Keyboard accessibility mode can not be enabled', function () {
- this.navigation.removeWorkspace(this.workspace);
- this.navigation.enableKeyboardAccessibility(this.workspace);
- chai.assert.isFalse(this.workspace.keyboardAccessibilityMode);
- });
- test('Dispose', function () {
- const numListeners = this.workspace.listeners.length;
- const flyout = this.workspace.getFlyout();
- const numFlyoutListeners = flyout.getWorkspace().listeners.length;
- this.navigation.dispose();
- chai.assert.equal(this.workspace.listeners.length, numListeners - 1);
- chai.assert.equal(
- flyout.getWorkspace().listeners.length,
- numFlyoutListeners - 1,
- );
- });
- });
-});
diff --git a/plugins/keyboard-navigation/test/shortcuts_test.mocha.js b/plugins/keyboard-navigation/test/shortcuts_test.mocha.js
deleted file mode 100644
index 4e19095210..0000000000
--- a/plugins/keyboard-navigation/test/shortcuts_test.mocha.js
+++ /dev/null
@@ -1,531 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-const sinon = require('sinon');
-const chai = require('chai');
-
-const Blockly = require('blockly');
-
-const {NavigationController} = require('../src/index');
-const {
- createNavigationWorkspace,
- createKeyDownEvent,
-} = require('./test_helper');
-
-suite('Shortcut Tests', function () {
- setup(function () {
- this.jsdomCleanup = require('jsdom-global')(
- '
',
- );
- // We are running these tests in node even thought they require a rendered
- // workspace, which doesn't exactly work. The rendering system expects
- // cancelAnimationFrame to be defined so we need to define it.
- window.cancelAnimationFrame = function () {};
-
- Blockly.utils.dom.getFastTextWidthWithSizeString = function () {
- return 10;
- };
- Blockly.defineBlocksWithJsonArray([
- {
- type: 'basic_block',
- message0: '',
- previousStatement: null,
- nextStatement: null,
- },
- ]);
- this.controller = new NavigationController();
- this.controller.init();
- this.navigation = this.controller.navigation;
- this.workspace = createNavigationWorkspace(this.navigation, true);
- this.controller.addWorkspace(this.workspace);
- this.basicBlock = this.workspace.newBlock('basic_block');
- });
-
- teardown(function () {
- window.cancelAnimationFrame = undefined;
- this.controller.dispose();
- this.workspace.dispose();
- this.jsdomCleanup();
- delete Blockly.Blocks['basic_block'];
- });
-
- suite('Deleting blocks', function () {
- setup(function () {
- const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock);
- this.workspace.getCursor().setCurNode(blockNode);
- });
-
- teardown(function () {
- sinon.restore();
- });
-
- const testCases = [
- {
- name: 'Delete',
- deleteEvent: createKeyDownEvent(
- Blockly.utils.KeyCodes.DELETE,
- 'NotAField',
- ),
- },
- {
- name: 'Backspace',
- deleteEvent: createKeyDownEvent(
- Blockly.utils.KeyCodes.BACKSPACE,
- 'NotAField',
- ),
- },
- ];
-
- suite('delete keybinds trigger deletion', function () {
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.deleteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 0,
- 'Expected the block to be deleted.',
- );
- });
- });
- });
-
- suite(
- 'delete keybinds do not trigger deletion if workspace is readonly',
- function () {
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- this.workspace.options.readOnly = true;
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.deleteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be deleted.',
- );
- });
- });
- },
- );
- });
-
- suite('Copy and paste', function () {
- teardown(function () {
- sinon.restore();
- });
- const testCases = [
- {
- name: 'Control',
- copyEvent: createKeyDownEvent(Blockly.utils.KeyCodes.C, 'NotAField', [
- Blockly.utils.KeyCodes.CTRL,
- ]),
- pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [
- Blockly.utils.KeyCodes.CTRL,
- ]),
- },
- {
- name: 'Meta',
- copyEvent: createKeyDownEvent(Blockly.utils.KeyCodes.C, 'NotAField', [
- Blockly.utils.KeyCodes.META,
- ]),
- pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [
- Blockly.utils.KeyCodes.META,
- ]),
- },
- {
- name: 'Alt',
- copyEvent: createKeyDownEvent(Blockly.utils.KeyCodes.C, 'NotAField', [
- Blockly.utils.KeyCodes.ALT,
- ]),
- pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [
- Blockly.utils.KeyCodes.ALT,
- ]),
- },
- ];
-
- suite('copy and paste keybinds duplicate blocks', function () {
- setup(function () {
- const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock);
- this.workspace.getCursor().setCurNode(blockNode);
- });
-
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.copyEvent,
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 2,
- 'Expected the block to be duplicated.',
- );
- });
- });
- });
-
- suite(
- 'copy and paste does nothing if the cursor is not on a block',
- function () {
- setup(function () {
- const workspaceNode = Blockly.ASTNode.createWorkspaceNode(
- this.workspace,
- new Blockly.utils.Coordinate(100, 100),
- );
- this.workspace.getCursor().setCurNode(workspaceNode);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.copyEvent,
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
-
- suite(
- 'copy and paste do nothing if the cursor is on a shadow block',
- function () {
- setup(function () {
- this.basicBlock.setShadow(true);
- const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock);
- this.workspace.getCursor().setCurNode(blockNode);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.copyEvent,
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
-
- suite(
- 'copy and paste do nothing if the workspace is readonly',
- function () {
- setup(function () {
- this.workspace.options.readonly = true;
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.copyEvent,
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
-
- suite('copy and paste do nothing if a gesture is in progress', function () {
- setup(function () {
- sinon.stub(Blockly.Gesture, 'inProgress').returns(true);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.copyEvent,
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- });
-
- suite(
- 'copy and paste do nothing if the block is not deletable',
- function () {
- setup(function () {
- this.basicBlock.setDeletable(false);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.copyEvent,
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
- });
-
- suite('Cut and paste', function () {
- teardown(function () {
- sinon.restore();
- });
- const testCases = [
- {
- name: 'Control',
- cutEvent: createKeyDownEvent(Blockly.utils.KeyCodes.X, 'NotAField', [
- Blockly.utils.KeyCodes.CTRL,
- ]),
- pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [
- Blockly.utils.KeyCodes.CTRL,
- ]),
- },
- {
- name: 'Meta',
- cutEvent: createKeyDownEvent(Blockly.utils.KeyCodes.X, 'NotAField', [
- Blockly.utils.KeyCodes.META,
- ]),
- pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [
- Blockly.utils.KeyCodes.META,
- ]),
- },
- {
- name: 'Alt',
- cutEvent: createKeyDownEvent(Blockly.utils.KeyCodes.X, 'NotAField', [
- Blockly.utils.KeyCodes.ALT,
- ]),
- pasteEvent: createKeyDownEvent(Blockly.utils.KeyCodes.V, 'NotAField', [
- Blockly.utils.KeyCodes.ALT,
- ]),
- },
- ];
-
- suite('cut and paste keybinds duplicate blocks', function () {
- setup(function () {
- const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock);
- this.workspace.getCursor().setCurNode(blockNode);
- });
-
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.cutEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 0,
- 'Expected the block to be deleted.',
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to be duplicated.',
- );
- });
- });
- });
-
- suite(
- 'cut and paste does nothing if the cursor is not on a block',
- function () {
- setup(function () {
- const workspaceNode = Blockly.ASTNode.createWorkspaceNode(
- this.workspace,
- new Blockly.utils.Coordinate(100, 100),
- );
- this.workspace.getCursor().setCurNode(workspaceNode);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.cutEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be deleted.',
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
-
- suite(
- 'cut and paste do nothing if the cursor is on a shadow block',
- function () {
- setup(function () {
- this.basicBlock.setShadow(true);
- const blockNode = Blockly.ASTNode.createBlockNode(this.basicBlock);
- this.workspace.getCursor().setCurNode(blockNode);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.cutEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be deleted.',
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
-
- suite('cut and paste do nothing if the workspace is readonly', function () {
- setup(function () {
- this.workspace.options.readonly = true;
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.cutEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be deleted.',
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- });
-
- suite('cut and paste do nothing if a gesture is in progress', function () {
- setup(function () {
- sinon.stub(Blockly.Gesture, 'inProgress').returns(true);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.cutEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be deleted.',
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- });
-
- suite(
- 'cut and paste do nothing if the block is not deletable',
- function () {
- setup(function () {
- this.basicBlock.setDeletable(false);
- });
- testCases.forEach(function (testCase) {
- test(testCase.name, function () {
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.cutEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be deleted.',
- );
- Blockly.ShortcutRegistry.registry.onKeyDown(
- this.workspace,
- testCase.pasteEvent,
- );
- chai.assert.equal(
- this.workspace.getTopBlocks().length,
- 1,
- 'Expected the block to not be duplicated.',
- );
- });
- });
- },
- );
- });
-});
diff --git a/plugins/keyboard-navigation/test/test_helper.js b/plugins/keyboard-navigation/test/test_helper.js
deleted file mode 100644
index 99abcb5fb3..0000000000
--- a/plugins/keyboard-navigation/test/test_helper.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * @license
- * Copyright 2021 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-const {Constants} = require('../src/index');
-const {Navigation} = require('../src/index');
-const Blockly = require('blockly/core');
-
-/**
- * Creates a workspace for testing keyboard navigation.
- * @param {Navigation} navigation Object holding navigation classes.
- * @param {boolean} enableKeyboardNav True to enable keyboard navigation, false
- * otherwise.
- * @param {boolean} readOnly True for a read only workspace, false otherwise.
- * @returns {Blockly.WorkspaceSvg} The created workspace.
- */
-export function createNavigationWorkspace(
- navigation,
- enableKeyboardNav,
- readOnly,
-) {
- const workspace = Blockly.inject('blocklyDiv', {
- toolbox: `
-
-
-
- first
-
-
- second
-
-
-
-
- third
-
-
-
- `,
- readOnly: readOnly,
- });
- if (enableKeyboardNav) {
- navigation.addWorkspace(workspace);
- navigation.enableKeyboardAccessibility(workspace);
- navigation.setState(workspace, Constants.STATE.WORKSPACE);
- }
- return workspace;
-}
-
-/**
- * Creates a key down event used for testing.
- * @param {number} keyCode The keycode for the event. Use Blockly.utils.KeyCodes
- * enum.
- * @param {string} type The type of the target. This only matters for the
- * Blockly.utils.isTargetInput method.
- * @param {?Array} modifiers A list of modifiers. Use
- * Blockly.utils.KeyCodes enum.
- * @returns {Object} The mocked keydown
- * event.
- */
-export function createKeyDownEvent(keyCode, type, modifiers) {
- const event = {
- keyCode: keyCode,
- target: {type: type},
- getModifierState: function (name) {
- if (name == 'Shift' && this.shiftKey) {
- return true;
- } else if (name == 'Control' && this.ctrlKey) {
- return true;
- } else if (name == 'Meta' && this.metaKey) {
- return true;
- } else if (name == 'Alt' && this.altKey) {
- return true;
- }
- return false;
- },
- preventDefault: function () {},
- };
- if (modifiers && modifiers.length) {
- event.altKey = modifiers.includes(Blockly.utils.KeyCodes.ALT);
- event.ctrlKey = modifiers.includes(Blockly.utils.KeyCodes.CTRL);
- event.metaKey = modifiers.includes(Blockly.utils.KeyCodes.META);
- event.shiftKey = modifiers.includes(Blockly.utils.KeyCodes.SHIFT);
- }
- return event;
-}
diff --git a/plugins/keyboard-navigation/test/toolbox.js b/plugins/keyboard-navigation/test/toolbox.js
deleted file mode 100644
index 95dd4ff7bd..0000000000
--- a/plugins/keyboard-navigation/test/toolbox.js
+++ /dev/null
@@ -1,218 +0,0 @@
-/**
- * @license
- * Copyright 2024 Google LLC
- * SPDX-License-Identifier: Apache-2.0
- */
-
-/**
- * @fileoverview A custom toolbox for the plugin test.
- */
-
-export const toolbox = {
- kind: 'categoryToolbox',
- contents: [
- {
- kind: 'category',
- name: 'Logic',
- categorystyle: 'logic_category',
- contents: [
- {
- type: 'controls_if',
- kind: 'block',
- },
- {
- type: 'logic_compare',
- kind: 'block',
- fields: {
- OP: 'EQ',
- },
- },
- {
- type: 'logic_operation',
- kind: 'block',
- fields: {
- OP: 'AND',
- },
- },
- ],
- },
- {
- kind: 'category',
- name: 'Loops',
- categorystyle: 'loop_category',
- contents: [
- {
- type: 'controls_repeat_ext',
- kind: 'block',
- inputs: {
- TIMES: {
- shadow: {
- type: 'math_number',
- fields: {
- NUM: 10,
- },
- },
- },
- },
- },
- {
- type: 'controls_repeat',
- kind: 'block',
- enabled: false,
- fields: {
- TIMES: 10,
- },
- },
- {
- type: 'controls_whileUntil',
- kind: 'block',
- fields: {
- MODE: 'WHILE',
- },
- },
- {
- type: 'controls_for',
- kind: 'block',
- fields: {
- VAR: {
- name: 'i',
- },
- },
- inputs: {
- FROM: {
- shadow: {
- type: 'math_number',
- fields: {
- NUM: 1,
- },
- },
- },
- TO: {
- shadow: {
- type: 'math_number',
- fields: {
- NUM: 10,
- },
- },
- },
- BY: {
- shadow: {
- type: 'math_number',
- fields: {
- NUM: 1,
- },
- },
- },
- },
- },
- {
- type: 'controls_forEach',
- kind: 'block',
- fields: {
- VAR: {
- name: 'j',
- },
- },
- },
- {
- type: 'controls_flow_statements',
- kind: 'block',
- enabled: false,
- fields: {
- FLOW: 'BREAK',
- },
- },
- ],
- },
- {
- kind: 'sep',
- },
- {
- kind: 'category',
- name: 'Variables',
- custom: 'VARIABLE',
- categorystyle: 'variable_category',
- },
- {
- kind: 'category',
- name: 'Buttons and Blocks',
- categorystyle: 'loop_category',
- contents: [
- {
- type: 'controls_repeat',
- kind: 'block',
- fields: {
- TIMES: 10,
- },
- },
- {
- kind: 'BUTTON',
- text: 'Randomize Button Style',
- callbackkey: 'setRandomStyle',
- },
- {
- kind: 'BUTTON',
- text: 'Randomize Button Style',
- callbackkey: 'setRandomStyle',
- },
- {
- type: 'controls_repeat',
- kind: 'block',
- fields: {
- TIMES: 10,
- },
- },
- {
- kind: 'BUTTON',
- text: 'Randomize Button Style',
- callbackkey: 'setRandomStyle',
- },
- ],
- },
- {
- kind: 'sep',
- },
- {
- kind: 'category',
- name: 'Nested Categories',
- contents: [
- {
- kind: 'category',
- name: 'sub-category 1',
- contents: [
- {
- kind: 'BUTTON',
- text: 'Randomize Button Style',
- callbackkey: 'setRandomStyle',
- },
- {
- type: 'logic_boolean',
- kind: 'block',
- fields: {
- BOOL: 'TRUE',
- },
- },
- ],
- },
- {
- kind: 'category',
- name: 'sub-category 2',
- contents: [
- {
- type: 'logic_boolean',
- kind: 'block',
- fields: {
- BOOL: 'FALSE',
- },
- },
- {
- kind: 'BUTTON',
- text: 'Randomize Button Style',
- callbackkey: 'setRandomStyle',
- },
- ],
- },
- ],
- },
- ],
-};
From 91a8473736b5c0cc3e04c809f4a888469bc96f77 Mon Sep 17 00:00:00 2001
From: Erik Pasternak
Date: Wed, 14 May 2025 14:20:12 -0700
Subject: [PATCH 08/33] fix: Fix multi-line text color by using the correct
class
---
plugins/field-multilineinput/src/field_multilineinput.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/field-multilineinput/src/field_multilineinput.ts b/plugins/field-multilineinput/src/field_multilineinput.ts
index 74415f18cd..ac20d8ac01 100644
--- a/plugins/field-multilineinput/src/field_multilineinput.ts
+++ b/plugins/field-multilineinput/src/field_multilineinput.ts
@@ -141,7 +141,7 @@ export class FieldMultilineInput extends Blockly.FieldTextInput {
this.textGroup = Blockly.utils.dom.createSvgElement(
Blockly.utils.Svg.G,
{
- class: 'blocklyEditableText',
+ class: 'blocklyEditableField',
},
this.fieldGroup_,
);
From 97965f34dd6de35623ec115806325c1a9a4e09ab Mon Sep 17 00:00:00 2001
From: Erik Pasternak
Date: Wed, 14 May 2025 14:36:10 -0700
Subject: [PATCH 09/33] Update bitmap class
---
plugins/field-bitmap/src/field-bitmap.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/field-bitmap/src/field-bitmap.ts b/plugins/field-bitmap/src/field-bitmap.ts
index b8f2db67d2..2ac6cb2ee1 100644
--- a/plugins/field-bitmap/src/field-bitmap.ts
+++ b/plugins/field-bitmap/src/field-bitmap.ts
@@ -245,8 +245,8 @@ export class FieldBitmap extends Blockly.Field {
// lines.
const svgRoot = this.getSvgRoot();
if (svgRoot) {
- Blockly.utils.dom.removeClass(svgRoot, 'blocklyNonEditableText');
- Blockly.utils.dom.removeClass(svgRoot, 'blocklyEditableText');
+ Blockly.utils.dom.removeClass(svgRoot, 'blocklyNonEditableField');
+ Blockly.utils.dom.removeClass(svgRoot, 'blocklyEditableField');
}
return editable;
}
From e3b1054eb0b511aa4ab270725c989369270ee8d6 Mon Sep 17 00:00:00 2001
From: Erik Pasternak
Date: Wed, 14 May 2025 15:36:24 -0700
Subject: [PATCH 10/33] fix: Wait for an animation frame before showing the
date picker
---
plugins/field-date/src/field_date.ts | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/plugins/field-date/src/field_date.ts b/plugins/field-date/src/field_date.ts
index 0ec7c4846a..4f86ca6285 100644
--- a/plugins/field-date/src/field_date.ts
+++ b/plugins/field-date/src/field_date.ts
@@ -142,14 +142,17 @@ export class FieldDate extends Blockly.FieldTextInput {
if (!this.htmlInput_) return;
Blockly.utils.dom.addClass(this.htmlInput_, 'blocklyDateInput');
- // NOTE: HTMLInputElement.showPicker() is not available in earlier
- // TypeScript versions (like 4.7.4), so casting to `any` to be compatible
- // with dev scripts. Additionally, it's not available for date inputs for
- // Safari. For browser compatibility of showPicker, see:
- // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/showPicker
- /* eslint-disable @typescript-eslint/no-explicit-any */
- (this.htmlInput_ as any).showPicker();
- /* eslint-enable @typescript-eslint/no-explicit-any */
+ // Delay showing the picker until the editor has a chance to position
+ window.requestAnimationFrame(() => {
+ // NOTE: HTMLInputElement.showPicker() is not available in earlier
+ // TypeScript versions (like 4.7.4), so casting to `any` to be compatible
+ // with dev scripts. Additionally, it's not available for date inputs for
+ // Safari. For browser compatibility of showPicker, see:
+ // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/showPicker
+ /* eslint-disable @typescript-eslint/no-explicit-any */
+ (this.htmlInput_ as any).showPicker();
+ /* eslint-enable @typescript-eslint/no-explicit-any */
+ });
}
/**
From 962e6a73c17cc55f1f88d1d226797db4a3fd2342 Mon Sep 17 00:00:00 2001
From: Christopher Allen
Date: Tue, 6 May 2025 19:07:23 +0100
Subject: [PATCH 11/33] fix: Fix clean:node script
This was inadvertently broken by a mistranscription in PR #2453.
From d83ea84ca1baed99cbd83152756f11fce4c0e7c0 Mon Sep 17 00:00:00 2001
From: Christopher Allen
Date: Tue, 6 May 2025 19:25:58 +0100
Subject: [PATCH 12/33] chore(deps): Update blockly to v12.0.0-beta.4
From 20ab15adf6f6103a5f7e345953dab40cd0a82fe9 Mon Sep 17 00:00:00 2001
From: Christopher Allen
Date: Tue, 6 May 2025 19:27:27 +0100
Subject: [PATCH 13/33] fix(FieldColour): Fix type of
FieldColour.prototype.isFullBlockField
Method on superclass became public in v12.0.0.
From 55e188cd680f67bff6928a6f244d85c090a14cb0 Mon Sep 17 00:00:00 2001
From: Christopher Allen
Date: Wed, 7 May 2025 17:34:18 +0100
Subject: [PATCH 14/33] fix(FieldMultilineInput): Use string literal instead of
Field.NBSP
Workaround for removal of that constant in google/blockly#8738.
From bf2878c7e24e1f36fdd75db95963dc73eee0908c Mon Sep 17 00:00:00 2001
From: Christopher Allen
Date: Wed, 7 May 2025 23:29:16 +0100
Subject: [PATCH 15/33] fix(FieldGridDropdown): Fix type error caused by
separators
From 78badf57878f7a05944990da099c4fa79dcce6c3 Mon Sep 17 00:00:00 2001
From: Christopher Allen
Date: Thu, 8 May 2025 02:45:56 +0100
Subject: [PATCH 16/33] chore(deps): Update blockly to v12.0.0-beta.5
---
package-lock.json | 627 +++++++++++++++++++++++++++-------------------
package.json | 2 +-
2 files changed, 364 insertions(+), 265 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 8d22bf4faf..b7c797da98 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
"@eslint/js": "^8.49.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "blockly": "^12.0.0-beta.4",
+ "blockly": "^12.0.0-beta.5",
"conventional-changelog-conventionalcommits": "^5.0.0",
"eslint": "^8.49.0",
"eslint-config-google": "^0.14.0",
@@ -42,6 +42,27 @@
"node": ">=0.10.0"
}
},
+ "node_modules/@asamuzakjp/css-color": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.7.tgz",
+ "integrity": "sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/css-calc": "^2.1.3",
+ "@csstools/css-color-parser": "^3.0.9",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "lru-cache": "^10.4.3"
+ }
+ },
+ "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/@babel/code-frame": {
"version": "7.22.13",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
@@ -105,6 +126,121 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@csstools/color-helpers": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
+ "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@csstools/css-calc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz",
+ "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/@csstools/css-color-parser": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz",
+ "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/color-helpers": "^5.0.2",
+ "@csstools/css-calc": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/@csstools/css-parser-algorithms": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
+ "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/@csstools/css-tokenizer": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
+ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@es-joy/jsdoccomment": {
"version": "0.40.1",
"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz",
@@ -827,12 +963,6 @@
"node": ">= 10.13.0"
}
},
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true
- },
"node_modules/b4a": {
"version": "1.6.6",
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
@@ -911,12 +1041,13 @@
}
},
"node_modules/blockly": {
- "version": "12.0.0-beta.4",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.4.tgz",
- "integrity": "sha512-KY26RP8GfJRTqX/EUWSwu7ilVwhdGU0qQTrgdUGl+frsgqlBqCtIWZJVCxMafCAUWyAlU9+5aQ7UBItcR2MVQQ==",
+ "version": "12.0.0-beta.5",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.5.tgz",
+ "integrity": "sha512-DkCVP9BB5bT5rTTCLv/u3/wzlQ/oXm7eRZXMByoS3RRClrCbUg+4ByVnDTgSM5qOfX1OIczGMqGMQfaKN17EnA==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "jsdom": "25.0.1"
+ "jsdom": "26.1.0"
},
"engines": {
"node": ">=18"
@@ -1143,18 +1274,6 @@
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/commander": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
@@ -1288,12 +1407,14 @@
}
},
"node_modules/cssstyle": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
- "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz",
+ "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "rrweb-cssom": "^0.7.1"
+ "@asamuzakjp/css-color": "^3.1.2",
+ "rrweb-cssom": "^0.8.0"
},
"engines": {
"node": ">=18"
@@ -1304,6 +1425,7 @@
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
"integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"whatwg-mimetype": "^4.0.0",
"whatwg-url": "^14.0.0"
@@ -1364,10 +1486,11 @@
}
},
"node_modules/decimal.js": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
- "dev": true
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
+ "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/decompress-response": {
"version": "6.0.0",
@@ -1420,15 +1543,6 @@
"node": ">=10"
}
},
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/detect-file": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
@@ -1497,10 +1611,11 @@
}
},
"node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz",
+ "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
@@ -2226,20 +2341,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/form-data": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
- "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
- "dev": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
@@ -2902,6 +3003,7 @@
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
"integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"agent-base": "^7.1.0",
"debug": "^4.3.4"
@@ -2911,13 +3013,11 @@
}
},
"node_modules/http-proxy-agent/node_modules/agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
"dev": true,
- "dependencies": {
- "debug": "^4.3.4"
- },
+ "license": "MIT",
"engines": {
"node": ">= 14"
}
@@ -3309,7 +3409,8 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
"integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/is-relative": {
"version": "1.0.0",
@@ -3551,30 +3652,30 @@
}
},
"node_modules/jsdom": {
- "version": "25.0.1",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
- "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
+ "version": "26.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "cssstyle": "^4.1.0",
+ "cssstyle": "^4.2.1",
"data-urls": "^5.0.0",
- "decimal.js": "^10.4.3",
- "form-data": "^4.0.0",
+ "decimal.js": "^10.5.0",
"html-encoding-sniffer": "^4.0.0",
"http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.5",
+ "https-proxy-agent": "^7.0.6",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.12",
- "parse5": "^7.1.2",
- "rrweb-cssom": "^0.7.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
"saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
- "tough-cookie": "^5.0.0",
+ "tough-cookie": "^5.1.1",
"w3c-xmlserializer": "^5.0.0",
"webidl-conversions": "^7.0.0",
"whatwg-encoding": "^3.1.1",
"whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0",
+ "whatwg-url": "^14.1.1",
"ws": "^8.18.0",
"xml-name-validator": "^5.0.0"
},
@@ -3582,7 +3683,7 @@
"node": ">=18"
},
"peerDependencies": {
- "canvas": "^2.11.2"
+ "canvas": "^3.0.0"
},
"peerDependenciesMeta": {
"canvas": {
@@ -3591,13 +3692,11 @@
}
},
"node_modules/jsdom/node_modules/agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
"dev": true,
- "dependencies": {
- "debug": "^4.3.4"
- },
+ "license": "MIT",
"engines": {
"node": ">= 14"
}
@@ -3607,6 +3706,7 @@
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
"integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"whatwg-encoding": "^3.1.1"
},
@@ -3615,12 +3715,13 @@
}
},
"node_modules/jsdom/node_modules/https-proxy-agent": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
- "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "agent-base": "^7.0.2",
+ "agent-base": "^7.1.2",
"debug": "4"
},
"engines": {
@@ -3632,6 +3733,7 @@
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
"integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"iconv-lite": "0.6.3"
},
@@ -3888,27 +3990,6 @@
"node": ">=4"
}
},
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
@@ -4055,10 +4136,11 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.16",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz",
- "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==",
- "dev": true
+ "version": "2.2.20",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
+ "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/object-assign": {
"version": "4.1.1",
@@ -4263,12 +4345,13 @@
}
},
"node_modules/parse5": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
- "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "entities": "^4.5.0"
+ "entities": "^6.0.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
@@ -4760,10 +4843,11 @@
}
},
"node_modules/rrweb-cssom": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
- "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
- "dev": true
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/run-parallel": {
"version": "1.2.0",
@@ -4805,6 +4889,7 @@
"resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
"integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"xmlchars": "^2.2.0"
},
@@ -5130,7 +5215,8 @@
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/teex": {
"version": "1.0.1",
@@ -5167,22 +5253,24 @@
}
},
"node_modules/tldts": {
- "version": "6.1.65",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.65.tgz",
- "integrity": "sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ==",
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
+ "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "tldts-core": "^6.1.65"
+ "tldts-core": "^6.1.86"
},
"bin": {
"tldts": "bin/cli.js"
}
},
"node_modules/tldts-core": {
- "version": "6.1.65",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.65.tgz",
- "integrity": "sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg==",
- "dev": true
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
+ "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/to-regex-range": {
"version": "5.0.1",
@@ -5209,10 +5297,11 @@
}
},
"node_modules/tough-cookie": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
- "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"tldts": "^6.1.32"
},
@@ -5221,10 +5310,11 @@
}
},
"node_modules/tr46": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
- "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
+ "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"punycode": "^2.3.1"
},
@@ -5531,6 +5621,7 @@
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
"integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"xml-name-validator": "^5.0.0"
},
@@ -5543,6 +5634,7 @@
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=12"
}
@@ -5564,17 +5656,19 @@
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
"integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/whatwg-url": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz",
- "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==",
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+ "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "tr46": "^5.0.0",
+ "tr46": "^5.1.0",
"webidl-conversions": "^7.0.0"
},
"engines": {
@@ -5653,10 +5747,11 @@
"dev": true
},
"node_modules/ws": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
- "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+ "version": "8.18.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz",
+ "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10.0.0"
},
@@ -5678,6 +5773,7 @@
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
"integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=18"
}
@@ -5686,7 +5782,8 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/xtend": {
"version": "4.0.2",
@@ -5759,6 +5856,27 @@
"integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
"dev": true
},
+ "@asamuzakjp/css-color": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.7.tgz",
+ "integrity": "sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g==",
+ "dev": true,
+ "requires": {
+ "@csstools/css-calc": "^2.1.3",
+ "@csstools/css-color-parser": "^3.0.9",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "lru-cache": "^10.4.3"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ }
+ }
+ },
"@babel/code-frame": {
"version": "7.22.13",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
@@ -5805,6 +5923,40 @@
"js-tokens": "^4.0.0"
}
},
+ "@csstools/color-helpers": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
+ "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==",
+ "dev": true
+ },
+ "@csstools/css-calc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz",
+ "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==",
+ "dev": true
+ },
+ "@csstools/css-color-parser": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz",
+ "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==",
+ "dev": true,
+ "requires": {
+ "@csstools/color-helpers": "^5.0.2",
+ "@csstools/css-calc": "^2.1.3"
+ }
+ },
+ "@csstools/css-parser-algorithms": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
+ "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
+ "dev": true
+ },
+ "@csstools/css-tokenizer": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
+ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
+ "dev": true
+ },
"@es-joy/jsdoccomment": {
"version": "0.40.1",
"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz",
@@ -6309,12 +6461,6 @@
"async-done": "^2.0.0"
}
},
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true
- },
"b4a": {
"version": "1.6.6",
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
@@ -6367,12 +6513,12 @@
"dev": true
},
"blockly": {
- "version": "12.0.0-beta.4",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.4.tgz",
- "integrity": "sha512-KY26RP8GfJRTqX/EUWSwu7ilVwhdGU0qQTrgdUGl+frsgqlBqCtIWZJVCxMafCAUWyAlU9+5aQ7UBItcR2MVQQ==",
+ "version": "12.0.0-beta.5",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.5.tgz",
+ "integrity": "sha512-DkCVP9BB5bT5rTTCLv/u3/wzlQ/oXm7eRZXMByoS3RRClrCbUg+4ByVnDTgSM5qOfX1OIczGMqGMQfaKN17EnA==",
"dev": true,
"requires": {
- "jsdom": "25.0.1"
+ "jsdom": "26.1.0"
}
},
"brace-expansion": {
@@ -6545,15 +6691,6 @@
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
"commander": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
@@ -6667,12 +6804,13 @@
}
},
"cssstyle": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
- "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz",
+ "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==",
"dev": true,
"requires": {
- "rrweb-cssom": "^0.7.1"
+ "@asamuzakjp/css-color": "^3.1.2",
+ "rrweb-cssom": "^0.8.0"
}
},
"data-urls": {
@@ -6719,9 +6857,9 @@
}
},
"decimal.js": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
+ "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
"dev": true
},
"decompress-response": {
@@ -6759,12 +6897,6 @@
"integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
"dev": true
},
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true
- },
"detect-file": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
@@ -6821,9 +6953,9 @@
}
},
"entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz",
+ "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==",
"dev": true
},
"error-ex": {
@@ -7342,17 +7474,6 @@
"for-in": "^1.0.1"
}
},
- "form-data": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
- "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
"fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
@@ -7864,13 +7985,10 @@
},
"dependencies": {
"agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
- "dev": true,
- "requires": {
- "debug": "^4.3.4"
- }
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "dev": true
}
}
},
@@ -8334,42 +8452,38 @@
"dev": true
},
"jsdom": {
- "version": "25.0.1",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
- "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
+ "version": "26.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
"dev": true,
"requires": {
- "cssstyle": "^4.1.0",
+ "cssstyle": "^4.2.1",
"data-urls": "^5.0.0",
- "decimal.js": "^10.4.3",
- "form-data": "^4.0.0",
+ "decimal.js": "^10.5.0",
"html-encoding-sniffer": "^4.0.0",
"http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.5",
+ "https-proxy-agent": "^7.0.6",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.12",
- "parse5": "^7.1.2",
- "rrweb-cssom": "^0.7.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
"saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
- "tough-cookie": "^5.0.0",
+ "tough-cookie": "^5.1.1",
"w3c-xmlserializer": "^5.0.0",
"webidl-conversions": "^7.0.0",
"whatwg-encoding": "^3.1.1",
"whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0",
+ "whatwg-url": "^14.1.1",
"ws": "^8.18.0",
"xml-name-validator": "^5.0.0"
},
"dependencies": {
"agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
- "dev": true,
- "requires": {
- "debug": "^4.3.4"
- }
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "dev": true
},
"html-encoding-sniffer": {
"version": "4.0.0",
@@ -8381,12 +8495,12 @@
}
},
"https-proxy-agent": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
- "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"dev": true,
"requires": {
- "agent-base": "^7.0.2",
+ "agent-base": "^7.1.2",
"debug": "4"
}
},
@@ -8599,21 +8713,6 @@
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"dev": true
},
- "mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
- "requires": {
- "mime-db": "1.52.0"
- }
- },
"mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
@@ -8723,9 +8822,9 @@
}
},
"nwsapi": {
- "version": "2.2.16",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz",
- "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==",
+ "version": "2.2.20",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
+ "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==",
"dev": true
},
"object-assign": {
@@ -8879,12 +8978,12 @@
"dev": true
},
"parse5": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
- "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
"dev": true,
"requires": {
- "entities": "^4.5.0"
+ "entities": "^6.0.0"
}
},
"path-exists": {
@@ -9238,9 +9337,9 @@
}
},
"rrweb-cssom": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
- "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
"dev": true
},
"run-parallel": {
@@ -9566,18 +9665,18 @@
}
},
"tldts": {
- "version": "6.1.65",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.65.tgz",
- "integrity": "sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ==",
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
+ "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
"dev": true,
"requires": {
- "tldts-core": "^6.1.65"
+ "tldts-core": "^6.1.86"
}
},
"tldts-core": {
- "version": "6.1.65",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.65.tgz",
- "integrity": "sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg==",
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
+ "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
"dev": true
},
"to-regex-range": {
@@ -9599,18 +9698,18 @@
}
},
"tough-cookie": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
- "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
"dev": true,
"requires": {
"tldts": "^6.1.32"
}
},
"tr46": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
- "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
+ "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
"dev": true,
"requires": {
"punycode": "^2.3.1"
@@ -9878,12 +9977,12 @@
"dev": true
},
"whatwg-url": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz",
- "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==",
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+ "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
"dev": true,
"requires": {
- "tr46": "^5.0.0",
+ "tr46": "^5.1.0",
"webidl-conversions": "^7.0.0"
}
},
@@ -9940,9 +10039,9 @@
"dev": true
},
"ws": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
- "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+ "version": "8.18.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz",
+ "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==",
"dev": true
},
"xml-name-validator": {
diff --git a/package.json b/package.json
index 8f4b7071c5..e91c57aaa2 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,7 @@
"@eslint/js": "^8.49.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "blockly": "^12.0.0-beta.4",
+ "blockly": "^12.0.0-beta.5",
"conventional-changelog-conventionalcommits": "^5.0.0",
"eslint": "^8.49.0",
"eslint-config-google": "^0.14.0",
From 6e9d3fe7dcf3fbe263fe154268683447b3ba8c9e Mon Sep 17 00:00:00 2001
From: Christopher Allen
Date: Thu, 8 May 2025 23:26:03 +0100
Subject: [PATCH 17/33] fix(fields): Implement getClass method
---
plugins/field-bitmap/src/field-bitmap.ts | 12 ++++++++++++
plugins/field-colour/src/field_colour.ts | 9 ---------
2 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/plugins/field-bitmap/src/field-bitmap.ts b/plugins/field-bitmap/src/field-bitmap.ts
index 2ac6cb2ee1..8a53a6327e 100644
--- a/plugins/field-bitmap/src/field-bitmap.ts
+++ b/plugins/field-bitmap/src/field-bitmap.ts
@@ -640,6 +640,18 @@ export class FieldBitmap extends Blockly.Field {
);
}
}
+
+ /**
+ * Returns this field's class.
+ *
+ * Used by keyboard navigation to look up the rules for navigating from this
+ * field.
+ *
+ * @returns This field's class.
+ */
+ getClass() {
+ return FieldBitmap;
+ }
}
interface Buttons {
diff --git a/plugins/field-colour/src/field_colour.ts b/plugins/field-colour/src/field_colour.ts
index 2e09727d4c..398e801379 100644
--- a/plugins/field-colour/src/field_colour.ts
+++ b/plugins/field-colour/src/field_colour.ts
@@ -728,15 +728,6 @@ export class FieldColour extends Blockly.Field {
// the static fromJson method.
return new this(options.colour, undefined, options);
}
-
- /**
- * Returns the class of this field.
- *
- * @returns FieldColour.
- */
- getClass() {
- return FieldColour;
- }
}
/** The default value for this field. */
From 43bdfabeb658331d3991430ec92589ba415dac75 Mon Sep 17 00:00:00 2001
From: Christopher Allen
Date: Thu, 8 May 2025 23:31:38 +0100
Subject: [PATCH 18/33] fix(FieldGridDropdown): Handle presence of HTMLElement
in MenuOptions
---
plugins/field-grid-dropdown/src/grid.ts | 38 +++++++++++++++++++++----
1 file changed, 33 insertions(+), 5 deletions(-)
diff --git a/plugins/field-grid-dropdown/src/grid.ts b/plugins/field-grid-dropdown/src/grid.ts
index 9208b77090..38388ff5c1 100644
--- a/plugins/field-grid-dropdown/src/grid.ts
+++ b/plugins/field-grid-dropdown/src/grid.ts
@@ -4,7 +4,13 @@
* SPDX-License-Identifier: Apache-2.0
*/
-import {utils, browserEvents, MenuOption, FieldDropdown} from 'blockly/core';
+import {
+ browserEvents,
+ FieldDropdown,
+ ImageProperties,
+ MenuOption,
+ utils,
+} from 'blockly/core';
import {GridItem} from './grid_item';
/**
@@ -100,11 +106,11 @@ export class Grid {
const [label, value] = item;
const content = (() => {
- if (typeof label === 'object') {
+ if (isImageProperties(label)) {
// Convert ImageProperties to an HTMLImageElement.
- const image = new Image(label['width'], label['height']);
- image.src = label['src'];
- image.alt = label['alt'] || '';
+ const image = new Image(label.width, label.height);
+ image.src = label.src;
+ image.alt = label.alt || '';
return image;
}
return label;
@@ -293,3 +299,25 @@ export class Grid {
return this.itemAtIndex(index);
}
}
+
+/**
+ * Returns whether or not an object conforms to the ImageProperties
+ * interface.
+ *
+ * @param obj The object to test.
+ * @returns True iff the object conforms to ImageProperties.
+ */
+function isImageProperties(obj: any): obj is ImageProperties {
+ return (
+ obj &&
+ typeof obj === 'object' &&
+ 'src' in obj &&
+ typeof obj.src === 'string' &&
+ 'alt' in obj &&
+ typeof obj.alt === 'string' &&
+ 'width' in obj &&
+ typeof obj.width === 'number' &&
+ 'height' in obj &&
+ typeof obj.height === 'number'
+ );
+}
From 1d805111af66714c2ffc5cd31a4e926aa4203c71 Mon Sep 17 00:00:00 2001
From: Aaron Dodson
Date: Wed, 14 May 2025 14:50:54 -0700
Subject: [PATCH 19/33] chore: Update to v12 beta 6.
---
package-lock.json | 14 +++++++-------
package.json | 2 +-
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index b7c797da98..5b63abc079 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
"@eslint/js": "^8.49.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "blockly": "^12.0.0-beta.5",
+ "blockly": "^12.0.0-beta.6",
"conventional-changelog-conventionalcommits": "^5.0.0",
"eslint": "^8.49.0",
"eslint-config-google": "^0.14.0",
@@ -1041,9 +1041,9 @@
}
},
"node_modules/blockly": {
- "version": "12.0.0-beta.5",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.5.tgz",
- "integrity": "sha512-DkCVP9BB5bT5rTTCLv/u3/wzlQ/oXm7eRZXMByoS3RRClrCbUg+4ByVnDTgSM5qOfX1OIczGMqGMQfaKN17EnA==",
+ "version": "12.0.0-beta.6",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.6.tgz",
+ "integrity": "sha512-LlecuVKaMVNCpQgjGmUfLeC1aJZP09Z7s1ENZnR2q2rUvJKlRUklnbsqrTR7nhSylZD3TlaPpODMW/92dj+GXA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -6513,9 +6513,9 @@
"dev": true
},
"blockly": {
- "version": "12.0.0-beta.5",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.5.tgz",
- "integrity": "sha512-DkCVP9BB5bT5rTTCLv/u3/wzlQ/oXm7eRZXMByoS3RRClrCbUg+4ByVnDTgSM5qOfX1OIczGMqGMQfaKN17EnA==",
+ "version": "12.0.0-beta.6",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.6.tgz",
+ "integrity": "sha512-LlecuVKaMVNCpQgjGmUfLeC1aJZP09Z7s1ENZnR2q2rUvJKlRUklnbsqrTR7nhSylZD3TlaPpODMW/92dj+GXA==",
"dev": true,
"requires": {
"jsdom": "26.1.0"
diff --git a/package.json b/package.json
index e91c57aaa2..0538662967 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,7 @@
"@eslint/js": "^8.49.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "blockly": "^12.0.0-beta.5",
+ "blockly": "^12.0.0-beta.6",
"conventional-changelog-conventionalcommits": "^5.0.0",
"eslint": "^8.49.0",
"eslint-config-google": "^0.14.0",
From 452051e02520803e7cf85e63e0bfb8191a838a98 Mon Sep 17 00:00:00 2001
From: Aaron Dodson
Date: Wed, 14 May 2025 14:51:04 -0700
Subject: [PATCH 20/33] fix: Fix the field-grid-dropdown tests.
---
plugins/field-grid-dropdown/test/field_test.mocha.js | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/plugins/field-grid-dropdown/test/field_test.mocha.js b/plugins/field-grid-dropdown/test/field_test.mocha.js
index 1e563caf18..6ba8fa1bea 100644
--- a/plugins/field-grid-dropdown/test/field_test.mocha.js
+++ b/plugins/field-grid-dropdown/test/field_test.mocha.js
@@ -70,9 +70,9 @@ suite('FieldGridDropdown', function () {
expectedText: 'a',
args: [
[
- [{src: 'scrA', alt: 'a'}, 'A'],
- [{src: 'scrB', alt: 'b'}, 'B'],
- [{src: 'scrC', alt: 'c'}, 'C'],
+ [{src: 'scrA', alt: 'a', width: 0, height: 0}, 'A'],
+ [{src: 'scrB', alt: 'b', width: 0, height: 0}, 'B'],
+ [{src: 'scrC', alt: 'c', width: 0, height: 0}, 'C'],
],
],
},
@@ -99,9 +99,9 @@ suite('FieldGridDropdown', function () {
args: [
() => {
return [
- [{src: 'scrA', alt: 'a'}, 'A'],
- [{src: 'scrB', alt: 'b'}, 'B'],
- [{src: 'scrC', alt: 'c'}, 'C'],
+ [{src: 'scrA', alt: 'a', width: 0, height: 0}, 'A'],
+ [{src: 'scrB', alt: 'b', width: 0, height: 0}, 'B'],
+ [{src: 'scrC', alt: 'c', width: 0, height: 0}, 'C'],
];
},
],
From 6bd39168b25b989056b642861a2983938db93187 Mon Sep 17 00:00:00 2001
From: Aaron Dodson
Date: Wed, 14 May 2025 15:29:00 -0700
Subject: [PATCH 21/33] fix: Fix shadow-block-converter tests.
---
.../shadow-block-converter/package-lock.json | 1314 +++++++----------
plugins/shadow-block-converter/package.json | 2 +-
.../test/shadow_block_converter_test.mocha.js | 38 +-
3 files changed, 560 insertions(+), 794 deletions(-)
diff --git a/plugins/shadow-block-converter/package-lock.json b/plugins/shadow-block-converter/package-lock.json
index 6de9e0efa3..f763a93dcb 100644
--- a/plugins/shadow-block-converter/package-lock.json
+++ b/plugins/shadow-block-converter/package-lock.json
@@ -12,7 +12,7 @@
"@blockly/dev-scripts": "^4.0.7",
"@blockly/dev-tools": "^8.1.0",
"chai": "^4.2.0",
- "jsdom": "^19.0.0",
+ "jsdom": "^26.1.0",
"jsdom-global": "^3.0.2",
"sinon": "^9.0.1",
"typescript": "^5.4.5"
@@ -24,6 +24,20 @@
"blockly": "^11.0.0"
}
},
+ "node_modules/@asamuzakjp/css-color": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.7.tgz",
+ "integrity": "sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/css-calc": "^2.1.3",
+ "@csstools/css-color-parser": "^3.0.9",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "lru-cache": "^10.4.3"
+ }
+ },
"node_modules/@babel/code-frame": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
@@ -218,10 +232,11 @@
}
},
"node_modules/@blockly/block-test": {
- "version": "6.0.7",
- "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-6.0.7.tgz",
- "integrity": "sha512-3F+HbgOjYKF8dvq3HoBKVQAv2ZZxgvdQQs9PsIOfj44jx2DXuKPrhr11c1AgxS1EIEFA/Gf0AvsUbBEvmB2DpA==",
+ "version": "6.0.11",
+ "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-6.0.11.tgz",
+ "integrity": "sha512-aIgcxkof1gLJtJXKSvmnug9iSXbv5Qilnov4Sa/QNURiWJRxvMNqWiTZJVu/reuCQK4Qm4jadg9R9l+eu7ujvw==",
"dev": true,
+ "license": "Apache 2.0",
"engines": {
"node": ">=8.17.0"
},
@@ -230,10 +245,11 @@
}
},
"node_modules/@blockly/dev-scripts": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@blockly/dev-scripts/-/dev-scripts-4.0.5.tgz",
- "integrity": "sha512-JVCYK4RAJ7mmumbIRr6Hf6ZGrVXy2rw10GM/uwuXIlM33rwjEJRoBTEq+0R2N5+75C28mx4g2xU5Fpff/yjDrA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@blockly/dev-scripts/-/dev-scripts-4.0.7.tgz",
+ "integrity": "sha512-viRLV1HO/NwpfQ1NO/S6br/oyJxnp4owTpQGS+bGx/yOVD1Aiku/bRCjeL/apLnwstNXqSmQl4kEvwnF5i3z2g==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@babel/code-frame": "^7.8.3",
"@blockly/eslint-config": "^4.0.1",
@@ -265,16 +281,17 @@
}
},
"node_modules/@blockly/dev-tools": {
- "version": "8.0.8",
- "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.0.8.tgz",
- "integrity": "sha512-IadmbH3BsL/QPik1pK6uYgR8Jzt+v8oPj5Ay/VQEDybwSdT/6MXy9sajpv2XgbyF9ywRktzyVsYBEMo7tv3XKQ==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.1.0.tgz",
+ "integrity": "sha512-oiNh1p8N/saDNsk/U6wY+SJs8i2bMkVgQYAwCd4deVIQeLGRZsw83Adm9CiXyXcFrZUOeCwmiNKwTR5JY+qh0Q==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@blockly/block-test": "^6.0.7",
- "@blockly/theme-dark": "^7.0.6",
- "@blockly/theme-deuteranopia": "^6.0.6",
- "@blockly/theme-highcontrast": "^6.0.6",
- "@blockly/theme-tritanopia": "^6.0.6",
+ "@blockly/block-test": "^6.0.11",
+ "@blockly/theme-dark": "^7.0.10",
+ "@blockly/theme-deuteranopia": "^6.0.10",
+ "@blockly/theme-highcontrast": "^6.0.10",
+ "@blockly/theme-tritanopia": "^6.0.10",
"chai": "^4.2.0",
"dat.gui": "^0.7.7",
"lodash.assign": "^4.2.0",
@@ -309,10 +326,11 @@
}
},
"node_modules/@blockly/theme-dark": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.6.tgz",
- "integrity": "sha512-bOw8fukXzb15MiSTsy38e296OOG3aU3iUVfWnadgdVH1sGMc5cVvb7nQ4l43lBeBgncD5omR9idEfam8H6oUNw==",
+ "version": "7.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.10.tgz",
+ "integrity": "sha512-Wc6n115vt9alxzPkEwYtvBBGoPUV3gaYE00dvSKhqXTNoy1Xioujj9kT9VkGmdMO2mhgnJNczSpvxG8tcd4zLQ==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=8.17.0"
},
@@ -321,10 +339,11 @@
}
},
"node_modules/@blockly/theme-deuteranopia": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-6.0.6.tgz",
- "integrity": "sha512-Va6kaFrg17Z+IOU14VIpkO4BG1XnEXd+23Xpo9A/52malS9UKsiBOEz7hjesJA/W3OVCo2uClcTxM+Qmezf+RA==",
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-6.0.10.tgz",
+ "integrity": "sha512-im5nIvf/Z0f1vJ9DK5Euu6URfY8G44xeFsat2b7TySF0BfAUWkGsagK3C6D5NatigPxKZqz3exC9zeXEtprAcg==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=8.17.0"
},
@@ -333,10 +352,11 @@
}
},
"node_modules/@blockly/theme-highcontrast": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-6.0.6.tgz",
- "integrity": "sha512-/Fr2msxYpqsS/tln3aTMn7zk3LSASJcwQd7vt9DY2X8lhMyBnV5yGCCsEsECY6MqnvVj+auVu6v9G3R0OYjbJQ==",
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-6.0.10.tgz",
+ "integrity": "sha512-s1hehl/b50IhebCs20hm2hFWbUTqJ2YSGdR0gnp2NLfNNRWwyZHZk+q4aG3k4L0YBWjNfE3XiRCkDISy83dBIA==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=8.17.0"
},
@@ -345,10 +365,11 @@
}
},
"node_modules/@blockly/theme-tritanopia": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-6.0.6.tgz",
- "integrity": "sha512-11L0xdqkvoQDDr1QkuHN01cdAsuDFcEt37m5zJ7BQKvLdnTjDfyPkeERJGcM4l/2TyaIJ8AMD0XMqTo9xwbVEw==",
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-6.0.10.tgz",
+ "integrity": "sha512-QNIvUHokGMLnCWUzERRZa6sSkD5RIUynWDI+KNurBH21NeWnSNScQiNu0dS/w5MSkZ/Iqqbi79UZoF49SzEayg==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=8.17.0"
},
@@ -356,6 +377,121 @@
"blockly": "^11.0.0"
}
},
+ "node_modules/@csstools/color-helpers": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
+ "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@csstools/css-calc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz",
+ "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/@csstools/css-color-parser": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz",
+ "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/color-helpers": "^5.0.2",
+ "@csstools/css-calc": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/@csstools/css-parser-algorithms": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
+ "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/@csstools/css-tokenizer": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
+ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
@@ -709,15 +845,6 @@
"integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
"dev": true
},
- "node_modules/@tootallnate/once": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
- "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
- "dev": true,
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@types/body-parser": {
"version": "1.19.5",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
@@ -1341,16 +1468,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dev": true,
- "dependencies": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- }
- },
"node_modules/acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -1360,25 +1477,13 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "node_modules/acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "dependencies": {
- "debug": "4"
- },
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "license": "MIT",
"engines": {
- "node": ">= 6.0.0"
+ "node": ">= 14"
}
},
"node_modules/ajv": {
@@ -1557,7 +1662,8 @@
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "peer": true
},
"node_modules/babel-eslint": {
"version": "10.1.0",
@@ -1634,18 +1740,6 @@
"node": ">=18"
}
},
- "node_modules/blockly/node_modules/agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
- "peer": true,
- "dependencies": {
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
"node_modules/blockly/node_modules/cssstyle": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz",
@@ -1658,57 +1752,6 @@
"node": ">=14"
}
},
- "node_modules/blockly/node_modules/data-urls": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
- "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
- "peer": true,
- "dependencies": {
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/blockly/node_modules/html-encoding-sniffer": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
- "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
- "peer": true,
- "dependencies": {
- "whatwg-encoding": "^3.1.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/blockly/node_modules/http-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
- "peer": true,
- "dependencies": {
- "agent-base": "^7.1.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/blockly/node_modules/https-proxy-agent": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
- "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
- "peer": true,
- "dependencies": {
- "agent-base": "^7.0.2",
- "debug": "4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
"node_modules/blockly/node_modules/jsdom": {
"version": "23.0.0",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.0.tgz",
@@ -1749,97 +1792,6 @@
}
}
},
- "node_modules/blockly/node_modules/parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
- "peer": true,
- "dependencies": {
- "entities": "^4.4.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "node_modules/blockly/node_modules/saxes": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
- "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
- "peer": true,
- "dependencies": {
- "xmlchars": "^2.2.0"
- },
- "engines": {
- "node": ">=v12.22.7"
- }
- },
- "node_modules/blockly/node_modules/tr46": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
- "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
- "peer": true,
- "dependencies": {
- "punycode": "^2.3.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/blockly/node_modules/w3c-xmlserializer": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
- "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
- "peer": true,
- "dependencies": {
- "xml-name-validator": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/blockly/node_modules/whatwg-encoding": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
- "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
- "peer": true,
- "dependencies": {
- "iconv-lite": "0.6.3"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/blockly/node_modules/whatwg-mimetype": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
- "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
- "peer": true,
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/blockly/node_modules/whatwg-url": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
- "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
- "peer": true,
- "dependencies": {
- "tr46": "^5.0.0",
- "webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/blockly/node_modules/xml-name-validator": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
- "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
- "peer": true,
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/body-parser": {
"version": "1.20.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
@@ -1932,12 +1884,6 @@
"node": ">=8"
}
},
- "node_modules/browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
"node_modules/browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
@@ -2207,6 +2153,7 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "peer": true,
"dependencies": {
"delayed-stream": "~1.0.0"
},
@@ -2367,29 +2314,26 @@
"node": ">= 8"
}
},
- "node_modules/cssom": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
- "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==",
- "dev": true
- },
"node_modules/cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz",
+ "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "cssom": "~0.3.6"
+ "@asamuzakjp/css-color": "^3.1.2",
+ "rrweb-cssom": "^0.8.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=18"
}
},
- "node_modules/cssstyle/node_modules/cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
+ "node_modules/cssstyle/node_modules/rrweb-cssom": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/dat.gui": {
"version": "0.7.9",
@@ -2398,30 +2342,16 @@
"dev": true
},
"node_modules/data-urls": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
- "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.6",
- "whatwg-mimetype": "^3.0.0",
- "whatwg-url": "^11.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/data-urls/node_modules/whatwg-url": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
- "dev": true,
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
+ "license": "MIT",
"dependencies": {
- "tr46": "^3.0.0",
- "webidl-conversions": "^7.0.0"
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/debug": {
@@ -2453,9 +2383,10 @@
}
},
"node_modules/decimal.js": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
+ "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
+ "license": "MIT"
},
"node_modules/deep-eql": {
"version": "3.0.1",
@@ -2557,6 +2488,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "peer": true,
"engines": {
"node": ">=0.4.0"
}
@@ -2631,19 +2563,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/domexception": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
- "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
- "deprecated": "Use your platform's native DOMException instead",
- "dev": true,
- "dependencies": {
- "webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@@ -2713,10 +2632,10 @@
}
},
"node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "peer": true,
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz",
+ "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==",
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
@@ -2799,36 +2718,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/escodegen": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
- "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
- "dev": true,
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
- "engines": {
- "node": ">=6.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
- }
- },
- "node_modules/escodegen/node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
"node_modules/eslint": {
"version": "7.32.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
@@ -3512,6 +3401,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "peer": true,
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -3877,15 +3767,15 @@
}
},
"node_modules/html-encoding-sniffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
- "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
- "dev": true,
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
+ "license": "MIT",
"dependencies": {
- "whatwg-encoding": "^2.0.0"
+ "whatwg-encoding": "^3.1.1"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/html-entities": {
@@ -3947,17 +3837,16 @@
}
},
"node_modules/http-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
- "dev": true,
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "license": "MIT",
"dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 14"
}
},
"node_modules/http-proxy-middleware": {
@@ -3985,16 +3874,16 @@
}
},
"node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "license": "MIT",
"dependencies": {
- "agent-base": "6",
+ "agent-base": "^7.1.2",
"debug": "4"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 14"
}
},
"node_modules/human-signals": {
@@ -4408,44 +4297,38 @@
}
},
"node_modules/jsdom": {
- "version": "19.0.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz",
- "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==",
+ "version": "26.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "abab": "^2.0.5",
- "acorn": "^8.5.0",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.5.0",
- "cssstyle": "^2.3.0",
- "data-urls": "^3.0.1",
- "decimal.js": "^10.3.1",
- "domexception": "^4.0.0",
- "escodegen": "^2.0.0",
- "form-data": "^4.0.0",
- "html-encoding-sniffer": "^3.0.0",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
+ "cssstyle": "^4.2.1",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.5.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.6",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
+ "saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^3.0.0",
+ "tough-cookie": "^5.1.1",
+ "w3c-xmlserializer": "^5.0.0",
"webidl-conversions": "^7.0.0",
- "whatwg-encoding": "^2.0.0",
- "whatwg-mimetype": "^3.0.0",
- "whatwg-url": "^10.0.0",
- "ws": "^8.2.3",
- "xml-name-validator": "^4.0.0"
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.1.1",
+ "ws": "^8.18.0",
+ "xml-name-validator": "^5.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"peerDependencies": {
- "canvas": "^2.5.0"
+ "canvas": "^3.0.0"
},
"peerDependenciesMeta": {
"canvas": {
@@ -4462,16 +4345,24 @@
"jsdom": ">=10.0.0"
}
},
- "node_modules/jsdom/node_modules/acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "node_modules/jsdom/node_modules/rrweb-cssom": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
"dev": true,
- "bin": {
- "acorn": "bin/acorn"
+ "license": "MIT"
+ },
+ "node_modules/jsdom/node_modules/tough-cookie": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tldts": "^6.1.32"
},
"engines": {
- "node": ">=0.4.0"
+ "node": ">=16"
}
},
"node_modules/jsesc": {
@@ -5013,9 +4904,10 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.12",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz",
- "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w=="
+ "version": "2.2.20",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
+ "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==",
+ "license": "MIT"
},
"node_modules/object-inspect": {
"version": "1.13.2",
@@ -5208,10 +5100,16 @@
}
},
"node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "license": "MIT",
+ "dependencies": {
+ "entities": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
},
"node_modules/parseurl": {
"version": "1.3.3",
@@ -5429,7 +5327,8 @@
"node_modules/psl": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+ "peer": true
},
"node_modules/punycode": {
"version": "2.3.1",
@@ -5457,7 +5356,8 @@
"node_modules/querystringify": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "peer": true
},
"node_modules/queue-microtask": {
"version": "1.2.3",
@@ -5776,15 +5676,15 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "license": "ISC",
"dependencies": {
"xmlchars": "^2.2.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=v12.22.7"
}
},
"node_modules/schema-utils": {
@@ -6589,6 +6489,26 @@
"integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
"dev": true
},
+ "node_modules/tldts": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
+ "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tldts-core": "^6.1.86"
+ },
+ "bin": {
+ "tldts": "bin/cli.js"
+ }
+ },
+ "node_modules/tldts-core": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
+ "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -6623,6 +6543,7 @@
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
"integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
+ "peer": true,
"dependencies": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
@@ -6637,20 +6558,21 @@
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
"integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "peer": true,
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/tr46": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
- "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "dev": true,
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
+ "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
+ "license": "MIT",
"dependencies": {
- "punycode": "^2.1.1"
+ "punycode": "^2.3.1"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/ts-loader": {
@@ -6829,6 +6751,7 @@
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
"integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "peer": true,
"dependencies": {
"querystringify": "^2.1.1",
"requires-port": "^1.0.0"
@@ -6873,26 +6796,16 @@
"node": ">= 0.8"
}
},
- "node_modules/w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
- "dev": true,
- "dependencies": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
"node_modules/w3c-xmlserializer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
- "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
- "dev": true,
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+ "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
+ "license": "MIT",
"dependencies": {
- "xml-name-validator": "^4.0.0"
+ "xml-name-validator": "^5.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/watchpack": {
@@ -7365,37 +7278,37 @@
}
},
"node_modules/whatwg-encoding": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
- "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
- "dev": true,
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "license": "MIT",
"dependencies": {
"iconv-lite": "0.6.3"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/whatwg-mimetype": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
- "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
- "dev": true,
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/whatwg-url": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
- "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
- "dev": true,
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+ "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
+ "license": "MIT",
"dependencies": {
- "tr46": "^3.0.0",
+ "tr46": "^5.1.0",
"webidl-conversions": "^7.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/which": {
@@ -7496,12 +7409,12 @@
}
},
"node_modules/xml-name-validator": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
- "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
- "dev": true,
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "license": "Apache-2.0",
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/xmlchars": {
@@ -7592,6 +7505,19 @@
}
},
"dependencies": {
+ "@asamuzakjp/css-color": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.7.tgz",
+ "integrity": "sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g==",
+ "dev": true,
+ "requires": {
+ "@csstools/css-calc": "^2.1.3",
+ "@csstools/css-color-parser": "^3.0.9",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "lru-cache": "^10.4.3"
+ }
+ },
"@babel/code-frame": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
@@ -7743,16 +7669,16 @@
}
},
"@blockly/block-test": {
- "version": "6.0.7",
- "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-6.0.7.tgz",
- "integrity": "sha512-3F+HbgOjYKF8dvq3HoBKVQAv2ZZxgvdQQs9PsIOfj44jx2DXuKPrhr11c1AgxS1EIEFA/Gf0AvsUbBEvmB2DpA==",
+ "version": "6.0.11",
+ "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-6.0.11.tgz",
+ "integrity": "sha512-aIgcxkof1gLJtJXKSvmnug9iSXbv5Qilnov4Sa/QNURiWJRxvMNqWiTZJVu/reuCQK4Qm4jadg9R9l+eu7ujvw==",
"dev": true,
"requires": {}
},
"@blockly/dev-scripts": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@blockly/dev-scripts/-/dev-scripts-4.0.5.tgz",
- "integrity": "sha512-JVCYK4RAJ7mmumbIRr6Hf6ZGrVXy2rw10GM/uwuXIlM33rwjEJRoBTEq+0R2N5+75C28mx4g2xU5Fpff/yjDrA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@blockly/dev-scripts/-/dev-scripts-4.0.7.tgz",
+ "integrity": "sha512-viRLV1HO/NwpfQ1NO/S6br/oyJxnp4owTpQGS+bGx/yOVD1Aiku/bRCjeL/apLnwstNXqSmQl4kEvwnF5i3z2g==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.8.3",
@@ -7771,16 +7697,16 @@
}
},
"@blockly/dev-tools": {
- "version": "8.0.8",
- "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.0.8.tgz",
- "integrity": "sha512-IadmbH3BsL/QPik1pK6uYgR8Jzt+v8oPj5Ay/VQEDybwSdT/6MXy9sajpv2XgbyF9ywRktzyVsYBEMo7tv3XKQ==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.1.0.tgz",
+ "integrity": "sha512-oiNh1p8N/saDNsk/U6wY+SJs8i2bMkVgQYAwCd4deVIQeLGRZsw83Adm9CiXyXcFrZUOeCwmiNKwTR5JY+qh0Q==",
"dev": true,
"requires": {
- "@blockly/block-test": "^6.0.7",
- "@blockly/theme-dark": "^7.0.6",
- "@blockly/theme-deuteranopia": "^6.0.6",
- "@blockly/theme-highcontrast": "^6.0.6",
- "@blockly/theme-tritanopia": "^6.0.6",
+ "@blockly/block-test": "^6.0.11",
+ "@blockly/theme-dark": "^7.0.10",
+ "@blockly/theme-deuteranopia": "^6.0.10",
+ "@blockly/theme-highcontrast": "^6.0.10",
+ "@blockly/theme-tritanopia": "^6.0.10",
"chai": "^4.2.0",
"dat.gui": "^0.7.7",
"lodash.assign": "^4.2.0",
@@ -7803,33 +7729,69 @@
}
},
"@blockly/theme-dark": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.6.tgz",
- "integrity": "sha512-bOw8fukXzb15MiSTsy38e296OOG3aU3iUVfWnadgdVH1sGMc5cVvb7nQ4l43lBeBgncD5omR9idEfam8H6oUNw==",
+ "version": "7.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.10.tgz",
+ "integrity": "sha512-Wc6n115vt9alxzPkEwYtvBBGoPUV3gaYE00dvSKhqXTNoy1Xioujj9kT9VkGmdMO2mhgnJNczSpvxG8tcd4zLQ==",
"dev": true,
"requires": {}
},
"@blockly/theme-deuteranopia": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-6.0.6.tgz",
- "integrity": "sha512-Va6kaFrg17Z+IOU14VIpkO4BG1XnEXd+23Xpo9A/52malS9UKsiBOEz7hjesJA/W3OVCo2uClcTxM+Qmezf+RA==",
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-6.0.10.tgz",
+ "integrity": "sha512-im5nIvf/Z0f1vJ9DK5Euu6URfY8G44xeFsat2b7TySF0BfAUWkGsagK3C6D5NatigPxKZqz3exC9zeXEtprAcg==",
"dev": true,
"requires": {}
},
"@blockly/theme-highcontrast": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-6.0.6.tgz",
- "integrity": "sha512-/Fr2msxYpqsS/tln3aTMn7zk3LSASJcwQd7vt9DY2X8lhMyBnV5yGCCsEsECY6MqnvVj+auVu6v9G3R0OYjbJQ==",
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-6.0.10.tgz",
+ "integrity": "sha512-s1hehl/b50IhebCs20hm2hFWbUTqJ2YSGdR0gnp2NLfNNRWwyZHZk+q4aG3k4L0YBWjNfE3XiRCkDISy83dBIA==",
"dev": true,
"requires": {}
},
"@blockly/theme-tritanopia": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-6.0.6.tgz",
- "integrity": "sha512-11L0xdqkvoQDDr1QkuHN01cdAsuDFcEt37m5zJ7BQKvLdnTjDfyPkeERJGcM4l/2TyaIJ8AMD0XMqTo9xwbVEw==",
+ "version": "6.0.10",
+ "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-6.0.10.tgz",
+ "integrity": "sha512-QNIvUHokGMLnCWUzERRZa6sSkD5RIUynWDI+KNurBH21NeWnSNScQiNu0dS/w5MSkZ/Iqqbi79UZoF49SzEayg==",
+ "dev": true,
+ "requires": {}
+ },
+ "@csstools/color-helpers": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
+ "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==",
+ "dev": true
+ },
+ "@csstools/css-calc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz",
+ "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==",
+ "dev": true,
+ "requires": {}
+ },
+ "@csstools/css-color-parser": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz",
+ "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==",
+ "dev": true,
+ "requires": {
+ "@csstools/color-helpers": "^5.0.2",
+ "@csstools/css-calc": "^2.1.3"
+ }
+ },
+ "@csstools/css-parser-algorithms": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
+ "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
"dev": true,
"requires": {}
},
+ "@csstools/css-tokenizer": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
+ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
+ "dev": true
+ },
"@discoveryjs/json-ext": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
@@ -8101,12 +8063,6 @@
"integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
"dev": true
},
- "@tootallnate/once": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
- "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
- "dev": true
- },
"@types/body-parser": {
"version": "1.19.5",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
@@ -8608,16 +8564,6 @@
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true
},
- "acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dev": true,
- "requires": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- }
- },
"acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -8625,20 +8571,10 @@
"dev": true,
"requires": {}
},
- "acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true
- },
"agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "requires": {
- "debug": "4"
- }
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="
},
"ajv": {
"version": "6.12.6",
@@ -8767,7 +8703,8 @@
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "peer": true
},
"babel-eslint": {
"version": "10.1.0",
@@ -8824,15 +8761,6 @@
"jsdom": "23.0.0"
},
"dependencies": {
- "agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
- "peer": true,
- "requires": {
- "debug": "^4.3.4"
- }
- },
"cssstyle": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz",
@@ -8842,45 +8770,6 @@
"rrweb-cssom": "^0.6.0"
}
},
- "data-urls": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
- "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
- "peer": true,
- "requires": {
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0"
- }
- },
- "html-encoding-sniffer": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
- "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
- "peer": true,
- "requires": {
- "whatwg-encoding": "^3.1.1"
- }
- },
- "http-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
- "peer": true,
- "requires": {
- "agent-base": "^7.1.0",
- "debug": "^4.3.4"
- }
- },
- "https-proxy-agent": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
- "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
- "peer": true,
- "requires": {
- "agent-base": "^7.0.2",
- "debug": "4"
- }
- },
"jsdom": {
"version": "23.0.0",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.0.tgz",
@@ -8909,73 +8798,6 @@
"ws": "^8.14.2",
"xml-name-validator": "^5.0.0"
}
- },
- "parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
- "peer": true,
- "requires": {
- "entities": "^4.4.0"
- }
- },
- "saxes": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
- "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
- "peer": true,
- "requires": {
- "xmlchars": "^2.2.0"
- }
- },
- "tr46": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
- "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
- "peer": true,
- "requires": {
- "punycode": "^2.3.1"
- }
- },
- "w3c-xmlserializer": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
- "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
- "peer": true,
- "requires": {
- "xml-name-validator": "^5.0.0"
- }
- },
- "whatwg-encoding": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
- "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
- "peer": true,
- "requires": {
- "iconv-lite": "0.6.3"
- }
- },
- "whatwg-mimetype": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
- "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
- "peer": true
- },
- "whatwg-url": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
- "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
- "peer": true,
- "requires": {
- "tr46": "^5.0.0",
- "webidl-conversions": "^7.0.0"
- }
- },
- "xml-name-validator": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
- "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
- "peer": true
}
}
},
@@ -9060,12 +8882,6 @@
"fill-range": "^7.1.1"
}
},
- "browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
"browser-stdout": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
@@ -9242,6 +9058,7 @@
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "peer": true,
"requires": {
"delayed-stream": "~1.0.0"
}
@@ -9374,25 +9191,20 @@
"which": "^2.0.1"
}
},
- "cssom": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
- "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==",
- "dev": true
- },
"cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz",
+ "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==",
"dev": true,
"requires": {
- "cssom": "~0.3.6"
+ "@asamuzakjp/css-color": "^3.1.2",
+ "rrweb-cssom": "^0.8.0"
},
"dependencies": {
- "cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+ "rrweb-cssom": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
"dev": true
}
}
@@ -9404,26 +9216,12 @@
"dev": true
},
"data-urls": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
- "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
- "dev": true,
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
"requires": {
- "abab": "^2.0.6",
- "whatwg-mimetype": "^3.0.0",
- "whatwg-url": "^11.0.0"
- },
- "dependencies": {
- "whatwg-url": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
- "dev": true,
- "requires": {
- "tr46": "^3.0.0",
- "webidl-conversions": "^7.0.0"
- }
- }
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
}
},
"debug": {
@@ -9441,9 +9239,9 @@
"dev": true
},
"decimal.js": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
+ "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw=="
},
"deep-eql": {
"version": "3.0.1",
@@ -9511,7 +9309,8 @@
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "peer": true
},
"depd": {
"version": "2.0.0",
@@ -9564,15 +9363,6 @@
"esutils": "^2.0.2"
}
},
- "domexception": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
- "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
- "dev": true,
- "requires": {
- "webidl-conversions": "^7.0.0"
- }
- },
"eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@@ -9630,10 +9420,9 @@
}
},
"entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "peer": true
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz",
+ "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw=="
},
"envinfo": {
"version": "7.13.0",
@@ -9689,26 +9478,6 @@
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true
},
- "escodegen": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
- "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
- "dev": true,
- "requires": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- }
- }
- },
"eslint": {
"version": "7.32.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
@@ -10232,6 +10001,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "peer": true,
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -10511,12 +10281,11 @@
}
},
"html-encoding-sniffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
- "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
- "dev": true,
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
"requires": {
- "whatwg-encoding": "^2.0.0"
+ "whatwg-encoding": "^3.1.1"
}
},
"html-entities": {
@@ -10562,14 +10331,12 @@
}
},
"http-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
- "dev": true,
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"requires": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
}
},
"http-proxy-middleware": {
@@ -10586,12 +10353,11 @@
}
},
"https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"requires": {
- "agent-base": "6",
+ "agent-base": "^7.1.2",
"debug": "4"
}
},
@@ -10870,45 +10636,47 @@
"dev": true
},
"jsdom": {
- "version": "19.0.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz",
- "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==",
+ "version": "26.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
"dev": true,
"requires": {
- "abab": "^2.0.5",
- "acorn": "^8.5.0",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.5.0",
- "cssstyle": "^2.3.0",
- "data-urls": "^3.0.1",
- "decimal.js": "^10.3.1",
- "domexception": "^4.0.0",
- "escodegen": "^2.0.0",
- "form-data": "^4.0.0",
- "html-encoding-sniffer": "^3.0.0",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
+ "cssstyle": "^4.2.1",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.5.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.6",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
+ "saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^3.0.0",
+ "tough-cookie": "^5.1.1",
+ "w3c-xmlserializer": "^5.0.0",
"webidl-conversions": "^7.0.0",
- "whatwg-encoding": "^2.0.0",
- "whatwg-mimetype": "^3.0.0",
- "whatwg-url": "^10.0.0",
- "ws": "^8.2.3",
- "xml-name-validator": "^4.0.0"
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.1.1",
+ "ws": "^8.18.0",
+ "xml-name-validator": "^5.0.0"
},
"dependencies": {
- "acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "rrweb-cssom": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
"dev": true
+ },
+ "tough-cookie": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
+ "dev": true,
+ "requires": {
+ "tldts": "^6.1.32"
+ }
}
}
},
@@ -11352,9 +11120,9 @@
}
},
"nwsapi": {
- "version": "2.2.12",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz",
- "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w=="
+ "version": "2.2.20",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
+ "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA=="
},
"object-inspect": {
"version": "1.13.2",
@@ -11490,10 +11258,12 @@
}
},
"parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "requires": {
+ "entities": "^6.0.0"
+ }
},
"parseurl": {
"version": "1.3.3",
@@ -11655,7 +11425,8 @@
"psl": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+ "peer": true
},
"punycode": {
"version": "2.3.1",
@@ -11674,7 +11445,8 @@
"querystringify": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "peer": true
},
"queue-microtask": {
"version": "1.2.3",
@@ -11882,10 +11654,9 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
"requires": {
"xmlchars": "^2.2.0"
}
@@ -12514,6 +12285,21 @@
"integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
"dev": true
},
+ "tldts": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
+ "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
+ "dev": true,
+ "requires": {
+ "tldts-core": "^6.1.86"
+ }
+ },
+ "tldts-core": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
+ "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
+ "dev": true
+ },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -12539,6 +12325,7 @@
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
"integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
+ "peer": true,
"requires": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
@@ -12549,17 +12336,17 @@
"universalify": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg=="
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "peer": true
}
}
},
"tr46": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
- "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "dev": true,
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
+ "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
"requires": {
- "punycode": "^2.1.1"
+ "punycode": "^2.3.1"
}
},
"ts-loader": {
@@ -12676,6 +12463,7 @@
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
"integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "peer": true,
"requires": {
"querystringify": "^2.1.1",
"requires-port": "^1.0.0"
@@ -12711,22 +12499,12 @@
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
"dev": true
},
- "w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "requires": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
"w3c-xmlserializer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
- "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
- "dev": true,
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+ "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
"requires": {
- "xml-name-validator": "^4.0.0"
+ "xml-name-validator": "^5.0.0"
}
},
"watchpack": {
@@ -13029,27 +12807,24 @@
"dev": true
},
"whatwg-encoding": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
- "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
- "dev": true,
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
"requires": {
"iconv-lite": "0.6.3"
}
},
"whatwg-mimetype": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
- "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
- "dev": true
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="
},
"whatwg-url": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
- "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
- "dev": true,
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+ "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
"requires": {
- "tr46": "^3.0.0",
+ "tr46": "^5.1.0",
"webidl-conversions": "^7.0.0"
}
},
@@ -13115,10 +12890,9 @@
"requires": {}
},
"xml-name-validator": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
- "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
- "dev": true
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="
},
"xmlchars": {
"version": "2.2.0",
@@ -13185,4 +12959,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/shadow-block-converter/package.json b/plugins/shadow-block-converter/package.json
index 93fe936d09..3d5bef3dfc 100644
--- a/plugins/shadow-block-converter/package.json
+++ b/plugins/shadow-block-converter/package.json
@@ -42,7 +42,7 @@
"@blockly/dev-scripts": "^4.0.7",
"@blockly/dev-tools": "^8.1.0",
"chai": "^4.2.0",
- "jsdom": "^19.0.0",
+ "jsdom": "^26.1.0",
"jsdom-global": "^3.0.2",
"sinon": "^9.0.1",
"typescript": "^5.4.5"
diff --git a/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js b/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
index 7ca2c7d5df..8a56a462ef 100644
--- a/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
+++ b/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
@@ -34,8 +34,20 @@ suite('shadowBlockConversionChangeListener', function () {
}
setup(function () {
- this.workspace = new Blockly.Workspace();
+ this.jsdomCleanup = require('jsdom-global')(
+ '
',
+ {pretendToBeVisual: true},
+ );
+
+ this.workspace = Blockly.inject('blocklyDiv');
this.workspace.addChangeListener(shadowBlockConversionChangeListener);
+
+ // Prevent rendering, which does not work correctly in a headless jsdom
+ // environment.
+ this.renderEfficientlyStub = sinon
+ .stub(Blockly.BlockSvg.prototype, 'renderEfficiently')
+ .callsFake(() => {});
+
this.clock = sinon.useFakeTimers();
});
@@ -44,6 +56,8 @@ suite('shadowBlockConversionChangeListener', function () {
// Finish any remaining queued events then dispose the sinon environment.
this.clock.runAll();
this.clock.restore();
+ this.renderEfficientlyStub.restore();
+ this.jsdomCleanup();
});
test('responds to field change', function () {
@@ -209,28 +223,6 @@ suite('shadowBlockConversionChangeListener', function () {
});
suite('Selection', function () {
- setup(function () {
- this.jsdomCleanup = require('jsdom-global')(
- '
',
- {pretendToBeVisual: true},
- );
-
- this.workspace = Blockly.inject('blocklyDiv');
- this.workspace.addChangeListener(shadowBlockConversionChangeListener);
-
- // Prevent rendering, which does not work correctly in a headless jsdom
- // environment.
- sinon
- .stub(Blockly.BlockSvg.prototype, 'renderEfficiently')
- .callsFake(() => {});
-
- this.clock = sinon.useFakeTimers();
- });
-
- teardown(function () {
- this.jsdomCleanup();
- });
-
test('Transfers selection to new block', function () {
const connection =
this.workspace.newBlock('text_reverse').inputList[0].connection;
From bf449611e35e063a5ccd59e25d6a5e3eca3c7f56 Mon Sep 17 00:00:00 2001
From: Aaron Dodson
Date: Wed, 14 May 2025 15:49:40 -0700
Subject: [PATCH 22/33] fix: Remove use of deleted `Block.setEnabled()`.
---
plugins/block-shareable-procedures/src/blocks.ts | 2 +-
.../test/procedure_blocks.mocha.js | 14 +++++++-------
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/plugins/block-shareable-procedures/src/blocks.ts b/plugins/block-shareable-procedures/src/blocks.ts
index 07f2cc50ca..b94a8d559f 100644
--- a/plugins/block-shareable-procedures/src/blocks.ts
+++ b/plugins/block-shareable-procedures/src/blocks.ts
@@ -299,7 +299,7 @@ const procedureDefUpdateShapeMixin = {
*/
doProcedureUpdate: function () {
this.setFieldValue(this.getProcedureModel().getName(), 'NAME');
- this.setEnabled(this.getProcedureModel().getEnabled());
+ this.setDisabledReason(!this.getProcedureModel().getEnabled());
this.updateParameters_();
this.updateMutator_();
},
diff --git a/plugins/block-shareable-procedures/test/procedure_blocks.mocha.js b/plugins/block-shareable-procedures/test/procedure_blocks.mocha.js
index 8b0694a6eb..54e2a64e5a 100644
--- a/plugins/block-shareable-procedures/test/procedure_blocks.mocha.js
+++ b/plugins/block-shareable-procedures/test/procedure_blocks.mocha.js
@@ -107,7 +107,7 @@ suite('Procedures', function () {
test('disabling a procedure def block updates the procedure model', function () {
const defBlock = createProcDefBlock(this.workspace);
- defBlock.setEnabled(false);
+ defBlock.setDisabledReason(true);
globalThis.clock.runAll();
assert.isFalse(
@@ -1204,7 +1204,7 @@ suite('Procedures', function () {
const defBlock = createProcDefBlock(this.workspace);
const callBlock = createProcCallBlock(this.workspace);
- defBlock.setEnabled(false);
+ defBlock.setDisabledReason(true);
globalThis.clock.runAll();
assert.isFalse(
@@ -1220,10 +1220,10 @@ suite('Procedures', function () {
function () {
const defBlock = createProcDefBlock(this.workspace);
const callBlock = createProcCallBlock(this.workspace);
- defBlock.setEnabled(false);
+ defBlock.setDisabledReason(true);
globalThis.clock.runAll();
- defBlock.setEnabled(true);
+ defBlock.setDisabledReason(false);
globalThis.clock.runAll();
assert.isTrue(
@@ -1241,12 +1241,12 @@ suite('Procedures', function () {
const defBlock = createProcDefBlock(this.workspace);
const callBlock = createProcCallBlock(this.workspace);
globalThis.clock.runAll();
- callBlock.setEnabled(false);
+ callBlock.setDisabledReason(true);
globalThis.clock.runAll();
- defBlock.setEnabled(false);
+ defBlock.setDisabledReason(true);
globalThis.clock.runAll();
- defBlock.setEnabled(true);
+ defBlock.setDisabledReason(false);
globalThis.clock.runAll();
assert.isFalse(
From a060be7eee0e9e8b26dbf42aa6e267fb8dc1d10f Mon Sep 17 00:00:00 2001
From: Aaron Dodson
Date: Wed, 14 May 2025 16:01:31 -0700
Subject: [PATCH 23/33] Revert "fix(fields): Implement getClass method"
This reverts commit 6e9d3fe7dcf3fbe263fe154268683447b3ba8c9e.
---
plugins/field-bitmap/src/field-bitmap.ts | 12 ------------
plugins/field-colour/src/field_colour.ts | 9 +++++++++
2 files changed, 9 insertions(+), 12 deletions(-)
diff --git a/plugins/field-bitmap/src/field-bitmap.ts b/plugins/field-bitmap/src/field-bitmap.ts
index 8a53a6327e..2ac6cb2ee1 100644
--- a/plugins/field-bitmap/src/field-bitmap.ts
+++ b/plugins/field-bitmap/src/field-bitmap.ts
@@ -640,18 +640,6 @@ export class FieldBitmap extends Blockly.Field {
);
}
}
-
- /**
- * Returns this field's class.
- *
- * Used by keyboard navigation to look up the rules for navigating from this
- * field.
- *
- * @returns This field's class.
- */
- getClass() {
- return FieldBitmap;
- }
}
interface Buttons {
diff --git a/plugins/field-colour/src/field_colour.ts b/plugins/field-colour/src/field_colour.ts
index 398e801379..2e09727d4c 100644
--- a/plugins/field-colour/src/field_colour.ts
+++ b/plugins/field-colour/src/field_colour.ts
@@ -728,6 +728,15 @@ export class FieldColour extends Blockly.Field {
// the static fromJson method.
return new this(options.colour, undefined, options);
}
+
+ /**
+ * Returns the class of this field.
+ *
+ * @returns FieldColour.
+ */
+ getClass() {
+ return FieldColour;
+ }
}
/** The default value for this field. */
From 144b6d0c4b939e1f329986220e30ebdfcf93453c Mon Sep 17 00:00:00 2001
From: Aaron Dodson
Date: Wed, 14 May 2025 16:03:30 -0700
Subject: [PATCH 24/33] Revert "fix: Add `getClass()` to `FieldColour`.
(#2506)"
This reverts commit f5a577b8fe25b6fbf1502ca85902c22777fd8270.
---
plugins/field-colour/src/field_colour.ts | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/plugins/field-colour/src/field_colour.ts b/plugins/field-colour/src/field_colour.ts
index 2e09727d4c..398e801379 100644
--- a/plugins/field-colour/src/field_colour.ts
+++ b/plugins/field-colour/src/field_colour.ts
@@ -728,15 +728,6 @@ export class FieldColour extends Blockly.Field {
// the static fromJson method.
return new this(options.colour, undefined, options);
}
-
- /**
- * Returns the class of this field.
- *
- * @returns FieldColour.
- */
- getClass() {
- return FieldColour;
- }
}
/** The default value for this field. */
From 8370d9cbe948f607f7689ba2e364cc2484947291 Mon Sep 17 00:00:00 2001
From: Maribeth Moffatt
Date: Wed, 14 May 2025 16:37:56 -0700
Subject: [PATCH 25/33] chore: skip shadow block tests that need jsdom work
---
.../test/shadow_block_converter_test.mocha.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js b/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
index 8a56a462ef..e25374eaf8 100644
--- a/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
+++ b/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
@@ -11,7 +11,7 @@ const {shadowBlockConversionChangeListener} = require('../src/index');
const assert = chai.assert;
-suite('shadowBlockConversionChangeListener', function () {
+suite.skip('shadowBlockConversionChangeListener', function () {
/**
* Create a parent block with an unconnected value connection.
* @param {Blockly.Workspace} workspace The workspace to use.
From 9dc31244c9fa8f1cd955a0babb898d815dbf6e61 Mon Sep 17 00:00:00 2001
From: Maribeth Moffatt
Date: Wed, 14 May 2025 16:47:42 -0700
Subject: [PATCH 26/33] chore: try updating the package-lock, unskip tests
---
.../shadow-block-converter/package-lock.json | 13096 +---------------
.../test/shadow_block_converter_test.mocha.js | 2 +-
2 files changed, 717 insertions(+), 12381 deletions(-)
diff --git a/plugins/shadow-block-converter/package-lock.json b/plugins/shadow-block-converter/package-lock.json
index f763a93dcb..969d229854 100644
--- a/plugins/shadow-block-converter/package-lock.json
+++ b/plugins/shadow-block-converter/package-lock.json
@@ -9,8 +9,6 @@
"version": "6.0.15",
"license": "Apache-2.0",
"devDependencies": {
- "@blockly/dev-scripts": "^4.0.7",
- "@blockly/dev-tools": "^8.1.0",
"chai": "^4.2.0",
"jsdom": "^26.1.0",
"jsdom-global": "^3.0.2",
@@ -38,345 +36,6 @@
"lru-cache": "^10.4.3"
}
},
- "node_modules/@babel/code-frame": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
- "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.24.7",
- "picocolors": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.25.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
- "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.25.4",
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25",
- "jsesc": "^2.5.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
- "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
- "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
- "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.24.7",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
- "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.25.4"
- },
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
- "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.24.7",
- "@babel/parser": "^7.25.0",
- "@babel/types": "^7.25.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
- "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.25.4",
- "@babel/parser": "^7.25.4",
- "@babel/template": "^7.25.0",
- "@babel/types": "^7.25.4",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
- "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-string-parser": "^7.24.8",
- "@babel/helper-validator-identifier": "^7.24.7",
- "to-fast-properties": "^2.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@blockly/block-test": {
- "version": "6.0.11",
- "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-6.0.11.tgz",
- "integrity": "sha512-aIgcxkof1gLJtJXKSvmnug9iSXbv5Qilnov4Sa/QNURiWJRxvMNqWiTZJVu/reuCQK4Qm4jadg9R9l+eu7ujvw==",
- "dev": true,
- "license": "Apache 2.0",
- "engines": {
- "node": ">=8.17.0"
- },
- "peerDependencies": {
- "blockly": "^11.0.0"
- }
- },
- "node_modules/@blockly/dev-scripts": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/@blockly/dev-scripts/-/dev-scripts-4.0.7.tgz",
- "integrity": "sha512-viRLV1HO/NwpfQ1NO/S6br/oyJxnp4owTpQGS+bGx/yOVD1Aiku/bRCjeL/apLnwstNXqSmQl4kEvwnF5i3z2g==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/code-frame": "^7.8.3",
- "@blockly/eslint-config": "^4.0.1",
- "chalk": "^4.0.0",
- "eslint": "^7.15.0",
- "eslint-webpack-plugin": "^3.0.0",
- "fork-ts-checker-webpack-plugin": "^8.0.0",
- "mocha": "^10.7.0",
- "rimraf": "^3.0.2",
- "source-map-loader": "^1.0.0",
- "ts-loader": "^9.4.1",
- "webpack": "^5.0.0",
- "webpack-cli": "^5.1.4",
- "webpack-dev-server": "^5.0.4"
- },
- "bin": {
- "blockly-scripts": "bin/blockly-scripts.js"
- },
- "engines": {
- "node": ">=8.0.0"
- },
- "peerDependencies": {
- "typescript": "^4.3.2 || ^5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@blockly/dev-tools": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.1.0.tgz",
- "integrity": "sha512-oiNh1p8N/saDNsk/U6wY+SJs8i2bMkVgQYAwCd4deVIQeLGRZsw83Adm9CiXyXcFrZUOeCwmiNKwTR5JY+qh0Q==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@blockly/block-test": "^6.0.11",
- "@blockly/theme-dark": "^7.0.10",
- "@blockly/theme-deuteranopia": "^6.0.10",
- "@blockly/theme-highcontrast": "^6.0.10",
- "@blockly/theme-tritanopia": "^6.0.10",
- "chai": "^4.2.0",
- "dat.gui": "^0.7.7",
- "lodash.assign": "^4.2.0",
- "lodash.merge": "^4.6.2",
- "monaco-editor": "^0.20.0",
- "sinon": "^9.0.2"
- },
- "engines": {
- "node": ">=8.0.0"
- },
- "peerDependencies": {
- "blockly": "^11.0.0"
- }
- },
- "node_modules/@blockly/eslint-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@blockly/eslint-config/-/eslint-config-4.0.1.tgz",
- "integrity": "sha512-yY6aeX6gv0T/+lFwxP35yVbZT2Q6kOgeDfBXTmIsul+S6Qr0ZqMJIkwrCzl1z45YRrB1WBGUJw40rimFwspeyg==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/eslint-plugin": "^5.0.0",
- "@typescript-eslint/parser": "^5.0.0",
- "babel-eslint": "^10.1.0",
- "eslint-config-google": "^0.14.0",
- "eslint-plugin-jsdoc": "^46.8.0"
- },
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "eslint": "7.x"
- }
- },
- "node_modules/@blockly/theme-dark": {
- "version": "7.0.10",
- "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.10.tgz",
- "integrity": "sha512-Wc6n115vt9alxzPkEwYtvBBGoPUV3gaYE00dvSKhqXTNoy1Xioujj9kT9VkGmdMO2mhgnJNczSpvxG8tcd4zLQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8.17.0"
- },
- "peerDependencies": {
- "blockly": "^11.0.0"
- }
- },
- "node_modules/@blockly/theme-deuteranopia": {
- "version": "6.0.10",
- "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-6.0.10.tgz",
- "integrity": "sha512-im5nIvf/Z0f1vJ9DK5Euu6URfY8G44xeFsat2b7TySF0BfAUWkGsagK3C6D5NatigPxKZqz3exC9zeXEtprAcg==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8.17.0"
- },
- "peerDependencies": {
- "blockly": "^11.0.0"
- }
- },
- "node_modules/@blockly/theme-highcontrast": {
- "version": "6.0.10",
- "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-6.0.10.tgz",
- "integrity": "sha512-s1hehl/b50IhebCs20hm2hFWbUTqJ2YSGdR0gnp2NLfNNRWwyZHZk+q4aG3k4L0YBWjNfE3XiRCkDISy83dBIA==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8.17.0"
- },
- "peerDependencies": {
- "blockly": "^11.0.0"
- }
- },
- "node_modules/@blockly/theme-tritanopia": {
- "version": "6.0.10",
- "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-6.0.10.tgz",
- "integrity": "sha512-QNIvUHokGMLnCWUzERRZa6sSkD5RIUynWDI+KNurBH21NeWnSNScQiNu0dS/w5MSkZ/Iqqbi79UZoF49SzEayg==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8.17.0"
- },
- "peerDependencies": {
- "blockly": "^11.0.0"
- }
- },
"node_modules/@csstools/color-helpers": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
@@ -492,11797 +151,1053 @@
"node": ">=18"
}
},
- "node_modules/@discoveryjs/json-ext": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
- "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
+ "node_modules/@sinonjs/commons": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
+ "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
"dev": true,
- "engines": {
- "node": ">=10.0.0"
+ "dependencies": {
+ "type-detect": "4.0.8"
}
},
- "node_modules/@es-joy/jsdoccomment": {
- "version": "0.41.0",
- "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz",
- "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==",
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
+ "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
"dev": true,
"dependencies": {
- "comment-parser": "1.4.1",
- "esquery": "^1.5.0",
- "jsdoc-type-pratt-parser": "~4.0.0"
- },
- "engines": {
- "node": ">=16"
+ "@sinonjs/commons": "^1.7.0"
}
},
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "node_modules/@sinonjs/samsam": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz",
+ "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==",
"dev": true,
"dependencies": {
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ "@sinonjs/commons": "^1.6.0",
+ "lodash.get": "^4.4.2",
+ "type-detect": "^4.0.8"
}
},
- "node_modules/@eslint-community/regexpp": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
- "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
+ "node_modules/@sinonjs/text-encoding": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
+ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
+ "dev": true
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ "node": ">= 14"
}
},
- "node_modules/@eslint/eslintrc": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
- "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "node_modules/assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true,
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
- "globals": "^13.9.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
- "strip-json-comments": "^3.1.1"
- },
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "*"
}
},
- "node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "node_modules/chai": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
+ "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
"dev": true,
"dependencies": {
- "type-fest": "^0.20.2"
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^3.0.1",
+ "get-func-name": "^2.0.0",
+ "loupe": "^2.3.1",
+ "pathval": "^1.1.1",
+ "type-detect": "^4.0.5"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=4"
}
},
- "node_modules/@eslint/eslintrc/node_modules/ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "node_modules/check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
"dev": true,
"engines": {
- "node": ">= 4"
+ "node": "*"
}
},
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
- "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
- "deprecated": "Use @eslint/config-array instead",
+ "node_modules/cssstyle": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz",
+ "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@humanwhocodes/object-schema": "^1.2.0",
- "debug": "^4.1.1",
- "minimatch": "^3.0.4"
+ "@asamuzakjp/css-color": "^3.1.2",
+ "rrweb-cssom": "^0.8.0"
},
"engines": {
- "node": ">=10.10.0"
+ "node": ">=18"
}
},
- "node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
- "deprecated": "Use @eslint/object-schema instead",
- "dev": true
+ "node_modules/cssstyle/node_modules/rrweb-cssom": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "node_modules/data-urls": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "node_modules/debug": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+ "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
"engines": {
- "node": ">=12"
+ "node": ">=6.0"
},
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
+ "node_modules/decimal.js": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
+ "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/@isaacs/cliui/node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "node_modules/deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
"dev": true,
"dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
+ "type-detect": "^4.0.0"
},
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=0.12"
}
},
- "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "node_modules/entities": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz",
+ "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==",
"dev": true,
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
+ "license": "BSD-2-Clause",
"engines": {
- "node": ">=12"
+ "node": ">=0.12"
},
"funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ "url": "https://github.com/fb55/entities?sponsor=1"
}
},
- "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "node_modules/get-func-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
+ "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
"dev": true,
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
+ "license": "MIT",
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "node": "*"
}
},
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
"engines": {
- "node": ">=6.0.0"
+ "node": ">=8"
}
},
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "node_modules/html-encoding-sniffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-encoding": "^3.1.1"
+ },
"engines": {
- "node": ">=6.0.0"
+ "node": ">=18"
}
},
- "node_modules/@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
"engines": {
- "node": ">=6.0.0"
+ "node": ">= 14"
}
},
- "node_modules/@jridgewell/source-map": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
- "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25"
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
}
},
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
- "dev": true
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"dev": true,
"dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/@leichtgewicht/ip-codec": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
- "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true
+ },
+ "node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
"dev": true
},
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "node_modules/jsdom": {
+ "version": "26.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
+ "cssstyle": "^4.2.1",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.5.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.6",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^5.1.1",
+ "w3c-xmlserializer": "^5.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.1.1",
+ "ws": "^8.18.0",
+ "xml-name-validator": "^5.0.0"
},
"engines": {
- "node": ">= 8"
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "canvas": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
}
},
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "node_modules/jsdom-global": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
+ "integrity": "sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg==",
"dev": true,
- "engines": {
- "node": ">= 8"
+ "peerDependencies": {
+ "jsdom": ">=10.0.0"
}
},
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "node_modules/jsdom/node_modules/rrweb-cssom": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/jsdom/node_modules/tough-cookie": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
+ "tldts": "^6.1.32"
},
"engines": {
- "node": ">= 8"
+ "node": ">=16"
}
},
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=14"
- }
+ "node_modules/just-extend": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
+ "dev": true
},
- "node_modules/@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
- "dev": true,
- "dependencies": {
- "type-detect": "4.0.8"
- }
+ "node_modules/lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
+ "dev": true
},
- "node_modules/@sinonjs/fake-timers": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
- "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
+ "node_modules/loupe": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz",
+ "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==",
"dev": true,
"dependencies": {
- "@sinonjs/commons": "^1.7.0"
+ "get-func-name": "^2.0.0"
}
},
- "node_modules/@sinonjs/samsam": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz",
- "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.6.0",
- "lodash.get": "^4.4.2",
- "type-detect": "^4.0.8"
- }
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
},
- "node_modules/@sinonjs/text-encoding": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
- "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/@types/body-parser": {
- "version": "1.19.5",
- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
- "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
+ "node_modules/nise": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz",
+ "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==",
"dev": true,
"dependencies": {
- "@types/connect": "*",
- "@types/node": "*"
+ "@sinonjs/commons": "^1.7.0",
+ "@sinonjs/fake-timers": "^6.0.0",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "path-to-regexp": "^1.7.0"
}
},
- "node_modules/@types/bonjour": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz",
- "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==",
+ "node_modules/nwsapi": {
+ "version": "2.2.20",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
+ "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==",
"dev": true,
- "dependencies": {
- "@types/node": "*"
- }
+ "license": "MIT"
},
- "node_modules/@types/connect": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
- "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
+ "node_modules/parse5": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "entities": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
- "node_modules/@types/connect-history-api-fallback": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz",
- "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==",
+ "node_modules/path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
"dev": true,
"dependencies": {
- "@types/express-serve-static-core": "*",
- "@types/node": "*"
+ "isarray": "0.0.1"
}
},
- "node_modules/@types/eslint": {
- "version": "8.56.11",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz",
- "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==",
+ "node_modules/pathval": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"dev": true,
- "dependencies": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
- "dev": true
- },
- "node_modules/@types/express": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
- "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
- "dev": true,
- "dependencies": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "^4.17.33",
- "@types/qs": "*",
- "@types/serve-static": "*"
+ "engines": {
+ "node": "*"
}
},
- "node_modules/@types/express-serve-static-core": {
- "version": "4.19.5",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
- "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
- "dependencies": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*",
- "@types/send": "*"
+ "engines": {
+ "node": ">=6"
}
},
- "node_modules/@types/http-errors": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
- "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
- "node_modules/@types/http-proxy": {
- "version": "1.17.15",
- "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz",
- "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==",
+ "node_modules/saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "@types/node": "*"
+ "xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=v12.22.7"
}
},
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
- },
- "node_modules/@types/mime": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
- "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
- "dev": true
- },
- "node_modules/@types/node": {
- "version": "22.5.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.0.tgz",
- "integrity": "sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==",
+ "node_modules/sinon": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz",
+ "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==",
+ "deprecated": "16.1.1",
"dev": true,
"dependencies": {
- "undici-types": "~6.19.2"
+ "@sinonjs/commons": "^1.8.1",
+ "@sinonjs/fake-timers": "^6.0.1",
+ "@sinonjs/samsam": "^5.3.1",
+ "diff": "^4.0.2",
+ "nise": "^4.0.4",
+ "supports-color": "^7.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/sinon"
}
},
- "node_modules/@types/node-forge": {
- "version": "1.3.11",
- "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
- "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
+ "node_modules/sinon/node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true,
- "dependencies": {
- "@types/node": "*"
+ "engines": {
+ "node": ">=0.3.1"
}
},
- "node_modules/@types/parse-json": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
- "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
- "dev": true
- },
- "node_modules/@types/qs": {
- "version": "6.9.15",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz",
- "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==",
- "dev": true
- },
- "node_modules/@types/range-parser": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
- "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
- "dev": true
- },
- "node_modules/@types/retry": {
- "version": "0.12.2",
- "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz",
- "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==",
- "dev": true
- },
- "node_modules/@types/semver": {
- "version": "7.5.8",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
- "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
- "dev": true
- },
- "node_modules/@types/send": {
- "version": "0.17.4",
- "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
- "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"dependencies": {
- "@types/mime": "^1",
- "@types/node": "*"
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@types/serve-index": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz",
- "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==",
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "dev": true
+ },
+ "node_modules/tldts": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
+ "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/express": "*"
+ "tldts-core": "^6.1.86"
+ },
+ "bin": {
+ "tldts": "bin/cli.js"
}
},
- "node_modules/@types/serve-static": {
- "version": "1.15.7",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
- "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
+ "node_modules/tldts-core": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
+ "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
"dev": true,
- "dependencies": {
- "@types/http-errors": "*",
- "@types/node": "*",
- "@types/send": "*"
- }
+ "license": "MIT"
},
- "node_modules/@types/sockjs": {
- "version": "0.3.36",
- "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz",
- "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==",
+ "node_modules/tr46": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
+ "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "punycode": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/@types/ws": {
- "version": "8.5.12",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz",
- "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==",
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true,
- "dependencies": {
- "@types/node": "*"
+ "engines": {
+ "node": ">=4"
}
},
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
- "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
+ "node_modules/typescript": {
+ "version": "5.4.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
+ "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
"dev": true,
- "dependencies": {
- "@eslint-community/regexpp": "^4.4.0",
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/type-utils": "5.62.0",
- "@typescript-eslint/utils": "5.62.0",
- "debug": "^4.3.4",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "natural-compare-lite": "^1.4.0",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^5.0.0",
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "node": ">=14.17"
}
},
- "node_modules/@typescript-eslint/parser": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
- "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
+ "node_modules/w3c-xmlserializer": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+ "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/typescript-estree": "5.62.0",
- "debug": "^4.3.4"
+ "xml-name-validator": "^5.0.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "node": ">=18"
}
},
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
- "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+ "node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
"dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0"
- },
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "node": ">=12"
}
},
- "node_modules/@typescript-eslint/type-utils": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz",
- "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==",
+ "node_modules/whatwg-encoding": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "5.62.0",
- "@typescript-eslint/utils": "5.62.0",
- "debug": "^4.3.4",
- "tsutils": "^3.21.0"
+ "iconv-lite": "0.6.3"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "node": ">=18"
}
},
- "node_modules/@typescript-eslint/types": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
- "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+ "node_modules/whatwg-mimetype": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "node": ">=18"
}
},
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
- "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+ "node_modules/whatwg-url": {
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+ "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
+ "tr46": "^5.1.0",
+ "webidl-conversions": "^7.0.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "node": ">=18"
}
},
- "node_modules/@typescript-eslint/utils": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
- "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
+ "node_modules/ws": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
"dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@types/json-schema": "^7.0.9",
- "@types/semver": "^7.3.12",
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/typescript-estree": "5.62.0",
- "eslint-scope": "^5.1.1",
- "semver": "^7.3.7"
- },
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "node": ">=10.0.0"
},
"peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
}
},
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
- "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+ "node_modules/xml-name-validator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
"dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "eslint-visitor-keys": "^3.3.0"
- },
+ "license": "Apache-2.0",
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "node": ">=18"
}
},
- "node_modules/@webassemblyjs/ast": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
- "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
+ "node_modules/xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "dev": true
+ }
+ },
+ "dependencies": {
+ "@asamuzakjp/css-color": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.7.tgz",
+ "integrity": "sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g==",
"dev": true,
- "dependencies": {
- "@webassemblyjs/helper-numbers": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
+ "requires": {
+ "@csstools/css-calc": "^2.1.3",
+ "@csstools/css-color-parser": "^3.0.9",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "lru-cache": "^10.4.3"
}
},
- "node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
- "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
- "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
+ "@csstools/color-helpers": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
+ "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==",
"dev": true
},
- "node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
- "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
+ "@csstools/css-calc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz",
+ "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==",
"dev": true
},
- "node_modules/@webassemblyjs/helper-numbers": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
- "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.6",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
- "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
- "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.12.1"
- }
- },
- "node_modules/@webassemblyjs/ieee754": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
- "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
- "dev": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "node_modules/@webassemblyjs/leb128": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
- "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
- "dev": true,
- "dependencies": {
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/utf8": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
- "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
- "dev": true
- },
- "node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
- "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/helper-wasm-section": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-opt": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1",
- "@webassemblyjs/wast-printer": "1.12.1"
- }
- },
- "node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
- "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
- "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1"
- }
- },
- "node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
- "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "node_modules/@webassemblyjs/wast-printer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
- "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webpack-cli/configtest": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
- "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
- "dev": true,
- "engines": {
- "node": ">=14.15.0"
- },
- "peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
- }
- },
- "node_modules/@webpack-cli/info": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
- "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
- "dev": true,
- "engines": {
- "node": ">=14.15.0"
- },
- "peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
- }
- },
- "node_modules/@webpack-cli/serve": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
- "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
- "dev": true,
- "engines": {
- "node": ">=14.15.0"
- },
- "peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
- },
- "peerDependenciesMeta": {
- "webpack-dev-server": {
- "optional": true
- }
- }
- },
- "node_modules/@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true
- },
- "node_modules/@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true
- },
- "node_modules/abab": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
- "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
- "deprecated": "Use your platform's native atob() and btoa() methods instead",
- "dev": true
- },
- "node_modules/accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "dev": true,
- "dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/agent-base": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
- "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
- "license": "MIT",
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "dev": true,
- "dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
- }
- },
- "node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-formats/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-html-community": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
- "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
- "dev": true,
- "engines": [
- "node >= 0.8.0"
- ],
- "bin": {
- "ansi-html": "bin/ansi-html"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/are-docs-informative": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
- "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
- "dev": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
- "dev": true
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "peer": true
- },
- "node_modules/babel-eslint": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
- "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
- "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.7.0",
- "@babel/traverse": "^7.7.0",
- "@babel/types": "^7.7.0",
- "eslint-visitor-keys": "^1.0.0",
- "resolve": "^1.12.0"
- },
- "engines": {
- "node": ">=6"
- },
- "peerDependencies": {
- "eslint": ">= 4.12.1"
- }
- },
- "node_modules/babel-eslint/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "node_modules/batch": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
- "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
- "dev": true
- },
- "node_modules/big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/blockly": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-11.1.1.tgz",
- "integrity": "sha512-PmInYM9zH1HcYMffqnfmeu2O3g0intsowy08S0KDu3q8/95TfGo1tcDYpeWNQDkPOEzN1yy3oocsRO4NPDHtKA==",
- "peer": true,
- "dependencies": {
- "jsdom": "23.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/blockly/node_modules/cssstyle": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz",
- "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==",
- "peer": true,
- "dependencies": {
- "rrweb-cssom": "^0.6.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/blockly/node_modules/jsdom": {
- "version": "23.0.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.0.tgz",
- "integrity": "sha512-cbL/UCtohJguhFC7c2/hgW6BeZCNvP7URQGnx9tSJRYKCdnfbfWOrtuLTMfiB2VxKsx5wPHVsh/J0aBy9lIIhQ==",
- "peer": true,
- "dependencies": {
- "cssstyle": "^3.0.0",
- "data-urls": "^5.0.0",
- "decimal.js": "^10.4.3",
- "form-data": "^4.0.0",
- "html-encoding-sniffer": "^4.0.0",
- "http-proxy-agent": "^7.0.0",
- "https-proxy-agent": "^7.0.2",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.7",
- "parse5": "^7.1.2",
- "rrweb-cssom": "^0.6.0",
- "saxes": "^6.0.0",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.1.3",
- "w3c-xmlserializer": "^5.0.0",
- "webidl-conversions": "^7.0.0",
- "whatwg-encoding": "^3.1.1",
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0",
- "ws": "^8.14.2",
- "xml-name-validator": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "canvas": "^3.0.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
- "node_modules/body-parser": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
- "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
- "dev": true,
- "dependencies": {
- "bytes": "3.1.2",
- "content-type": "~1.0.5",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.11.0",
- "raw-body": "2.5.2",
- "type-is": "~1.6.18",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/body-parser/node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/body-parser/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/body-parser/node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/body-parser/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "node_modules/bonjour-service": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz",
- "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "multicast-dns": "^7.2.5"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "node_modules/browserslist": {
- "version": "4.23.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
- "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "caniuse-lite": "^1.0.30001646",
- "electron-to-chromium": "^1.5.4",
- "node-releases": "^2.0.18",
- "update-browserslist-db": "^1.1.0"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "node_modules/builtin-modules": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
- "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bundle-name": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
- "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
- "dev": true,
- "dependencies": {
- "run-applescript": "^7.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
- "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
- "dev": true,
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001651",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
- "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ]
- },
- "node_modules/chai": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
- "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
- "dev": true,
- "dependencies": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "loupe": "^2.3.1",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chrome-trace-event": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
- "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
- "dev": true,
- "engines": {
- "node": ">=6.0"
- }
- },
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/colorette": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
- "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
- "dev": true
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "peer": true,
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
- },
- "node_modules/comment-parser": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
- "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
- "dev": true,
- "engines": {
- "node": ">= 12.0.0"
- }
- },
- "node_modules/compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "dev": true,
- "dependencies": {
- "mime-db": ">= 1.43.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/compression": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
- "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
- "dev": true,
- "dependencies": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.16",
- "debug": "2.6.9",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.1.2",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/compression/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/compression/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "node_modules/compression/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "node_modules/connect-history-api-fallback": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
- "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
- "dev": true,
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "5.2.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
- "dev": true
- },
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true
- },
- "node_modules/cosmiconfig": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
- "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
- "dev": true,
- "dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.2.1",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.10.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/cssstyle": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz",
- "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@asamuzakjp/css-color": "^3.1.2",
- "rrweb-cssom": "^0.8.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/cssstyle/node_modules/rrweb-cssom": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
- "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/dat.gui": {
- "version": "0.7.9",
- "resolved": "https://registry.npmjs.org/dat.gui/-/dat.gui-0.7.9.tgz",
- "integrity": "sha512-sCNc1OHobc+Erc1HqiswYgHdVNpSJUlk/Hz8vzOCsER7rl+oF/4+v8GXFUyCgtXpoCX6+bnmg07DedLvBLwYKQ==",
- "dev": true
- },
- "node_modules/data-urls": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
- "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
- "license": "MIT",
- "dependencies": {
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/debug": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
- "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decimal.js": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
- "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
- "license": "MIT"
- },
- "node_modules/deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "dependencies": {
- "type-detect": "^4.0.0"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/default-browser": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz",
- "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
- "dev": true,
- "dependencies": {
- "bundle-name": "^4.1.0",
- "default-browser-id": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/default-browser-id": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz",
- "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
- "dev": true,
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/default-gateway": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
- "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
- "dev": true,
- "dependencies": {
- "execa": "^5.0.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-lazy-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
- "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "peer": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "dev": true,
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/detect-node": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
- "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
- "dev": true
- },
- "node_modules/diff": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
- "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dns-packet": {
- "version": "5.6.1",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
- "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",
- "dev": true,
- "dependencies": {
- "@leichtgewicht/ip-codec": "^2.0.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
- "dev": true
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.13",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
- "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
- "dev": true
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/enhanced-resolve": {
- "version": "5.17.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
- "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/enquirer": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
- "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "^4.1.1",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/entities": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz",
- "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/envinfo": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
- "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==",
- "dev": true,
- "bin": {
- "envinfo": "dist/cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
- "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "dev": true,
- "dependencies": {
- "get-intrinsic": "^1.2.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-module-lexer": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
- "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
- "dev": true
- },
- "node_modules/escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
- "dev": true
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "7.32.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
- "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.3",
- "@humanwhocodes/config-array": "^0.5.0",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
- "esquery": "^1.4.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.1.2",
- "globals": "^13.6.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.0.4",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
- "strip-json-comments": "^3.1.0",
- "table": "^6.0.9",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-google": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz",
- "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- },
- "peerDependencies": {
- "eslint": ">=5.16.0"
- }
- },
- "node_modules/eslint-plugin-jsdoc": {
- "version": "46.10.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz",
- "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==",
- "dev": true,
- "dependencies": {
- "@es-joy/jsdoccomment": "~0.41.0",
- "are-docs-informative": "^0.0.2",
- "comment-parser": "1.4.1",
- "debug": "^4.3.4",
- "escape-string-regexp": "^4.0.0",
- "esquery": "^1.5.0",
- "is-builtin-module": "^3.2.1",
- "semver": "^7.5.4",
- "spdx-expression-parse": "^4.0.0"
- },
- "engines": {
- "node": ">=16"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
- }
- },
- "node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- }
- },
- "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-webpack-plugin": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz",
- "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==",
- "dev": true,
- "dependencies": {
- "@types/eslint": "^7.29.0 || ^8.4.1",
- "jest-worker": "^28.0.2",
- "micromatch": "^4.0.5",
- "normalize-path": "^3.0.0",
- "schema-utils": "^4.0.0"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0",
- "webpack": "^5.0.0"
- }
- },
- "node_modules/eslint/node_modules/@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "node_modules/eslint/node_modules/eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/eslint/node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
- "dev": true,
- "dependencies": {
- "acorn": "^7.4.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/espree/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true,
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esquery/node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esrecurse/node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
- "dev": true
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "dev": true,
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/express": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
- "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
- "dev": true,
- "dependencies": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "1.20.2",
- "content-disposition": "0.5.4",
- "content-type": "~1.0.4",
- "cookie": "0.6.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.2.0",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.7",
- "qs": "6.11.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/express/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/express/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "node_modules/express/node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
- "dev": true
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "node_modules/fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
- },
- "node_modules/fast-uri": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
- "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
- "dev": true
- },
- "node_modules/fastest-levenshtein": {
- "version": "1.0.16",
- "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
- "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
- "dev": true,
- "engines": {
- "node": ">= 4.9.1"
- }
- },
- "node_modules/fastq": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
- "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
- "dev": true,
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/faye-websocket": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
- "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
- "dev": true,
- "dependencies": {
- "websocket-driver": ">=0.5.1"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
- "dev": true,
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "2.0.1",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/finalhandler/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/finalhandler/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true,
- "bin": {
- "flat": "cli.js"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
- "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
- "dev": true,
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
- "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
- "dev": true
- },
- "node_modules/follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/foreground-child": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
- "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/foreground-child/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz",
- "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.16.7",
- "chalk": "^4.1.2",
- "chokidar": "^3.5.3",
- "cosmiconfig": "^7.0.1",
- "deepmerge": "^4.2.2",
- "fs-extra": "^10.0.0",
- "memfs": "^3.4.1",
- "minimatch": "^3.0.4",
- "node-abort-controller": "^3.0.1",
- "schema-utils": "^3.1.1",
- "semver": "^7.3.5",
- "tapable": "^2.2.1"
- },
- "engines": {
- "node": ">=12.13.0",
- "yarn": ">=1.0.0"
- },
- "peerDependencies": {
- "typescript": ">3.6.0",
- "webpack": "^5.11.0"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "peer": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/fs-monkey": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz",
- "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==",
- "dev": true
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
- "dev": true
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
- "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "dev": true
- },
- "node_modules/glob/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/glob/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/gopd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
- "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
- "dev": true,
- "dependencies": {
- "get-intrinsic": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
- },
- "node_modules/handle-thing": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
- "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
- "dev": true
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
- "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/hpack.js": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
- "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "obuf": "^1.0.0",
- "readable-stream": "^2.0.1",
- "wbuf": "^1.1.0"
- }
- },
- "node_modules/hpack.js/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "node_modules/hpack.js/node_modules/readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "dev": true,
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/hpack.js/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/hpack.js/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/html-encoding-sniffer": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
- "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
- "license": "MIT",
- "dependencies": {
- "whatwg-encoding": "^3.1.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/html-entities": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
- "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/mdevils"
- },
- {
- "type": "patreon",
- "url": "https://patreon.com/mdevils"
- }
- ]
- },
- "node_modules/http-deceiver": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
- "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",
- "dev": true
- },
- "node_modules/http-errors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "dev": true,
- "dependencies": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/http-parser-js": {
- "version": "0.5.8",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
- "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==",
- "dev": true
- },
- "node_modules/http-proxy": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
- "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
- "dev": true,
- "dependencies": {
- "eventemitter3": "^4.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/http-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/http-proxy-middleware": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
- "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
- "dev": true,
- "dependencies": {
- "@types/http-proxy": "^1.17.8",
- "http-proxy": "^1.18.1",
- "is-glob": "^4.0.1",
- "is-plain-obj": "^3.0.0",
- "micromatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "@types/express": "^4.17.13"
- },
- "peerDependenciesMeta": {
- "@types/express": {
- "optional": true
- }
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
- "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.2",
- "debug": "4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true,
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/hyperdyperid": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz",
- "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==",
- "dev": true,
- "engines": {
- "node": ">=10.18"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/import-local": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
- "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
- "dev": true,
- "dependencies": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- },
- "bin": {
- "import-local-fixture": "fixtures/cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true,
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/interpret": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
- "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
- "dev": true,
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/ipaddr.js": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
- "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
- "dev": true,
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-builtin-module": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
- "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
- "dev": true,
- "dependencies": {
- "builtin-modules": "^3.3.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
- "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
- "dev": true,
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-docker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
- "dev": true,
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-inside-container": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
- "dev": true,
- "dependencies": {
- "is-docker": "^3.0.0"
- },
- "bin": {
- "is-inside-container": "cli.js"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-network-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz",
- "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==",
- "dev": true,
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
- "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
- },
- "node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-wsl": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
- "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
- "dev": true,
- "dependencies": {
- "is-inside-container": "^1.0.0"
- },
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "dev": true
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dev": true,
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/jest-worker": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
- "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
- }
- },
- "node_modules/jest-worker/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsdoc-type-pratt-parser": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
- "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
- "dev": true,
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/jsdom": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
- "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cssstyle": "^4.2.1",
- "data-urls": "^5.0.0",
- "decimal.js": "^10.5.0",
- "html-encoding-sniffer": "^4.0.0",
- "http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.6",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.16",
- "parse5": "^7.2.1",
- "rrweb-cssom": "^0.8.0",
- "saxes": "^6.0.0",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^5.1.1",
- "w3c-xmlserializer": "^5.0.0",
- "webidl-conversions": "^7.0.0",
- "whatwg-encoding": "^3.1.1",
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.1.1",
- "ws": "^8.18.0",
- "xml-name-validator": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "canvas": "^3.0.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
- "node_modules/jsdom-global": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
- "integrity": "sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg==",
- "dev": true,
- "peerDependencies": {
- "jsdom": ">=10.0.0"
- }
- },
- "node_modules/jsdom/node_modules/rrweb-cssom": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
- "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jsdom/node_modules/tough-cookie": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
- "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "tldts": "^6.1.32"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true,
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/just-extend": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
- "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
- "dev": true
- },
- "node_modules/keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dev": true,
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/launch-editor": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz",
- "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==",
- "dev": true,
- "dependencies": {
- "picocolors": "^1.0.0",
- "shell-quote": "^1.8.1"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
- },
- "node_modules/loader-runner": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
- "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
- "dev": true,
- "engines": {
- "node": ">=6.11.5"
- }
- },
- "node_modules/loader-utils": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- },
- "engines": {
- "node": ">=8.9.0"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash.assign": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
- "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==",
- "dev": true
- },
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
- "dev": true
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "node_modules/lodash.truncate": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
- "dev": true
- },
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/loupe": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz",
- "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==",
- "dev": true,
- "dependencies": {
- "get-func-name": "^2.0.0"
- }
- },
- "node_modules/lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true
- },
- "node_modules/media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/memfs": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz",
- "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==",
- "dev": true,
- "dependencies": {
- "fs-monkey": "^1.0.4"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
- "dev": true
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true,
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/mocha": {
- "version": "10.7.3",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz",
- "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "^4.1.3",
- "browser-stdout": "^1.3.1",
- "chokidar": "^3.5.3",
- "debug": "^4.3.5",
- "diff": "^5.2.0",
- "escape-string-regexp": "^4.0.0",
- "find-up": "^5.0.0",
- "glob": "^8.1.0",
- "he": "^1.2.0",
- "js-yaml": "^4.1.0",
- "log-symbols": "^4.1.0",
- "minimatch": "^5.1.6",
- "ms": "^2.1.3",
- "serialize-javascript": "^6.0.2",
- "strip-json-comments": "^3.1.1",
- "supports-color": "^8.1.1",
- "workerpool": "^6.5.1",
- "yargs": "^16.2.0",
- "yargs-parser": "^20.2.9",
- "yargs-unparser": "^2.0.0"
- },
- "bin": {
- "_mocha": "bin/_mocha",
- "mocha": "bin/mocha.js"
- },
- "engines": {
- "node": ">= 14.0.0"
- }
- },
- "node_modules/mocha/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/mocha/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/mocha/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/mocha/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mocha/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/mocha/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/monaco-editor": {
- "version": "0.20.0",
- "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.20.0.tgz",
- "integrity": "sha512-hkvf4EtPJRMQlPC3UbMoRs0vTAFAYdzFQ+gpMb8A+9znae1c43q8Mab9iVsgTcg/4PNiLGGn3SlDIa8uvK1FIQ==",
- "dev": true
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/multicast-dns": {
- "version": "7.2.5",
- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
- "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
- "dev": true,
- "dependencies": {
- "dns-packet": "^5.2.2",
- "thunky": "^1.0.2"
- },
- "bin": {
- "multicast-dns": "cli.js"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
- },
- "node_modules/natural-compare-lite": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
- "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
- "dev": true
- },
- "node_modules/negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
- "node_modules/nise": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz",
- "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.7.0",
- "@sinonjs/fake-timers": "^6.0.0",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "path-to-regexp": "^1.7.0"
- }
- },
- "node_modules/node-abort-controller": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
- "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
- "dev": true
- },
- "node_modules/node-forge": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
- "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
- "dev": true,
- "engines": {
- "node": ">= 6.13.0"
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
- "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
- "dev": true
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nwsapi": {
- "version": "2.2.20",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
- "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==",
- "license": "MIT"
- },
- "node_modules/object-inspect": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
- "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/obuf": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
- "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
- "dev": true
- },
- "node_modules/on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "dev": true,
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/open": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz",
- "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
- "dev": true,
- "dependencies": {
- "default-browser": "^5.2.1",
- "define-lazy-prop": "^3.0.0",
- "is-inside-container": "^1.0.0",
- "is-wsl": "^3.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "dev": true,
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-retry": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz",
- "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==",
- "dev": true,
- "dependencies": {
- "@types/retry": "0.12.2",
- "is-network-error": "^1.0.0",
- "retry": "^0.13.1"
- },
- "engines": {
- "node": ">=16.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/package-json-from-dist": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
- "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
- "dev": true
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parse5": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
- "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
- "license": "MIT",
- "dependencies": {
- "entities": "^6.0.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "dependencies": {
- "isarray": "0.0.1"
- }
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/picocolors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
- "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
- },
- "node_modules/progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "dev": true,
- "dependencies": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/proxy-addr/node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "dev": true,
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
- "peer": true
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
- "dev": true,
- "dependencies": {
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "peer": true
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/raw-body": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "dev": true,
- "dependencies": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/raw-body/node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/raw-body/node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/rechoir": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
- "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
- "dev": true,
- "dependencies": {
- "resolve": "^1.20.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- }
- },
- "node_modules/regexpp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
- "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
- },
- "node_modules/resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
- "dev": true,
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "dependencies": {
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-cwd/node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/retry": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
- "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "deprecated": "Rimraf versions prior to v4 are no longer supported",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rimraf/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rrweb-cssom": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
- "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
- "peer": true
- },
- "node_modules/run-applescript": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
- "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
- "dev": true,
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "node_modules/saxes": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
- "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
- "license": "ISC",
- "dependencies": {
- "xmlchars": "^2.2.0"
- },
- "engines": {
- "node": ">=v12.22.7"
- }
- },
- "node_modules/schema-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
- "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/schema-utils/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/schema-utils/node_modules/ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- },
- "peerDependencies": {
- "ajv": "^8.8.2"
- }
- },
- "node_modules/schema-utils/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/select-hose": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
- "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",
- "dev": true
- },
- "node_modules/selfsigned": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
- "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
- "dev": true,
- "dependencies": {
- "@types/node-forge": "^1.3.0",
- "node-forge": "^1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/semver": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
- "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
- "dev": true,
- "dependencies": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "2.0.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/send/node_modules/debug/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "node_modules/send/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/serve-index": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
- "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
- "dev": true,
- "dependencies": {
- "accepts": "~1.3.4",
- "batch": "0.6.1",
- "debug": "2.6.9",
- "escape-html": "~1.0.3",
- "http-errors": "~1.6.2",
- "mime-types": "~2.1.17",
- "parseurl": "~1.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/serve-index/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/serve-index/node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/serve-index/node_modules/http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
- "dev": true,
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/serve-index/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
- "dev": true
- },
- "node_modules/serve-index/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "node_modules/serve-index/node_modules/setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
- "dev": true
- },
- "node_modules/serve-index/node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/serve-static": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
- "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
- "dev": true,
- "dependencies": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.18.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "dev": true
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shell-quote": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
- "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
- "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.7",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4",
- "object-inspect": "^1.13.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
- },
- "node_modules/sinon": {
- "version": "9.2.4",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz",
- "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==",
- "deprecated": "16.1.1",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.8.1",
- "@sinonjs/fake-timers": "^6.0.1",
- "@sinonjs/samsam": "^5.3.1",
- "diff": "^4.0.2",
- "nise": "^4.0.4",
- "supports-color": "^7.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/sinon"
- }
- },
- "node_modules/sinon/node_modules/diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
- }
- },
- "node_modules/sockjs": {
- "version": "0.3.24",
- "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
- "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
- "dev": true,
- "dependencies": {
- "faye-websocket": "^0.11.3",
- "uuid": "^8.3.2",
- "websocket-driver": "^0.7.4"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-loader": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.3.tgz",
- "integrity": "sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.5",
- "iconv-lite": "^0.6.2",
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0",
- "source-map": "^0.6.1",
- "whatwg-mimetype": "^2.3.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/source-map-loader/node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/source-map-loader/node_modules/whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/spdx-exceptions": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
- "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
- "dev": true
- },
- "node_modules/spdx-expression-parse": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
- "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
- "dev": true,
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-license-ids": {
- "version": "3.0.20",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz",
- "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==",
- "dev": true
- },
- "node_modules/spdy": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
- "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
- "dev": true,
- "dependencies": {
- "debug": "^4.1.0",
- "handle-thing": "^2.0.0",
- "http-deceiver": "^1.2.7",
- "select-hose": "^2.0.0",
- "spdy-transport": "^3.0.0"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/spdy-transport": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
- "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
- "dev": true,
- "dependencies": {
- "debug": "^4.1.0",
- "detect-node": "^2.0.4",
- "hpack.js": "^2.1.6",
- "obuf": "^1.1.2",
- "readable-stream": "^3.0.6",
- "wbuf": "^1.7.3"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true
- },
- "node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
- },
- "node_modules/table": {
- "version": "6.8.2",
- "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
- "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
- "dev": true,
- "dependencies": {
- "ajv": "^8.0.1",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/table/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/table/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/terser": {
- "version": "5.31.6",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz",
- "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==",
- "dev": true,
- "dependencies": {
- "@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/terser-webpack-plugin": {
- "version": "5.3.10",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
- "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
- "dev": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.20",
- "jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.1",
- "terser": "^5.26.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.1.0"
- },
- "peerDependenciesMeta": {
- "@swc/core": {
- "optional": true
- },
- "esbuild": {
- "optional": true
- },
- "uglify-js": {
- "optional": true
- }
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/jest-worker": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
- "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/terser/node_modules/acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
- },
- "node_modules/thunky": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
- "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
- "dev": true
- },
- "node_modules/tldts": {
- "version": "6.1.86",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
- "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "tldts-core": "^6.1.86"
- },
- "bin": {
- "tldts": "bin/cli.js"
- }
- },
- "node_modules/tldts-core": {
- "version": "6.1.86",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
- "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "dev": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/tough-cookie": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
- "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
- "peer": true,
- "dependencies": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tough-cookie/node_modules/universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "peer": true,
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/tr46": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
- "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
- "license": "MIT",
- "dependencies": {
- "punycode": "^2.3.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/ts-loader": {
- "version": "9.5.1",
- "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz",
- "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "enhanced-resolve": "^5.0.0",
- "micromatch": "^4.0.0",
- "semver": "^7.3.4",
- "source-map": "^0.7.4"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "typescript": "*",
- "webpack": "^5.0.0"
- }
- },
- "node_modules/ts-loader/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- },
- "node_modules/tsutils": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
- "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
- "dev": true,
- "dependencies": {
- "tslib": "^1.8.1"
- },
- "engines": {
- "node": ">= 6"
- },
- "peerDependencies": {
- "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
- }
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dev": true,
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/typescript": {
- "version": "5.4.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
- "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
- "dev": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/undici-types": {
- "version": "6.19.8",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
- "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
- "dev": true
- },
- "node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
- "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "escalade": "^3.1.2",
- "picocolors": "^1.0.1"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "peer": true,
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
- "node_modules/utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
- "dev": true,
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/v8-compile-cache": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz",
- "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==",
- "dev": true
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/w3c-xmlserializer": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
- "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
- "license": "MIT",
- "dependencies": {
- "xml-name-validator": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/watchpack": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
- "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
- "dev": true,
- "dependencies": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/wbuf": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
- "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
- "dev": true,
- "dependencies": {
- "minimalistic-assert": "^1.0.0"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/webpack": {
- "version": "5.94.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
- "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.5",
- "@webassemblyjs/ast": "^1.12.1",
- "@webassemblyjs/wasm-edit": "^1.12.1",
- "@webassemblyjs/wasm-parser": "^1.12.1",
- "acorn": "^8.7.1",
- "acorn-import-attributes": "^1.9.5",
- "browserslist": "^4.21.10",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.1",
- "es-module-lexer": "^1.2.1",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.11",
- "json-parse-even-better-errors": "^2.3.1",
- "loader-runner": "^4.2.0",
- "mime-types": "^2.1.27",
- "neo-async": "^2.6.2",
- "schema-utils": "^3.2.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.10",
- "watchpack": "^2.4.1",
- "webpack-sources": "^3.2.3"
- },
- "bin": {
- "webpack": "bin/webpack.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependenciesMeta": {
- "webpack-cli": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-cli": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
- "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
- "dev": true,
- "dependencies": {
- "@discoveryjs/json-ext": "^0.5.0",
- "@webpack-cli/configtest": "^2.1.1",
- "@webpack-cli/info": "^2.0.2",
- "@webpack-cli/serve": "^2.0.5",
- "colorette": "^2.0.14",
- "commander": "^10.0.1",
- "cross-spawn": "^7.0.3",
- "envinfo": "^7.7.3",
- "fastest-levenshtein": "^1.0.12",
- "import-local": "^3.0.2",
- "interpret": "^3.1.1",
- "rechoir": "^0.8.0",
- "webpack-merge": "^5.7.3"
- },
- "bin": {
- "webpack-cli": "bin/cli.js"
- },
- "engines": {
- "node": ">=14.15.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "5.x.x"
- },
- "peerDependenciesMeta": {
- "@webpack-cli/generators": {
- "optional": true
- },
- "webpack-bundle-analyzer": {
- "optional": true
- },
- "webpack-dev-server": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-cli/node_modules/commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
- "dev": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/webpack-dev-middleware": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz",
- "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==",
- "dev": true,
- "dependencies": {
- "colorette": "^2.0.10",
- "memfs": "^4.6.0",
- "mime-types": "^2.1.31",
- "on-finished": "^2.4.1",
- "range-parser": "^1.2.1",
- "schema-utils": "^4.0.0"
- },
- "engines": {
- "node": ">= 18.12.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.0.0"
- },
- "peerDependenciesMeta": {
- "webpack": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/@jsonjoy.com/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
- "dev": true,
- "engines": {
- "node": ">=10.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/streamich"
- },
- "peerDependencies": {
- "tslib": "2"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/@jsonjoy.com/json-pack": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz",
- "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==",
- "dev": true,
- "dependencies": {
- "@jsonjoy.com/base64": "^1.1.1",
- "@jsonjoy.com/util": "^1.1.2",
- "hyperdyperid": "^1.2.0",
- "thingies": "^1.20.0"
- },
- "engines": {
- "node": ">=10.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/streamich"
- },
- "peerDependencies": {
- "tslib": "2"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/@jsonjoy.com/util": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz",
- "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==",
- "dev": true,
- "engines": {
- "node": ">=10.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/streamich"
- },
- "peerDependencies": {
- "tslib": "2"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/memfs": {
- "version": "4.11.1",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz",
- "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==",
- "dev": true,
- "dependencies": {
- "@jsonjoy.com/json-pack": "^1.0.3",
- "@jsonjoy.com/util": "^1.3.0",
- "tree-dump": "^1.0.1",
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">= 4.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/streamich"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/thingies": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz",
- "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==",
- "dev": true,
- "engines": {
- "node": ">=10.18"
- },
- "peerDependencies": {
- "tslib": "^2"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/tree-dump": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz",
- "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==",
- "dev": true,
- "engines": {
- "node": ">=10.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/streamich"
- },
- "peerDependencies": {
- "tslib": "2"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/tslib": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
- "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
- "dev": true
- },
- "node_modules/webpack-dev-server": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz",
- "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==",
- "dev": true,
- "dependencies": {
- "@types/bonjour": "^3.5.13",
- "@types/connect-history-api-fallback": "^1.5.4",
- "@types/express": "^4.17.21",
- "@types/serve-index": "^1.9.4",
- "@types/serve-static": "^1.15.5",
- "@types/sockjs": "^0.3.36",
- "@types/ws": "^8.5.10",
- "ansi-html-community": "^0.0.8",
- "bonjour-service": "^1.2.1",
- "chokidar": "^3.6.0",
- "colorette": "^2.0.10",
- "compression": "^1.7.4",
- "connect-history-api-fallback": "^2.0.0",
- "default-gateway": "^6.0.3",
- "express": "^4.17.3",
- "graceful-fs": "^4.2.6",
- "html-entities": "^2.4.0",
- "http-proxy-middleware": "^2.0.3",
- "ipaddr.js": "^2.1.0",
- "launch-editor": "^2.6.1",
- "open": "^10.0.3",
- "p-retry": "^6.2.0",
- "rimraf": "^5.0.5",
- "schema-utils": "^4.2.0",
- "selfsigned": "^2.4.1",
- "serve-index": "^1.9.1",
- "sockjs": "^0.3.24",
- "spdy": "^4.0.2",
- "webpack-dev-middleware": "^7.1.0",
- "ws": "^8.16.0"
- },
- "bin": {
- "webpack-dev-server": "bin/webpack-dev-server.js"
- },
- "engines": {
- "node": ">= 18.12.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.0.0"
- },
- "peerDependenciesMeta": {
- "webpack": {
- "optional": true
- },
- "webpack-cli": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-dev-server/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/webpack-dev-server/node_modules/glob": {
- "version": "10.4.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
- "dev": true,
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/webpack-dev-server/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/webpack-dev-server/node_modules/rimraf": {
- "version": "5.0.10",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
- "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
- "dev": true,
- "dependencies": {
- "glob": "^10.3.7"
- },
- "bin": {
- "rimraf": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/webpack-merge": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
- "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
- "dev": true,
- "dependencies": {
- "clone-deep": "^4.0.1",
- "flat": "^5.0.2",
- "wildcard": "^2.0.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/webpack-sources": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
- "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
- "dev": true,
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/webpack/node_modules/acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/webpack/node_modules/acorn-import-attributes": {
- "version": "1.9.5",
- "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
- "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^8"
- }
- },
- "node_modules/webpack/node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/websocket-driver": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
- "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
- "dev": true,
- "dependencies": {
- "http-parser-js": ">=0.5.1",
- "safe-buffer": ">=5.1.0",
- "websocket-extensions": ">=0.1.1"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/websocket-extensions": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
- "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/whatwg-encoding": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
- "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
- "license": "MIT",
- "dependencies": {
- "iconv-lite": "0.6.3"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/whatwg-mimetype": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
- "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/whatwg-url": {
- "version": "14.2.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
- "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
- "license": "MIT",
- "dependencies": {
- "tr46": "^5.1.0",
- "webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/wildcard": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
- "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
- "dev": true
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/workerpool": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
- "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
- "dev": true
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "node_modules/ws": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
- "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/xml-name-validator": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
- "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "dependencies": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-unparser/node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- },
- "dependencies": {
- "@asamuzakjp/css-color": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.7.tgz",
- "integrity": "sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g==",
- "dev": true,
- "requires": {
- "@csstools/css-calc": "^2.1.3",
- "@csstools/css-color-parser": "^3.0.9",
- "@csstools/css-parser-algorithms": "^3.0.4",
- "@csstools/css-tokenizer": "^3.0.3",
- "lru-cache": "^10.4.3"
- }
- },
- "@babel/code-frame": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
- "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.24.7",
- "picocolors": "^1.0.0"
- }
- },
- "@babel/generator": {
- "version": "7.25.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
- "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.25.4",
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25",
- "jsesc": "^2.5.1"
- }
- },
- "@babel/helper-string-parser": {
- "version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
- "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
- "dev": true
- },
- "@babel/helper-validator-identifier": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
- "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
- "dev": true
- },
- "@babel/highlight": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
- "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.24.7",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "@babel/parser": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
- "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.25.4"
- }
- },
- "@babel/template": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
- "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.24.7",
- "@babel/parser": "^7.25.0",
- "@babel/types": "^7.25.0"
- }
- },
- "@babel/traverse": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
- "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.25.4",
- "@babel/parser": "^7.25.4",
- "@babel/template": "^7.25.0",
- "@babel/types": "^7.25.4",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
- }
- },
- "@babel/types": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
- "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
- "dev": true,
- "requires": {
- "@babel/helper-string-parser": "^7.24.8",
- "@babel/helper-validator-identifier": "^7.24.7",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@blockly/block-test": {
- "version": "6.0.11",
- "resolved": "https://registry.npmjs.org/@blockly/block-test/-/block-test-6.0.11.tgz",
- "integrity": "sha512-aIgcxkof1gLJtJXKSvmnug9iSXbv5Qilnov4Sa/QNURiWJRxvMNqWiTZJVu/reuCQK4Qm4jadg9R9l+eu7ujvw==",
- "dev": true,
- "requires": {}
- },
- "@blockly/dev-scripts": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/@blockly/dev-scripts/-/dev-scripts-4.0.7.tgz",
- "integrity": "sha512-viRLV1HO/NwpfQ1NO/S6br/oyJxnp4owTpQGS+bGx/yOVD1Aiku/bRCjeL/apLnwstNXqSmQl4kEvwnF5i3z2g==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@blockly/eslint-config": "^4.0.1",
- "chalk": "^4.0.0",
- "eslint": "^7.15.0",
- "eslint-webpack-plugin": "^3.0.0",
- "fork-ts-checker-webpack-plugin": "^8.0.0",
- "mocha": "^10.7.0",
- "rimraf": "^3.0.2",
- "source-map-loader": "^1.0.0",
- "ts-loader": "^9.4.1",
- "webpack": "^5.0.0",
- "webpack-cli": "^5.1.4",
- "webpack-dev-server": "^5.0.4"
- }
- },
- "@blockly/dev-tools": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.1.0.tgz",
- "integrity": "sha512-oiNh1p8N/saDNsk/U6wY+SJs8i2bMkVgQYAwCd4deVIQeLGRZsw83Adm9CiXyXcFrZUOeCwmiNKwTR5JY+qh0Q==",
- "dev": true,
- "requires": {
- "@blockly/block-test": "^6.0.11",
- "@blockly/theme-dark": "^7.0.10",
- "@blockly/theme-deuteranopia": "^6.0.10",
- "@blockly/theme-highcontrast": "^6.0.10",
- "@blockly/theme-tritanopia": "^6.0.10",
- "chai": "^4.2.0",
- "dat.gui": "^0.7.7",
- "lodash.assign": "^4.2.0",
- "lodash.merge": "^4.6.2",
- "monaco-editor": "^0.20.0",
- "sinon": "^9.0.2"
- }
- },
- "@blockly/eslint-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@blockly/eslint-config/-/eslint-config-4.0.1.tgz",
- "integrity": "sha512-yY6aeX6gv0T/+lFwxP35yVbZT2Q6kOgeDfBXTmIsul+S6Qr0ZqMJIkwrCzl1z45YRrB1WBGUJw40rimFwspeyg==",
- "dev": true,
- "requires": {
- "@typescript-eslint/eslint-plugin": "^5.0.0",
- "@typescript-eslint/parser": "^5.0.0",
- "babel-eslint": "^10.1.0",
- "eslint-config-google": "^0.14.0",
- "eslint-plugin-jsdoc": "^46.8.0"
- }
- },
- "@blockly/theme-dark": {
- "version": "7.0.10",
- "resolved": "https://registry.npmjs.org/@blockly/theme-dark/-/theme-dark-7.0.10.tgz",
- "integrity": "sha512-Wc6n115vt9alxzPkEwYtvBBGoPUV3gaYE00dvSKhqXTNoy1Xioujj9kT9VkGmdMO2mhgnJNczSpvxG8tcd4zLQ==",
- "dev": true,
- "requires": {}
- },
- "@blockly/theme-deuteranopia": {
- "version": "6.0.10",
- "resolved": "https://registry.npmjs.org/@blockly/theme-deuteranopia/-/theme-deuteranopia-6.0.10.tgz",
- "integrity": "sha512-im5nIvf/Z0f1vJ9DK5Euu6URfY8G44xeFsat2b7TySF0BfAUWkGsagK3C6D5NatigPxKZqz3exC9zeXEtprAcg==",
- "dev": true,
- "requires": {}
- },
- "@blockly/theme-highcontrast": {
- "version": "6.0.10",
- "resolved": "https://registry.npmjs.org/@blockly/theme-highcontrast/-/theme-highcontrast-6.0.10.tgz",
- "integrity": "sha512-s1hehl/b50IhebCs20hm2hFWbUTqJ2YSGdR0gnp2NLfNNRWwyZHZk+q4aG3k4L0YBWjNfE3XiRCkDISy83dBIA==",
- "dev": true,
- "requires": {}
- },
- "@blockly/theme-tritanopia": {
- "version": "6.0.10",
- "resolved": "https://registry.npmjs.org/@blockly/theme-tritanopia/-/theme-tritanopia-6.0.10.tgz",
- "integrity": "sha512-QNIvUHokGMLnCWUzERRZa6sSkD5RIUynWDI+KNurBH21NeWnSNScQiNu0dS/w5MSkZ/Iqqbi79UZoF49SzEayg==",
- "dev": true,
- "requires": {}
- },
- "@csstools/color-helpers": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
- "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==",
- "dev": true
- },
- "@csstools/css-calc": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz",
- "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==",
- "dev": true,
- "requires": {}
- },
- "@csstools/css-color-parser": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz",
- "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==",
- "dev": true,
- "requires": {
- "@csstools/color-helpers": "^5.0.2",
- "@csstools/css-calc": "^2.1.3"
- }
- },
- "@csstools/css-parser-algorithms": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
- "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
- "dev": true,
- "requires": {}
- },
- "@csstools/css-tokenizer": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
- "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
- "dev": true
- },
- "@discoveryjs/json-ext": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
- "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
- "dev": true
- },
- "@es-joy/jsdoccomment": {
- "version": "0.41.0",
- "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz",
- "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==",
- "dev": true,
- "requires": {
- "comment-parser": "1.4.1",
- "esquery": "^1.5.0",
- "jsdoc-type-pratt-parser": "~4.0.0"
- }
- },
- "@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^3.3.0"
- }
- },
- "@eslint-community/regexpp": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
- "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
- "dev": true
- },
- "@eslint/eslintrc": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
- "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
- "globals": "^13.9.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
- "strip-json-comments": "^3.1.1"
- },
- "dependencies": {
- "globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "requires": {
- "type-fest": "^0.20.2"
- }
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- }
- }
- },
- "@humanwhocodes/config-array": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
- "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
- "dev": true,
- "requires": {
- "@humanwhocodes/object-schema": "^1.2.0",
- "debug": "^4.1.1",
- "minimatch": "^3.0.4"
- }
- },
- "@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
- "dev": true
- },
- "@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
- "requires": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true
- },
- "ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true
- },
- "emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
- },
- "string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
- "requires": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- }
- },
- "strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "requires": {
- "ansi-regex": "^6.0.1"
- }
- },
- "wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- }
- }
- }
- },
- "@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "dev": true
- },
- "@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "dev": true
- },
- "@jridgewell/source-map": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
- "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
- "dev": true,
- "requires": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25"
- }
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
- "dev": true
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
- "dev": true,
- "requires": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "@leichtgewicht/ip-codec": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
- "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
- "dev": true
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
- },
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
- "@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "optional": true
- },
- "@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
- "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "@sinonjs/samsam": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz",
- "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.6.0",
- "lodash.get": "^4.4.2",
- "type-detect": "^4.0.8"
- }
- },
- "@sinonjs/text-encoding": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
- "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
- "dev": true
- },
- "@types/body-parser": {
- "version": "1.19.5",
- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
- "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
- "dev": true,
- "requires": {
- "@types/connect": "*",
- "@types/node": "*"
- }
- },
- "@types/bonjour": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz",
- "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/connect": {
- "version": "3.4.38",
- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
- "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/connect-history-api-fallback": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz",
- "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==",
- "dev": true,
- "requires": {
- "@types/express-serve-static-core": "*",
- "@types/node": "*"
- }
- },
- "@types/eslint": {
- "version": "8.56.11",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz",
- "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==",
- "dev": true,
- "requires": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
- "dev": true
- },
- "@types/express": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
- "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
- "dev": true,
- "requires": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "^4.17.33",
- "@types/qs": "*",
- "@types/serve-static": "*"
- }
- },
- "@types/express-serve-static-core": {
- "version": "4.19.5",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
- "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*",
- "@types/send": "*"
- }
- },
- "@types/http-errors": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
- "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
- "dev": true
- },
- "@types/http-proxy": {
- "version": "1.17.15",
- "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz",
- "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
- },
- "@types/mime": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
- "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
- "dev": true
- },
- "@types/node": {
- "version": "22.5.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.0.tgz",
- "integrity": "sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==",
- "dev": true,
- "requires": {
- "undici-types": "~6.19.2"
- }
- },
- "@types/node-forge": {
- "version": "1.3.11",
- "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz",
- "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/parse-json": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
- "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
- "dev": true
- },
- "@types/qs": {
- "version": "6.9.15",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz",
- "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==",
- "dev": true
- },
- "@types/range-parser": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
- "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
- "dev": true
- },
- "@types/retry": {
- "version": "0.12.2",
- "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz",
- "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==",
- "dev": true
- },
- "@types/semver": {
- "version": "7.5.8",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
- "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
- "dev": true
- },
- "@types/send": {
- "version": "0.17.4",
- "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
- "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
- "dev": true,
- "requires": {
- "@types/mime": "^1",
- "@types/node": "*"
- }
- },
- "@types/serve-index": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz",
- "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==",
- "dev": true,
- "requires": {
- "@types/express": "*"
- }
- },
- "@types/serve-static": {
- "version": "1.15.7",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
- "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
- "dev": true,
- "requires": {
- "@types/http-errors": "*",
- "@types/node": "*",
- "@types/send": "*"
- }
- },
- "@types/sockjs": {
- "version": "0.3.36",
- "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz",
- "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/ws": {
- "version": "8.5.12",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz",
- "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@typescript-eslint/eslint-plugin": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
- "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
- "dev": true,
- "requires": {
- "@eslint-community/regexpp": "^4.4.0",
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/type-utils": "5.62.0",
- "@typescript-eslint/utils": "5.62.0",
- "debug": "^4.3.4",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "natural-compare-lite": "^1.4.0",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- }
- },
- "@typescript-eslint/parser": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
- "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/typescript-estree": "5.62.0",
- "debug": "^4.3.4"
- }
- },
- "@typescript-eslint/scope-manager": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
- "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0"
- }
- },
- "@typescript-eslint/type-utils": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz",
- "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==",
- "dev": true,
- "requires": {
- "@typescript-eslint/typescript-estree": "5.62.0",
- "@typescript-eslint/utils": "5.62.0",
- "debug": "^4.3.4",
- "tsutils": "^3.21.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
- "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
- "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- }
- },
- "@typescript-eslint/utils": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz",
- "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==",
- "dev": true,
- "requires": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@types/json-schema": "^7.0.9",
- "@types/semver": "^7.3.12",
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/typescript-estree": "5.62.0",
- "eslint-scope": "^5.1.1",
- "semver": "^7.3.7"
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
- "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.62.0",
- "eslint-visitor-keys": "^3.3.0"
- }
- },
- "@webassemblyjs/ast": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
- "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-numbers": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
- }
- },
- "@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
- "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
- "dev": true
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
- "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
- "dev": true
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
- "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
- "dev": true
- },
- "@webassemblyjs/helper-numbers": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
- "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
- "dev": true,
- "requires": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.6",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
- "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
- "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.12.1"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
- "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
- "dev": true,
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
- "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
- "dev": true,
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
- "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
- "dev": true
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
- "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/helper-wasm-section": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-opt": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1",
- "@webassemblyjs/wast-printer": "1.12.1"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
- "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
- "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
- "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
- "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webpack-cli/configtest": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
- "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
- "dev": true,
- "requires": {}
- },
- "@webpack-cli/info": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
- "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
- "dev": true,
- "requires": {}
- },
- "@webpack-cli/serve": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
- "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
- "dev": true,
- "requires": {}
- },
- "@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true
- },
- "@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true
- },
- "abab": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
- "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
- "dev": true
- },
- "accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "dev": true,
- "requires": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- }
- },
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "requires": {}
- },
- "agent-base": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
- "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "dev": true,
- "requires": {
- "ajv": "^8.0.0"
- },
- "dependencies": {
- "ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- }
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- }
- }
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true
- },
- "ansi-html-community": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
- "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
- "dev": true
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "are-docs-informative": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
- "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
- "dev": true
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
- "dev": true
- },
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "peer": true
- },
- "babel-eslint": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
- "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.7.0",
- "@babel/traverse": "^7.7.0",
- "@babel/types": "^7.7.0",
- "eslint-visitor-keys": "^1.0.0",
- "resolve": "^1.12.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
- }
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "batch": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
- "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
- "dev": true
- },
- "big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "dev": true
- },
- "binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true
- },
- "blockly": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-11.1.1.tgz",
- "integrity": "sha512-PmInYM9zH1HcYMffqnfmeu2O3g0intsowy08S0KDu3q8/95TfGo1tcDYpeWNQDkPOEzN1yy3oocsRO4NPDHtKA==",
- "peer": true,
- "requires": {
- "jsdom": "23.0.0"
- },
- "dependencies": {
- "cssstyle": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz",
- "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==",
- "peer": true,
- "requires": {
- "rrweb-cssom": "^0.6.0"
- }
- },
- "jsdom": {
- "version": "23.0.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.0.tgz",
- "integrity": "sha512-cbL/UCtohJguhFC7c2/hgW6BeZCNvP7URQGnx9tSJRYKCdnfbfWOrtuLTMfiB2VxKsx5wPHVsh/J0aBy9lIIhQ==",
- "peer": true,
- "requires": {
- "cssstyle": "^3.0.0",
- "data-urls": "^5.0.0",
- "decimal.js": "^10.4.3",
- "form-data": "^4.0.0",
- "html-encoding-sniffer": "^4.0.0",
- "http-proxy-agent": "^7.0.0",
- "https-proxy-agent": "^7.0.2",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.7",
- "parse5": "^7.1.2",
- "rrweb-cssom": "^0.6.0",
- "saxes": "^6.0.0",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.1.3",
- "w3c-xmlserializer": "^5.0.0",
- "webidl-conversions": "^7.0.0",
- "whatwg-encoding": "^3.1.1",
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0",
- "ws": "^8.14.2",
- "xml-name-validator": "^5.0.0"
- }
- }
- }
- },
- "body-parser": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
- "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
- "dev": true,
- "requires": {
- "bytes": "3.1.2",
- "content-type": "~1.0.5",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.11.0",
- "raw-body": "2.5.2",
- "type-is": "~1.6.18",
- "unpipe": "1.0.0"
- },
- "dependencies": {
- "bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "dev": true
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- }
- }
- },
- "bonjour-service": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz",
- "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.3",
- "multicast-dns": "^7.2.5"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "requires": {
- "fill-range": "^7.1.1"
- }
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "browserslist": {
- "version": "4.23.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
- "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001646",
- "electron-to-chromium": "^1.5.4",
- "node-releases": "^2.0.18",
- "update-browserslist-db": "^1.1.0"
- }
- },
- "buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "builtin-modules": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
- "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
- "dev": true
- },
- "bundle-name": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
- "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
- "dev": true,
- "requires": {
- "run-applescript": "^7.0.0"
- }
- },
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
- "dev": true
- },
- "call-bind": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
- "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
- "dev": true,
- "requires": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.1"
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30001651",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
- "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
- "dev": true
- },
- "chai": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
- "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "loupe": "^2.3.1",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true
- },
- "chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- }
- },
- "chrome-trace-event": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
- "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
- "dev": true
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "colorette": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
- "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "peer": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
- },
- "comment-parser": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
- "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
- "dev": true
- },
- "compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "dev": true,
- "requires": {
- "mime-db": ">= 1.43.0 < 2"
- }
- },
- "compression": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
- "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.16",
- "debug": "2.6.9",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.1.2",
- "vary": "~1.1.2"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- }
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "connect-history-api-fallback": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
- "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
- "dev": true
- },
- "content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.2.1"
- }
- },
- "content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "dev": true
- },
- "cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
- "dev": true
- },
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true
- },
- "cosmiconfig": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
- "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
- "dev": true,
- "requires": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.2.1",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.10.0"
- }
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "cssstyle": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz",
- "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==",
- "dev": true,
- "requires": {
- "@asamuzakjp/css-color": "^3.1.2",
- "rrweb-cssom": "^0.8.0"
- },
- "dependencies": {
- "rrweb-cssom": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
- "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
- "dev": true
- }
- }
- },
- "dat.gui": {
- "version": "0.7.9",
- "resolved": "https://registry.npmjs.org/dat.gui/-/dat.gui-0.7.9.tgz",
- "integrity": "sha512-sCNc1OHobc+Erc1HqiswYgHdVNpSJUlk/Hz8vzOCsER7rl+oF/4+v8GXFUyCgtXpoCX6+bnmg07DedLvBLwYKQ==",
- "dev": true
- },
- "data-urls": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
- "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
- "requires": {
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0"
- }
- },
- "debug": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
- "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
- },
- "decimal.js": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
- "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw=="
- },
- "deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "dev": true
- },
- "default-browser": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz",
- "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
- "dev": true,
- "requires": {
- "bundle-name": "^4.1.0",
- "default-browser-id": "^5.0.0"
- }
- },
- "default-browser-id": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz",
- "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
- "dev": true
- },
- "default-gateway": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
- "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
- "dev": true,
- "requires": {
- "execa": "^5.0.0"
- }
- },
- "define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
- "requires": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- }
- },
- "define-lazy-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
- "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
- "dev": true
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "peer": true
- },
- "depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "dev": true
- },
- "destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "dev": true
- },
- "detect-node": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
- "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
- "dev": true
- },
- "diff": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
- "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
- "dev": true
- },
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "requires": {
- "path-type": "^4.0.0"
- }
- },
- "dns-packet": {
- "version": "5.6.1",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
- "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",
- "dev": true,
- "requires": {
- "@leichtgewicht/ip-codec": "^2.0.1"
- }
- },
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
- "dev": true
- },
- "electron-to-chromium": {
- "version": "1.5.13",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
- "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
- "dev": true
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "dev": true
- },
- "enhanced-resolve": {
- "version": "5.17.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
- "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
- }
- },
- "enquirer": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
- "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.1",
- "strip-ansi": "^6.0.1"
- }
- },
- "entities": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz",
- "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw=="
- },
- "envinfo": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
- "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==",
- "dev": true
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es-define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
- "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.2.4"
- }
- },
- "es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true
- },
- "es-module-lexer": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
- "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
- "dev": true
- },
- "escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
- "dev": true
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "eslint": {
- "version": "7.32.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
- "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.3",
- "@humanwhocodes/config-array": "^0.5.0",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
- "esquery": "^1.4.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.1.2",
- "globals": "^13.6.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.0.4",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
- "strip-json-comments": "^3.1.0",
- "table": "^6.0.9",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
- "dev": true
- },
- "globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "requires": {
- "type-fest": "^0.20.2"
- }
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- }
- }
- },
- "eslint-config-google": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz",
- "integrity": "sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==",
- "dev": true,
- "requires": {}
- },
- "eslint-plugin-jsdoc": {
- "version": "46.10.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz",
- "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==",
- "dev": true,
- "requires": {
- "@es-joy/jsdoccomment": "~0.41.0",
- "are-docs-informative": "^0.0.2",
- "comment-parser": "1.4.1",
- "debug": "^4.3.4",
- "escape-string-regexp": "^4.0.0",
- "esquery": "^1.5.0",
- "is-builtin-module": "^3.2.1",
- "semver": "^7.5.4",
- "spdx-expression-parse": "^4.0.0"
- }
- },
- "eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
- }
- },
- "eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "dev": true
- },
- "eslint-webpack-plugin": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz",
- "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==",
- "dev": true,
- "requires": {
- "@types/eslint": "^7.29.0 || ^8.4.1",
- "jest-worker": "^28.0.2",
- "micromatch": "^4.0.5",
- "normalize-path": "^3.0.0",
- "schema-utils": "^4.0.0"
- }
- },
- "espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
- "dev": true,
- "requires": {
- "acorn": "^7.4.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esquery": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
- "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- }
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "requires": {
- "estraverse": "^5.2.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- }
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "dev": true
- },
- "eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
- "dev": true
- },
- "events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "dev": true
- },
- "execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- }
- },
- "express": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
- "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "1.20.2",
- "content-disposition": "0.5.4",
- "content-type": "~1.0.4",
- "cookie": "0.6.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.2.0",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.7",
- "qs": "6.11.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
- "dev": true
- }
- }
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "fast-glob": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
- "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- }
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
- },
- "fast-uri": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
- "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
- "dev": true
- },
- "fastest-levenshtein": {
- "version": "1.0.16",
- "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
- "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
- "dev": true
- },
- "fastq": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
- "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
- "dev": true,
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "faye-websocket": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
- "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
- "dev": true,
- "requires": {
- "websocket-driver": ">=0.5.1"
- }
- },
- "file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
- "requires": {
- "flat-cache": "^3.0.4"
- }
- },
- "fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "2.0.1",
- "unpipe": "~1.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- }
- }
- },
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
- },
- "flat-cache": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
- "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
- "dev": true,
- "requires": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
- }
- },
- "flatted": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
- "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
- "dev": true
- },
- "follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
- "dev": true
- },
- "foreground-child": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
- "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "dependencies": {
- "signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true
- }
- }
- },
- "fork-ts-checker-webpack-plugin": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz",
- "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.16.7",
- "chalk": "^4.1.2",
- "chokidar": "^3.5.3",
- "cosmiconfig": "^7.0.1",
- "deepmerge": "^4.2.2",
- "fs-extra": "^10.0.0",
- "memfs": "^3.4.1",
- "minimatch": "^3.0.4",
- "node-abort-controller": "^3.0.1",
- "schema-utils": "^3.1.1",
- "semver": "^7.3.5",
- "tapable": "^2.2.1"
- },
- "dependencies": {
- "schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
- "form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "peer": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
- "forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "dev": true
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "dev": true
- },
- "fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- }
- },
- "fs-monkey": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz",
- "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==",
- "dev": true
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "optional": true
- },
- "function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
- "dev": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
- "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "dev": true,
- "requires": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
- }
- },
- "get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true
- },
- "glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "dev": true
- },
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- },
- "globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- }
- },
- "gopd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
- "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.1.3"
- }
- },
- "graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
- },
- "graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
- },
- "handle-thing": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
- "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
- "requires": {
- "es-define-property": "^1.0.0"
- }
- },
- "has-proto": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
- "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
- "dev": true
- },
- "has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "dev": true
- },
- "hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.2"
- }
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "hpack.js": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
- "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "obuf": "^1.0.0",
- "readable-stream": "^2.0.1",
- "wbuf": "^1.1.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "html-encoding-sniffer": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
- "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
- "requires": {
- "whatwg-encoding": "^3.1.1"
- }
- },
- "html-entities": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
- "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
- "dev": true
- },
- "http-deceiver": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
- "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",
- "dev": true
- },
- "http-errors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "dev": true,
- "requires": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- }
- },
- "http-parser-js": {
- "version": "0.5.8",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
- "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==",
- "dev": true
- },
- "http-proxy": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
- "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
- "dev": true,
- "requires": {
- "eventemitter3": "^4.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
- }
- },
- "http-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
- "requires": {
- "agent-base": "^7.1.0",
- "debug": "^4.3.4"
- }
- },
- "http-proxy-middleware": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
- "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
- "dev": true,
- "requires": {
- "@types/http-proxy": "^1.17.8",
- "http-proxy": "^1.18.1",
- "is-glob": "^4.0.1",
- "is-plain-obj": "^3.0.0",
- "micromatch": "^4.0.2"
- }
- },
- "https-proxy-agent": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
- "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
- "requires": {
- "agent-base": "^7.1.2",
- "debug": "4"
- }
- },
- "human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true
- },
- "hyperdyperid": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz",
- "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==",
- "dev": true
- },
- "iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- }
- },
- "ignore": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
- "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
- "dev": true
- },
- "import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "import-local": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
- "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
- "dev": true,
- "requires": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "interpret": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
- "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
- "dev": true
- },
- "ipaddr.js": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
- "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
- "dev": true
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-builtin-module": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
- "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
- "dev": true,
- "requires": {
- "builtin-modules": "^3.3.0"
- }
- },
- "is-core-module": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
- "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
- "dev": true,
- "requires": {
- "hasown": "^2.0.2"
- }
- },
- "is-docker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-inside-container": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
- "dev": true,
- "requires": {
- "is-docker": "^3.0.0"
- }
- },
- "is-network-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz",
- "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-plain-obj": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
- "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
- "dev": true
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
- },
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true
- },
- "is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true
- },
- "is-wsl": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
- "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
- "dev": true,
- "requires": {
- "is-inside-container": "^1.0.0"
- }
- },
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "dev": true
- },
- "jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "dev": true,
- "requires": {
- "@isaacs/cliui": "^8.0.2",
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "jest-worker": {
- "version": "28.1.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
- "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsdoc-type-pratt-parser": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
- "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
- "dev": true
- },
- "jsdom": {
- "version": "26.1.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
- "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
- "dev": true,
- "requires": {
- "cssstyle": "^4.2.1",
- "data-urls": "^5.0.0",
- "decimal.js": "^10.5.0",
- "html-encoding-sniffer": "^4.0.0",
- "http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.6",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.16",
- "parse5": "^7.2.1",
- "rrweb-cssom": "^0.8.0",
- "saxes": "^6.0.0",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^5.1.1",
- "w3c-xmlserializer": "^5.0.0",
- "webidl-conversions": "^7.0.0",
- "whatwg-encoding": "^3.1.1",
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.1.1",
- "ws": "^8.18.0",
- "xml-name-validator": "^5.0.0"
- },
- "dependencies": {
- "rrweb-cssom": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
- "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
- "dev": true
- },
- "tough-cookie": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
- "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
- "dev": true,
- "requires": {
- "tldts": "^6.1.32"
- }
- }
- }
- },
- "jsdom-global": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
- "integrity": "sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg==",
- "dev": true,
- "requires": {}
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
- },
- "json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
- },
- "json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true
- },
- "jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- }
- },
- "just-extend": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
- "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
- "dev": true
- },
- "keyv": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
- "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
- "dev": true,
- "requires": {
- "json-buffer": "3.0.1"
- }
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "launch-editor": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz",
- "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==",
- "dev": true,
- "requires": {
- "picocolors": "^1.0.0",
- "shell-quote": "^1.8.1"
- }
- },
- "levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- }
- },
- "lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
- },
- "loader-runner": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
- "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
- "dev": true
- },
- "loader-utils": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "lodash.assign": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
- "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==",
- "dev": true
- },
- "lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
- "dev": true
- },
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "lodash.truncate": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
- "dev": true
- },
- "log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- }
- },
- "loupe": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz",
- "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.0"
- }
- },
- "lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true
- },
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
- "dev": true
- },
- "memfs": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz",
- "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==",
- "dev": true,
- "requires": {
- "fs-monkey": "^1.0.4"
- }
- },
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
- "dev": true
- },
- "merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
- "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
- "dev": true,
- "requires": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- }
- },
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true
- },
- "mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
- },
- "mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "requires": {
- "mime-db": "1.52.0"
- }
- },
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
- },
- "minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
- },
- "minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "dev": true
- },
- "mocha": {
- "version": "10.7.3",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz",
- "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.3",
- "browser-stdout": "^1.3.1",
- "chokidar": "^3.5.3",
- "debug": "^4.3.5",
- "diff": "^5.2.0",
- "escape-string-regexp": "^4.0.0",
- "find-up": "^5.0.0",
- "glob": "^8.1.0",
- "he": "^1.2.0",
- "js-yaml": "^4.1.0",
- "log-symbols": "^4.1.0",
- "minimatch": "^5.1.6",
- "ms": "^2.1.3",
- "serialize-javascript": "^6.0.2",
- "strip-json-comments": "^3.1.1",
- "supports-color": "^8.1.1",
- "workerpool": "^6.5.1",
- "yargs": "^16.2.0",
- "yargs-parser": "^20.2.9",
- "yargs-unparser": "^2.0.0"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "monaco-editor": {
- "version": "0.20.0",
- "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.20.0.tgz",
- "integrity": "sha512-hkvf4EtPJRMQlPC3UbMoRs0vTAFAYdzFQ+gpMb8A+9znae1c43q8Mab9iVsgTcg/4PNiLGGn3SlDIa8uvK1FIQ==",
- "dev": true
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "multicast-dns": {
- "version": "7.2.5",
- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
- "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
- "dev": true,
- "requires": {
- "dns-packet": "^5.2.2",
- "thunky": "^1.0.2"
- }
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
- },
- "natural-compare-lite": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
- "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
- "dev": true
- },
- "negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "dev": true
- },
- "neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
- "nise": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz",
- "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0",
- "@sinonjs/fake-timers": "^6.0.0",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "path-to-regexp": "^1.7.0"
- }
- },
- "node-abort-controller": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
- "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
- "dev": true
- },
- "node-forge": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
- "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
- "dev": true
- },
- "node-releases": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
- "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
- "dev": true
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "requires": {
- "path-key": "^3.0.0"
- }
- },
- "nwsapi": {
- "version": "2.2.20",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
- "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA=="
- },
- "object-inspect": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
- "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
- "dev": true
- },
- "obuf": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
- "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
- "dev": true
- },
- "on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "dev": true,
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "dev": true
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "open": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz",
- "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
- "dev": true,
- "requires": {
- "default-browser": "^5.2.1",
- "define-lazy-prop": "^3.0.0",
- "is-inside-container": "^1.0.0",
- "is-wsl": "^3.1.0"
- }
- },
- "optionator": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "dev": true,
- "requires": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.5"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "p-retry": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz",
- "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==",
- "dev": true,
- "requires": {
- "@types/retry": "0.12.2",
- "is-network-error": "^1.0.0",
- "retry": "^0.13.1"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
- "package-json-from-dist": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
- "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
- "dev": true
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- }
- },
- "parse5": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
- "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
- "requires": {
- "entities": "^6.0.0"
- }
- },
- "parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
- "requires": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- }
- },
- "path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "requires": {
- "isarray": "0.0.1"
- }
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true
- },
- "picocolors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
- "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- }
- }
- },
- "prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
- "proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "dev": true,
- "requires": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "dependencies": {
- "ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "dev": true
- }
- }
- },
- "psl": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
- "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
- "peer": true
- },
- "punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
- },
- "qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
- "dev": true,
- "requires": {
- "side-channel": "^1.0.4"
- }
- },
- "querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "peer": true
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "dev": true
- },
- "raw-body": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "dev": true,
- "requires": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "dependencies": {
- "bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "dev": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- }
- }
- },
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "rechoir": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
- "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
+ "@csstools/css-color-parser": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz",
+ "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==",
"dev": true,
"requires": {
- "resolve": "^1.20.0"
+ "@csstools/color-helpers": "^5.0.2",
+ "@csstools/css-calc": "^2.1.3"
}
},
- "regexpp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
- "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
- "dev": true
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "@csstools/css-parser-algorithms": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
+ "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
"dev": true
},
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "@csstools/css-tokenizer": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
+ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
"dev": true
},
- "requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
- },
- "resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "@sinonjs/commons": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
+ "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
"dev": true,
"requires": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
+ "type-detect": "4.0.8"
}
},
- "resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "@sinonjs/fake-timers": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
+ "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
"dev": true,
"requires": {
- "resolve-from": "^5.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
- }
+ "@sinonjs/commons": "^1.7.0"
}
},
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- },
- "retry": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
- "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
- "dev": true
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "@sinonjs/samsam": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz",
+ "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==",
"dev": true,
"requires": {
- "glob": "^7.1.3"
- },
- "dependencies": {
- "glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- }
+ "@sinonjs/commons": "^1.6.0",
+ "lodash.get": "^4.4.2",
+ "type-detect": "^4.0.8"
}
},
- "rrweb-cssom": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
- "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
- "peer": true
- },
- "run-applescript": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
- "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
+ "@sinonjs/text-encoding": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
+ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
"dev": true
},
- "run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "agent-base": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
"dev": true
},
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "saxes": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
- "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
- "requires": {
- "xmlchars": "^2.2.0"
- }
- },
- "schema-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
- "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "dependencies": {
- "ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- }
- },
- "ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.3"
- }
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- }
- }
- },
- "select-hose": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
- "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true
},
- "selfsigned": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz",
- "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==",
+ "chai": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
+ "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
"dev": true,
"requires": {
- "@types/node-forge": "^1.3.0",
- "node-forge": "^1"
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^3.0.1",
+ "get-func-name": "^2.0.0",
+ "loupe": "^2.3.1",
+ "pathval": "^1.1.1",
+ "type-detect": "^4.0.5"
}
},
- "semver": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
- "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
"dev": true
},
- "send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "2.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- }
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- }
- }
- },
- "serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "serve-index": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
- "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
+ "cssstyle": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz",
+ "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==",
"dev": true,
"requires": {
- "accepts": "~1.3.4",
- "batch": "0.6.1",
- "debug": "2.6.9",
- "escape-html": "~1.0.3",
- "http-errors": "~1.6.2",
- "mime-types": "~2.1.17",
- "parseurl": "~1.3.2"
+ "@asamuzakjp/css-color": "^3.1.2",
+ "rrweb-cssom": "^0.8.0"
},
"dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
- "dev": true
- },
- "http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
- "dev": true
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+ "rrweb-cssom": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
"dev": true
}
}
},
- "serve-static": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
- "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "data-urls": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
"dev": true,
"requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.18.0"
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
}
},
- "set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "debug": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+ "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"dev": true,
"requires": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
+ "ms": "2.1.2"
}
},
- "setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "decimal.js": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
+ "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
"dev": true
},
- "shallow-clone": {
+ "deep-eql": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
"dev": true,
"requires": {
- "kind-of": "^6.0.2"
+ "type-detect": "^4.0.0"
}
},
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
+ "entities": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz",
+ "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==",
+ "dev": true
},
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "get-func-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
+ "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
"dev": true
},
- "shell-quote": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
- "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
- "side-channel": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
- "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "html-encoding-sniffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
"dev": true,
"requires": {
- "call-bind": "^1.0.7",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4",
- "object-inspect": "^1.13.1"
+ "whatwg-encoding": "^3.1.1"
}
},
- "signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
- },
- "sinon": {
- "version": "9.2.4",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz",
- "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==",
+ "http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
"requires": {
- "@sinonjs/commons": "^1.8.1",
- "@sinonjs/fake-timers": "^6.0.1",
- "@sinonjs/samsam": "^5.3.1",
- "diff": "^4.0.2",
- "nise": "^4.0.4",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
- "dev": true
- }
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
}
},
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- },
- "slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"dev": true,
"requires": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
+ "agent-base": "^7.1.2",
+ "debug": "4"
}
},
- "sockjs": {
- "version": "0.3.24",
- "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
- "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
+ "iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"dev": true,
"requires": {
- "faye-websocket": "^0.11.3",
- "uuid": "^8.3.2",
- "websocket-driver": "^0.7.4"
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
}
},
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
"dev": true
},
- "source-map-loader": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.3.tgz",
- "integrity": "sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA==",
+ "jsdom": {
+ "version": "26.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
"dev": true,
"requires": {
- "abab": "^2.0.5",
- "iconv-lite": "^0.6.2",
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0",
- "source-map": "^0.6.1",
- "whatwg-mimetype": "^2.3.0"
+ "cssstyle": "^4.2.1",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.5.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.6",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^5.1.1",
+ "w3c-xmlserializer": "^5.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.1.1",
+ "ws": "^8.18.0",
+ "xml-name-validator": "^5.0.0"
},
"dependencies": {
- "schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "rrweb-cssom": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
"dev": true,
"requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
+ "tldts": "^6.1.32"
}
- },
- "whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
}
}
},
- "source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
- "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "jsdom-global": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
+ "integrity": "sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg==",
"dev": true
},
- "spdx-expression-parse": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
- "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.20",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz",
- "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==",
+ "just-extend": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
"dev": true
},
- "spdy": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
- "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
- "dev": true,
- "requires": {
- "debug": "^4.1.0",
- "handle-thing": "^2.0.0",
- "http-deceiver": "^1.2.7",
- "select-hose": "^2.0.0",
- "spdy-transport": "^3.0.0"
- }
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
+ "dev": true
},
- "spdy-transport": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
- "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+ "loupe": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.1.tgz",
+ "integrity": "sha512-EN1D3jyVmaX4tnajVlfbREU4axL647hLec1h/PXAb8CPDMJiYitcWF2UeLVNttRqaIqQs4x+mRvXf+d+TlDrCA==",
"dev": true,
"requires": {
- "debug": "^4.1.0",
- "detect-node": "^2.0.4",
- "hpack.js": "^2.1.6",
- "obuf": "^1.1.2",
- "readable-stream": "^3.0.6",
- "wbuf": "^1.7.3"
+ "get-func-name": "^2.0.0"
}
},
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
- "statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "nise": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz",
+ "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==",
"dev": true,
"requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
+ "@sinonjs/commons": "^1.7.0",
+ "@sinonjs/fake-timers": "^6.0.0",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "path-to-regexp": "^1.7.0"
}
},
- "string-width-cjs": {
- "version": "npm:string-width@4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
+ "nwsapi": {
+ "version": "2.2.20",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
+ "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==",
+ "dev": true
},
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "parse5": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
"dev": true,
"requires": {
- "ansi-regex": "^5.0.1"
+ "entities": "^6.0.0"
}
},
- "strip-ansi-cjs": {
- "version": "npm:strip-ansi@6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
"dev": true,
"requires": {
- "ansi-regex": "^5.0.1"
+ "isarray": "0.0.1"
}
},
- "strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "pathval": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"dev": true
},
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true
},
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
- "symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
- },
- "table": {
- "version": "6.8.2",
- "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz",
- "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==",
- "dev": true,
- "requires": {
- "ajv": "^8.0.1",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1"
- },
- "dependencies": {
- "ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- }
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- }
+ "saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "dev": true,
+ "requires": {
+ "xmlchars": "^2.2.0"
}
},
- "tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "dev": true
- },
- "terser": {
- "version": "5.31.6",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz",
- "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==",
+ "sinon": {
+ "version": "9.2.4",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz",
+ "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==",
"dev": true,
"requires": {
- "@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
+ "@sinonjs/commons": "^1.8.1",
+ "@sinonjs/fake-timers": "^6.0.1",
+ "@sinonjs/samsam": "^5.3.1",
+ "diff": "^4.0.2",
+ "nise": "^4.0.4",
+ "supports-color": "^7.1.0"
},
"dependencies": {
- "acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true
}
}
},
- "terser-webpack-plugin": {
- "version": "5.3.10",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
- "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
- "@jridgewell/trace-mapping": "^0.3.20",
- "jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.1",
- "terser": "^5.26.0"
- },
- "dependencies": {
- "jest-worker": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
- "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- }
- },
- "schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
+ "has-flag": "^4.0.0"
}
},
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
- },
- "thunky": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
- "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
+ "symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"dev": true
},
"tldts": {
@@ -12300,98 +1215,13 @@
"integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
"dev": true
},
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "dev": true
- },
- "tough-cookie": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
- "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
- "peer": true,
- "requires": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
- "dependencies": {
- "universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "peer": true
- }
- }
- },
"tr46": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
"integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
- "requires": {
- "punycode": "^2.3.1"
- }
- },
- "ts-loader": {
- "version": "9.5.1",
- "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz",
- "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "enhanced-resolve": "^5.0.0",
- "micromatch": "^4.0.0",
- "semver": "^7.3.4",
- "source-map": "^0.7.4"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
- "dev": true
- }
- }
- },
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- },
- "tsutils": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
- "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
- "dev": true,
- "requires": {
- "tslib": "^1.8.1"
- }
- },
- "type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
"requires": {
- "prelude-ls": "^1.2.1"
+ "punycode": "^2.3.1"
}
},
"type-detect": {
@@ -12400,416 +1230,32 @@
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true
},
- "type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true
- },
- "type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dev": true,
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- }
- },
"typescript": {
"version": "5.4.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
"dev": true
},
- "undici-types": {
- "version": "6.19.8",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
- "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
- "dev": true
- },
- "universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "dev": true
- },
- "update-browserslist-db": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
- "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
- "dev": true,
- "requires": {
- "escalade": "^3.1.2",
- "picocolors": "^1.0.1"
- }
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "peer": true,
- "requires": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
- "dev": true
- },
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true
- },
- "v8-compile-cache": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz",
- "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==",
- "dev": true
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
- "dev": true
- },
"w3c-xmlserializer": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
"integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
- "requires": {
- "xml-name-validator": "^5.0.0"
- }
- },
- "watchpack": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
- "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
- "dev": true,
- "requires": {
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.1.2"
- }
- },
- "wbuf": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
- "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
"dev": true,
"requires": {
- "minimalistic-assert": "^1.0.0"
+ "xml-name-validator": "^5.0.0"
}
},
"webidl-conversions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
- },
- "webpack": {
- "version": "5.94.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
- "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
- "dev": true,
- "requires": {
- "@types/estree": "^1.0.5",
- "@webassemblyjs/ast": "^1.12.1",
- "@webassemblyjs/wasm-edit": "^1.12.1",
- "@webassemblyjs/wasm-parser": "^1.12.1",
- "acorn": "^8.7.1",
- "acorn-import-attributes": "^1.9.5",
- "browserslist": "^4.21.10",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.1",
- "es-module-lexer": "^1.2.1",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.11",
- "json-parse-even-better-errors": "^2.3.1",
- "loader-runner": "^4.2.0",
- "mime-types": "^2.1.27",
- "neo-async": "^2.6.2",
- "schema-utils": "^3.2.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.10",
- "watchpack": "^2.4.1",
- "webpack-sources": "^3.2.3"
- },
- "dependencies": {
- "acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
- "dev": true
- },
- "acorn-import-attributes": {
- "version": "1.9.5",
- "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
- "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
- "dev": true,
- "requires": {}
- },
- "schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
- "webpack-cli": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
- "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
- "dev": true,
- "requires": {
- "@discoveryjs/json-ext": "^0.5.0",
- "@webpack-cli/configtest": "^2.1.1",
- "@webpack-cli/info": "^2.0.2",
- "@webpack-cli/serve": "^2.0.5",
- "colorette": "^2.0.14",
- "commander": "^10.0.1",
- "cross-spawn": "^7.0.3",
- "envinfo": "^7.7.3",
- "fastest-levenshtein": "^1.0.12",
- "import-local": "^3.0.2",
- "interpret": "^3.1.1",
- "rechoir": "^0.8.0",
- "webpack-merge": "^5.7.3"
- },
- "dependencies": {
- "commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
- "dev": true
- }
- }
- },
- "webpack-dev-middleware": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz",
- "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==",
- "dev": true,
- "requires": {
- "colorette": "^2.0.10",
- "memfs": "^4.6.0",
- "mime-types": "^2.1.31",
- "on-finished": "^2.4.1",
- "range-parser": "^1.2.1",
- "schema-utils": "^4.0.0"
- },
- "dependencies": {
- "@jsonjoy.com/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
- "dev": true,
- "requires": {}
- },
- "@jsonjoy.com/json-pack": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz",
- "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==",
- "dev": true,
- "requires": {
- "@jsonjoy.com/base64": "^1.1.1",
- "@jsonjoy.com/util": "^1.1.2",
- "hyperdyperid": "^1.2.0",
- "thingies": "^1.20.0"
- }
- },
- "@jsonjoy.com/util": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz",
- "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==",
- "dev": true,
- "requires": {}
- },
- "memfs": {
- "version": "4.11.1",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz",
- "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==",
- "dev": true,
- "requires": {
- "@jsonjoy.com/json-pack": "^1.0.3",
- "@jsonjoy.com/util": "^1.3.0",
- "tree-dump": "^1.0.1",
- "tslib": "^2.0.0"
- }
- },
- "thingies": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz",
- "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==",
- "dev": true,
- "requires": {}
- },
- "tree-dump": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz",
- "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==",
- "dev": true,
- "requires": {}
- },
- "tslib": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
- "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
- "dev": true
- }
- }
- },
- "webpack-dev-server": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz",
- "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==",
- "dev": true,
- "requires": {
- "@types/bonjour": "^3.5.13",
- "@types/connect-history-api-fallback": "^1.5.4",
- "@types/express": "^4.17.21",
- "@types/serve-index": "^1.9.4",
- "@types/serve-static": "^1.15.5",
- "@types/sockjs": "^0.3.36",
- "@types/ws": "^8.5.10",
- "ansi-html-community": "^0.0.8",
- "bonjour-service": "^1.2.1",
- "chokidar": "^3.6.0",
- "colorette": "^2.0.10",
- "compression": "^1.7.4",
- "connect-history-api-fallback": "^2.0.0",
- "default-gateway": "^6.0.3",
- "express": "^4.17.3",
- "graceful-fs": "^4.2.6",
- "html-entities": "^2.4.0",
- "http-proxy-middleware": "^2.0.3",
- "ipaddr.js": "^2.1.0",
- "launch-editor": "^2.6.1",
- "open": "^10.0.3",
- "p-retry": "^6.2.0",
- "rimraf": "^5.0.5",
- "schema-utils": "^4.2.0",
- "selfsigned": "^2.4.1",
- "serve-index": "^1.9.1",
- "sockjs": "^0.3.24",
- "spdy": "^4.0.2",
- "webpack-dev-middleware": "^7.1.0",
- "ws": "^8.16.0"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "glob": {
- "version": "10.4.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
- "dev": true,
- "requires": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- }
- },
- "minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "rimraf": {
- "version": "5.0.10",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
- "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
- "dev": true,
- "requires": {
- "glob": "^10.3.7"
- }
- }
- }
- },
- "webpack-merge": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
- "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
- "dev": true,
- "requires": {
- "clone-deep": "^4.0.1",
- "flat": "^5.0.2",
- "wildcard": "^2.0.0"
- }
- },
- "webpack-sources": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
- "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
- "dev": true
- },
- "websocket-driver": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
- "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
- "dev": true,
- "requires": {
- "http-parser-js": ">=0.5.1",
- "safe-buffer": ">=5.1.0",
- "websocket-extensions": ">=0.1.1"
- }
- },
- "websocket-extensions": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
- "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
"dev": true
},
"whatwg-encoding": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
"integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "dev": true,
"requires": {
"iconv-lite": "0.6.3"
}
@@ -12817,145 +1263,35 @@
"whatwg-mimetype": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
- "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "dev": true
},
"whatwg-url": {
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
"integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
+ "dev": true,
"requires": {
"tr46": "^5.1.0",
"webidl-conversions": "^7.0.0"
}
},
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "wildcard": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
- "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
- "dev": true
- },
- "word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "dev": true
- },
- "workerpool": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
- "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
- "dev": true
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "wrap-ansi-cjs": {
- "version": "npm:wrap-ansi@7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
"ws": {
"version": "8.18.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
"integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
- "requires": {}
+ "dev": true
},
"xml-name-validator": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
- "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "dev": true
},
"xmlchars": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
- },
- "yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "dev": true
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true
- },
- "yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "requires": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "dependencies": {
- "is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
- }
- }
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
"dev": true
}
}
diff --git a/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js b/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
index e25374eaf8..8a56a462ef 100644
--- a/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
+++ b/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
@@ -11,7 +11,7 @@ const {shadowBlockConversionChangeListener} = require('../src/index');
const assert = chai.assert;
-suite.skip('shadowBlockConversionChangeListener', function () {
+suite('shadowBlockConversionChangeListener', function () {
/**
* Create a parent block with an unconnected value connection.
* @param {Blockly.Workspace} workspace The workspace to use.
From 539ae4fe4499fca3d781c29f462836ac64d45ce6 Mon Sep 17 00:00:00 2001
From: Maribeth Moffatt
Date: Wed, 14 May 2025 16:50:25 -0700
Subject: [PATCH 27/33] revert: "fix(FieldMultilineInput): Use string literal
instead of Field.NBSP"
This reverts commit 96b299b16ef5e27b1903ed6abef2642f42cf2d74.
---
plugins/field-multilineinput/src/field_multilineinput.ts | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/plugins/field-multilineinput/src/field_multilineinput.ts b/plugins/field-multilineinput/src/field_multilineinput.ts
index ac20d8ac01..cec55f476a 100644
--- a/plugins/field-multilineinput/src/field_multilineinput.ts
+++ b/plugins/field-multilineinput/src/field_multilineinput.ts
@@ -163,11 +163,9 @@ export class FieldMultilineInput extends Blockly.FieldTextInput {
);
}
let textLines = this.getText();
- // TODO(google/blockly#8738): Use minimum-width setting mechanism
- // to be introduced in PR #9011.
if (!textLines) {
// Prevent the field from disappearing if empty.
- return '\u00A0'; // Non-breaking space.
+ return Blockly.Field.NBSP;
}
const lines = textLines.split('\n');
textLines = '';
@@ -184,8 +182,7 @@ export class FieldMultilineInput extends Blockly.FieldTextInput {
}
// Replace whitespace with non-breaking spaces so the text doesn't
// collapse.
- // TODO(google/blockly#8738): Use Blockly.Field.NBSP.
- text = text.replace(/\s/g, '\u00A0'); // Non-breaking space.
+ text = text.replace(/\s/g, Blockly.Field.NBSP);
textLines += text;
if (i !== displayLinesNumber - 1) {
From 49d9d11298e6b9649e4bedf673e520938608f5c3 Mon Sep 17 00:00:00 2001
From: Maribeth Moffatt
Date: Wed, 14 May 2025 16:53:39 -0700
Subject: [PATCH 28/33] chore: skip shadow block converter tests
---
.../test/shadow_block_converter_test.mocha.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js b/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
index 8a56a462ef..e25374eaf8 100644
--- a/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
+++ b/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
@@ -11,7 +11,7 @@ const {shadowBlockConversionChangeListener} = require('../src/index');
const assert = chai.assert;
-suite('shadowBlockConversionChangeListener', function () {
+suite.skip('shadowBlockConversionChangeListener', function () {
/**
* Create a parent block with an unconnected value connection.
* @param {Blockly.Workspace} workspace The workspace to use.
From f704ca0a46cd7a933a248895074bbcffbbbe8d60 Mon Sep 17 00:00:00 2001
From: Maribeth Moffatt
Date: Wed, 14 May 2025 17:37:49 -0700
Subject: [PATCH 29/33] chore: update to v12 beta.7 (#2526)
---
package-lock.json | 15 +++++++--------
package.json | 2 +-
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 5b63abc079..aa9f734290 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
"@eslint/js": "^8.49.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "blockly": "^12.0.0-beta.6",
+ "blockly": "^12.0.0-beta.7",
"conventional-changelog-conventionalcommits": "^5.0.0",
"eslint": "^8.49.0",
"eslint-config-google": "^0.14.0",
@@ -1041,11 +1041,10 @@
}
},
"node_modules/blockly": {
- "version": "12.0.0-beta.6",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.6.tgz",
- "integrity": "sha512-LlecuVKaMVNCpQgjGmUfLeC1aJZP09Z7s1ENZnR2q2rUvJKlRUklnbsqrTR7nhSylZD3TlaPpODMW/92dj+GXA==",
+ "version": "12.0.0-beta.7",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.7.tgz",
+ "integrity": "sha512-yKwPekH7cu2mELAoznExl11dfrCT4Phmynmm7fLJYmOsuVjUmPOUWRPGQd4e8ccCemkt5NLm7KmRWRZ1+4pXEA==",
"dev": true,
- "license": "Apache-2.0",
"dependencies": {
"jsdom": "26.1.0"
},
@@ -6513,9 +6512,9 @@
"dev": true
},
"blockly": {
- "version": "12.0.0-beta.6",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.6.tgz",
- "integrity": "sha512-LlecuVKaMVNCpQgjGmUfLeC1aJZP09Z7s1ENZnR2q2rUvJKlRUklnbsqrTR7nhSylZD3TlaPpODMW/92dj+GXA==",
+ "version": "12.0.0-beta.7",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.7.tgz",
+ "integrity": "sha512-yKwPekH7cu2mELAoznExl11dfrCT4Phmynmm7fLJYmOsuVjUmPOUWRPGQd4e8ccCemkt5NLm7KmRWRZ1+4pXEA==",
"dev": true,
"requires": {
"jsdom": "26.1.0"
diff --git a/package.json b/package.json
index 0538662967..e84bc0fdcc 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,7 @@
"@eslint/js": "^8.49.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "blockly": "^12.0.0-beta.6",
+ "blockly": "^12.0.0-beta.7",
"conventional-changelog-conventionalcommits": "^5.0.0",
"eslint": "^8.49.0",
"eslint-config-google": "^0.14.0",
From 29b5a0d896e7e6f7eb83867bd5b2577bf808e839 Mon Sep 17 00:00:00 2001
From: Ben Henning
Date: Thu, 15 May 2025 11:05:02 -0700
Subject: [PATCH 30/33] fix: Fix ephemeral focus being taken twice (#2521)
## The basics
- [x] I [validated my changes](https://developers.google.com/blockly/guides/contribute/samples#making_and_verifying_a_change)
## The details
### Resolves
Fixes #2514
Fixes #2515
### Proposed Changes
This updates the custom field implementations for `field-sldier` and `field-angle` to use new functionality introduced in https://github.com/google/blockly/pull/9051.
### Reason for Changes
The regressions reported in #2514 and #2515 were introduced due to the custom fields introducing a scenario where _both_ widget and drop-down divs attempted to take ephemeral focus. This isn't allowed currently as core's `FocusManager` has no tie breaking functionality for ephemeral focus, so the second attempt to request it throws a runtime failure.
The functionality introduced in https://github.com/google/blockly/pull/9051 allows the custom fields to, through `FieldInput`, disable the automatic ephemeral focus management for `FieldInput`'s inline editor (which uses widget div) so that the custom fields' drop-down div editors can properly take focus, instead.
### Test Coverage
This has been manually tested locally.
Automated tests are, unfortunately, non-trivial here since verifying focus-related behavior (at least through user interactions) requires a working DOM and is very tricky to make work with Node.js. These are tests that would likely be better suited via webdriver, instead. #2527 has been filed to track this work.
### Documentation
No additional documentation is needed here.
### Additional Information
This requires https://github.com/google/blockly/pull/9051 in order to work.
---
plugins/field-angle/src/field_angle.ts | 4 +++-
plugins/field-slider/src/field_slider.ts | 5 +++--
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/plugins/field-angle/src/field_angle.ts b/plugins/field-angle/src/field_angle.ts
index 088bbf35cc..31d7044ed6 100644
--- a/plugins/field-angle/src/field_angle.ts
+++ b/plugins/field-angle/src/field_angle.ts
@@ -206,11 +206,13 @@ export class FieldAngle extends Blockly.FieldNumber {
// eslint-disable-next-line @typescript-eslint/naming-convention
protected override showEditor_(e?: Event) {
// Mobile browsers have issues with in-line textareas (focus & keyboards).
+ // Also, don't let the parent take ephemeral focus since the drop-down div
+ // below will handle it, instead.
const noFocus =
Blockly.utils.userAgent.MOBILE ||
Blockly.utils.userAgent.ANDROID ||
Blockly.utils.userAgent.IPAD;
- super.showEditor_(e, noFocus);
+ super.showEditor_(e, noFocus, false);
const editor = this.dropdownCreate();
Blockly.DropDownDiv.getContentDiv().appendChild(editor);
diff --git a/plugins/field-slider/src/field_slider.ts b/plugins/field-slider/src/field_slider.ts
index 045e7a6a92..64248e8425 100644
--- a/plugins/field-slider/src/field_slider.ts
+++ b/plugins/field-slider/src/field_slider.ts
@@ -102,8 +102,9 @@ export class FieldSlider extends Blockly.FieldNumber {
protected showEditor_(e?: Event, quietInput?: boolean) {
// Always quiet the input for the super constructor, as we don't want to
// focus on the text field, and we don't want to display the modal
- // editor on mobile devices.
- super.showEditor_(e, true);
+ // editor on mobile devices. Also, don't let the parent take ephemeral focus
+ // since the drop-down div below will handle it, instead.
+ super.showEditor_(e, true, false);
// Build the DOM.
const editor = this.dropdownCreate_();
From 1f5d16944bb1b6a40e28af7297625ba11fa7aaad Mon Sep 17 00:00:00 2001
From: Ben Henning
Date: Thu, 15 May 2025 11:33:13 -0700
Subject: [PATCH 31/33] fix: Re-enable shadow block converter test (#2529)
## The basics
- [x] I [validated my changes](https://developers.google.com/blockly/guides/contribute/samples#making_and_verifying_a_change)
## The details
### Resolves
Fixes #2525
### Proposed Changes
This re-enables the shadow block converter test disabled in #2524.
### Reason for Changes
It's preferable to not keep tests disabled as it's easy to forget about them (and having them disabled increases the risk of discovering regressions being delayed or never noticed).
This particular fix is discussed in #2528. It's a bit complicated exactly how the global namespace is managed via `jsdom-global`, but essentially `SVGElement` (made available to Node.js via `jsdom`) is not being automatically bound to the global namespace and this works around the issue.
### Test Coverage
N/A -- This is a test-only change.
### Documentation
No documentation changes are needed.
### Additional Information
This is a slightly ugly workaround, but it seems viable for the medium-term while #2528 is considered.
---
.../test/shadow_block_converter_test.mocha.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js b/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
index e25374eaf8..999ba36c6e 100644
--- a/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
+++ b/plugins/shadow-block-converter/test/shadow_block_converter_test.mocha.js
@@ -11,7 +11,7 @@ const {shadowBlockConversionChangeListener} = require('../src/index');
const assert = chai.assert;
-suite.skip('shadowBlockConversionChangeListener', function () {
+suite('shadowBlockConversionChangeListener', function () {
/**
* Create a parent block with an unconnected value connection.
* @param {Blockly.Workspace} workspace The workspace to use.
@@ -38,6 +38,8 @@ suite.skip('shadowBlockConversionChangeListener', function () {
'
',
{pretendToBeVisual: true},
);
+ // See https://github.com/google/blockly-samples/issues/2528 for context.
+ global.SVGElement = window.SVGElement;
this.workspace = Blockly.inject('blocklyDiv');
this.workspace.addChangeListener(shadowBlockConversionChangeListener);
From 2940590b9257d53e34f1fd52298c370eb4a23073 Mon Sep 17 00:00:00 2001
From: Maribeth Moffatt
Date: Thu, 15 May 2025 13:47:12 -0700
Subject: [PATCH 32/33] feat!: Update plugins to use Blockly v12 (#2530)
---
package-lock.json | 14 +++++++-------
package.json | 2 +-
plugins/block-dynamic-connection/package-lock.json | 4 ++--
plugins/block-dynamic-connection/package.json | 2 +-
plugins/block-plus-minus/package-lock.json | 4 ++--
plugins/block-plus-minus/package.json | 2 +-
.../block-shareable-procedures/package-lock.json | 4 ++--
plugins/block-shareable-procedures/package.json | 2 +-
plugins/block-test/package.json | 2 +-
plugins/content-highlight/package-lock.json | 4 ++--
plugins/content-highlight/package.json | 2 +-
plugins/continuous-toolbox/package.json | 2 +-
plugins/cross-tab-copy-paste/package.json | 2 +-
plugins/dev-scripts/package-lock.json | 2 +-
plugins/dev-tools/package-lock.json | 4 ++--
plugins/dev-tools/package.json | 2 +-
plugins/disable-top-blocks/package.json | 2 +-
plugins/field-angle/package-lock.json | 4 ++--
plugins/field-angle/package.json | 2 +-
plugins/field-bitmap/package-lock.json | 4 ++--
plugins/field-bitmap/package.json | 2 +-
plugins/field-colour-hsv-sliders/package-lock.json | 4 ++--
plugins/field-colour-hsv-sliders/package.json | 2 +-
plugins/field-colour/package-lock.json | 4 ++--
plugins/field-date/package-lock.json | 4 ++--
plugins/field-date/package.json | 2 +-
plugins/field-dependent-dropdown/package-lock.json | 4 ++--
plugins/field-dependent-dropdown/package.json | 2 +-
plugins/field-grid-dropdown/package-lock.json | 4 ++--
plugins/field-grid-dropdown/package.json | 2 +-
plugins/field-multilineinput/package-lock.json | 4 ++--
plugins/field-multilineinput/package.json | 2 +-
plugins/field-slider/package-lock.json | 4 ++--
plugins/field-slider/package.json | 2 +-
plugins/fixed-edges/package.json | 2 +-
plugins/migration/package-lock.json | 2 +-
plugins/modal/package-lock.json | 4 ++--
plugins/modal/package.json | 2 +-
plugins/scroll-options/package-lock.json | 4 ++--
plugins/scroll-options/package.json | 2 +-
plugins/shadow-block-converter/package-lock.json | 2 +-
plugins/shadow-block-converter/package.json | 2 +-
.../strict-connection-checker/package-lock.json | 4 ++--
plugins/strict-connection-checker/package.json | 2 +-
plugins/suggested-blocks/package-lock.json | 4 ++--
plugins/suggested-blocks/package.json | 2 +-
plugins/theme-dark/package.json | 2 +-
plugins/theme-deuteranopia/package.json | 2 +-
plugins/theme-hackermode/package.json | 2 +-
plugins/theme-highcontrast/package.json | 2 +-
plugins/theme-modern/package.json | 2 +-
plugins/theme-tritanopia/package.json | 2 +-
plugins/toolbox-search/package-lock.json | 4 ++--
plugins/toolbox-search/package.json | 2 +-
plugins/typed-variable-modal/package-lock.json | 4 ++--
plugins/typed-variable-modal/package.json | 2 +-
plugins/workspace-backpack/package-lock.json | 4 ++--
plugins/workspace-backpack/package.json | 2 +-
plugins/workspace-minimap/package-lock.json | 4 ++--
plugins/workspace-minimap/package.json | 2 +-
plugins/workspace-search/package-lock.json | 4 ++--
plugins/workspace-search/package.json | 2 +-
plugins/zoom-to-fit/package-lock.json | 4 ++--
plugins/zoom-to-fit/package.json | 2 +-
64 files changed, 94 insertions(+), 94 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index aa9f734290..0018d63aba 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
"@eslint/js": "^8.49.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "blockly": "^12.0.0-beta.7",
+ "blockly": "^12.0.0",
"conventional-changelog-conventionalcommits": "^5.0.0",
"eslint": "^8.49.0",
"eslint-config-google": "^0.14.0",
@@ -1041,9 +1041,9 @@
}
},
"node_modules/blockly": {
- "version": "12.0.0-beta.7",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.7.tgz",
- "integrity": "sha512-yKwPekH7cu2mELAoznExl11dfrCT4Phmynmm7fLJYmOsuVjUmPOUWRPGQd4e8ccCemkt5NLm7KmRWRZ1+4pXEA==",
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0.tgz",
+ "integrity": "sha512-CrwxGjbgCh/zGg46VTlp26NYblSi/82n4VFsamyW5b4W6t3HXaf/b3CbMuu4/YnFvqlyJs+8zR4OKNTbIc28EA==",
"dev": true,
"dependencies": {
"jsdom": "26.1.0"
@@ -6512,9 +6512,9 @@
"dev": true
},
"blockly": {
- "version": "12.0.0-beta.7",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.7.tgz",
- "integrity": "sha512-yKwPekH7cu2mELAoznExl11dfrCT4Phmynmm7fLJYmOsuVjUmPOUWRPGQd4e8ccCemkt5NLm7KmRWRZ1+4pXEA==",
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0.tgz",
+ "integrity": "sha512-CrwxGjbgCh/zGg46VTlp26NYblSi/82n4VFsamyW5b4W6t3HXaf/b3CbMuu4/YnFvqlyJs+8zR4OKNTbIc28EA==",
"dev": true,
"requires": {
"jsdom": "26.1.0"
diff --git a/package.json b/package.json
index e84bc0fdcc..294624eadb 100644
--- a/package.json
+++ b/package.json
@@ -36,7 +36,7 @@
"@eslint/js": "^8.49.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
- "blockly": "^12.0.0-beta.7",
+ "blockly": "^12.0.0",
"conventional-changelog-conventionalcommits": "^5.0.0",
"eslint": "^8.49.0",
"eslint-config-google": "^0.14.0",
diff --git a/plugins/block-dynamic-connection/package-lock.json b/plugins/block-dynamic-connection/package-lock.json
index 9e0f3955b8..714a84a77f 100644
--- a/plugins/block-dynamic-connection/package-lock.json
+++ b/plugins/block-dynamic-connection/package-lock.json
@@ -17,7 +17,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/ansi-colors": {
@@ -1689,4 +1689,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/block-dynamic-connection/package.json b/plugins/block-dynamic-connection/package.json
index 88aa8483a3..b606179eef 100644
--- a/plugins/block-dynamic-connection/package.json
+++ b/plugins/block-dynamic-connection/package.json
@@ -47,7 +47,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/block-plus-minus/package-lock.json b/plugins/block-plus-minus/package-lock.json
index a29283d3ed..3fc65fe42f 100644
--- a/plugins/block-plus-minus/package-lock.json
+++ b/plugins/block-plus-minus/package-lock.json
@@ -17,7 +17,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@sinonjs/commons": {
@@ -1818,4 +1818,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/block-plus-minus/package.json b/plugins/block-plus-minus/package.json
index cc6841c9ae..bebfcd8eea 100644
--- a/plugins/block-plus-minus/package.json
+++ b/plugins/block-plus-minus/package.json
@@ -46,7 +46,7 @@
"sinon": "^9.0.1"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/block-shareable-procedures/package-lock.json b/plugins/block-shareable-procedures/package-lock.json
index e6487b02ff..8645a0b27f 100644
--- a/plugins/block-shareable-procedures/package-lock.json
+++ b/plugins/block-shareable-procedures/package-lock.json
@@ -19,7 +19,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@sinonjs/commons": {
@@ -926,4 +926,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/block-shareable-procedures/package.json b/plugins/block-shareable-procedures/package.json
index 3a90e4928b..7f8378b00c 100644
--- a/plugins/block-shareable-procedures/package.json
+++ b/plugins/block-shareable-procedures/package.json
@@ -50,7 +50,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/block-test/package.json b/plugins/block-test/package.json
index b24df6bcd1..374e45d83e 100644
--- a/plugins/block-test/package.json
+++ b/plugins/block-test/package.json
@@ -42,7 +42,7 @@
"@blockly/dev-scripts": "^4.0.7"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/content-highlight/package-lock.json b/plugins/content-highlight/package-lock.json
index fb2c9d961a..f24951669b 100644
--- a/plugins/content-highlight/package-lock.json
+++ b/plugins/content-highlight/package-lock.json
@@ -15,7 +15,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/typescript": {
@@ -40,4 +40,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/content-highlight/package.json b/plugins/content-highlight/package.json
index 8049142616..c43eb022db 100644
--- a/plugins/content-highlight/package.json
+++ b/plugins/content-highlight/package.json
@@ -48,7 +48,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/continuous-toolbox/package.json b/plugins/continuous-toolbox/package.json
index d6209324f6..5594cd44ea 100644
--- a/plugins/continuous-toolbox/package.json
+++ b/plugins/continuous-toolbox/package.json
@@ -43,7 +43,7 @@
"@blockly/dev-tools": "^8.1.0"
},
"peerDependencies": {
- "blockly": "^12.0.0-beta.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/cross-tab-copy-paste/package.json b/plugins/cross-tab-copy-paste/package.json
index a9d27074ac..cb9495a1be 100644
--- a/plugins/cross-tab-copy-paste/package.json
+++ b/plugins/cross-tab-copy-paste/package.json
@@ -44,7 +44,7 @@
"@blockly/dev-tools": "^8.1.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/dev-scripts/package-lock.json b/plugins/dev-scripts/package-lock.json
index 03b53c7b1c..85f033fbfd 100644
--- a/plugins/dev-scripts/package-lock.json
+++ b/plugins/dev-scripts/package-lock.json
@@ -5321,4 +5321,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/dev-tools/package-lock.json b/plugins/dev-tools/package-lock.json
index 677520674e..ca0c745a4f 100644
--- a/plugins/dev-tools/package-lock.json
+++ b/plugins/dev-tools/package-lock.json
@@ -23,7 +23,7 @@
"node": ">=8.0.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@sinonjs/commons": {
@@ -243,4 +243,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/dev-tools/package.json b/plugins/dev-tools/package.json
index 3d046efee4..44e889d16d 100644
--- a/plugins/dev-tools/package.json
+++ b/plugins/dev-tools/package.json
@@ -55,7 +55,7 @@
"@types/dat.gui": "^0.7.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/disable-top-blocks/package.json b/plugins/disable-top-blocks/package.json
index 54d0dfefe1..ffa686a884 100644
--- a/plugins/disable-top-blocks/package.json
+++ b/plugins/disable-top-blocks/package.json
@@ -42,7 +42,7 @@
"@blockly/dev-tools": "^8.1.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/field-angle/package-lock.json b/plugins/field-angle/package-lock.json
index 08c89ba518..ed71525922 100644
--- a/plugins/field-angle/package-lock.json
+++ b/plugins/field-angle/package-lock.json
@@ -17,7 +17,7 @@
"node": ">=8.0.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@sinonjs/commons": {
@@ -425,4 +425,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/field-angle/package.json b/plugins/field-angle/package.json
index 4e7f3e24ff..377cbea7ed 100644
--- a/plugins/field-angle/package.json
+++ b/plugins/field-angle/package.json
@@ -47,7 +47,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/field-bitmap/package-lock.json b/plugins/field-bitmap/package-lock.json
index 8ee96365fa..11f3afa2f1 100644
--- a/plugins/field-bitmap/package-lock.json
+++ b/plugins/field-bitmap/package-lock.json
@@ -17,7 +17,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/ansi-colors": {
@@ -1676,4 +1676,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/field-bitmap/package.json b/plugins/field-bitmap/package.json
index c7a5f80d56..82e965eb9f 100644
--- a/plugins/field-bitmap/package.json
+++ b/plugins/field-bitmap/package.json
@@ -47,7 +47,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/field-colour-hsv-sliders/package-lock.json b/plugins/field-colour-hsv-sliders/package-lock.json
index ec5a03693f..0028597cdd 100644
--- a/plugins/field-colour-hsv-sliders/package-lock.json
+++ b/plugins/field-colour-hsv-sliders/package-lock.json
@@ -15,7 +15,7 @@
"node": ">=8.0.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/typescript": {
@@ -40,4 +40,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/field-colour-hsv-sliders/package.json b/plugins/field-colour-hsv-sliders/package.json
index ddb2614813..d426fade05 100644
--- a/plugins/field-colour-hsv-sliders/package.json
+++ b/plugins/field-colour-hsv-sliders/package.json
@@ -49,7 +49,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/field-colour/package-lock.json b/plugins/field-colour/package-lock.json
index 29292421d8..87b4f2091f 100644
--- a/plugins/field-colour/package-lock.json
+++ b/plugins/field-colour/package-lock.json
@@ -18,7 +18,7 @@
"node": ">=8.0.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@nodelib/fs.scandir": {
@@ -1218,4 +1218,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/field-date/package-lock.json b/plugins/field-date/package-lock.json
index 931659822b..ace0dbf02a 100644
--- a/plugins/field-date/package-lock.json
+++ b/plugins/field-date/package-lock.json
@@ -17,7 +17,7 @@
"node": ">=8.0.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@sinonjs/commons": {
@@ -423,4 +423,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/field-date/package.json b/plugins/field-date/package.json
index 989c908154..3bef0a49a3 100644
--- a/plugins/field-date/package.json
+++ b/plugins/field-date/package.json
@@ -49,7 +49,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/field-dependent-dropdown/package-lock.json b/plugins/field-dependent-dropdown/package-lock.json
index ae6698aca0..bdfd5dac90 100644
--- a/plugins/field-dependent-dropdown/package-lock.json
+++ b/plugins/field-dependent-dropdown/package-lock.json
@@ -17,7 +17,7 @@
"node": ">=8.0.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@sinonjs/commons": {
@@ -242,4 +242,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/field-dependent-dropdown/package.json b/plugins/field-dependent-dropdown/package.json
index 3318646560..143ddbae17 100644
--- a/plugins/field-dependent-dropdown/package.json
+++ b/plugins/field-dependent-dropdown/package.json
@@ -48,7 +48,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/field-grid-dropdown/package-lock.json b/plugins/field-grid-dropdown/package-lock.json
index dc219e1e1a..c93ce3d9de 100644
--- a/plugins/field-grid-dropdown/package-lock.json
+++ b/plugins/field-grid-dropdown/package-lock.json
@@ -15,7 +15,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/typescript": {
@@ -40,4 +40,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/field-grid-dropdown/package.json b/plugins/field-grid-dropdown/package.json
index 79777e9749..79c1e59d6f 100644
--- a/plugins/field-grid-dropdown/package.json
+++ b/plugins/field-grid-dropdown/package.json
@@ -44,7 +44,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/field-multilineinput/package-lock.json b/plugins/field-multilineinput/package-lock.json
index 117725375f..aefef65a87 100644
--- a/plugins/field-multilineinput/package-lock.json
+++ b/plugins/field-multilineinput/package-lock.json
@@ -17,7 +17,7 @@
"node": ">=8.0.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@sinonjs/commons": {
@@ -425,4 +425,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/field-multilineinput/package.json b/plugins/field-multilineinput/package.json
index 8b1b79aa47..e09ad06bda 100644
--- a/plugins/field-multilineinput/package.json
+++ b/plugins/field-multilineinput/package.json
@@ -47,7 +47,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/field-slider/package-lock.json b/plugins/field-slider/package-lock.json
index d5212882d5..a747b69ff0 100644
--- a/plugins/field-slider/package-lock.json
+++ b/plugins/field-slider/package-lock.json
@@ -17,7 +17,7 @@
"node": ">=8.0.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@sinonjs/commons": {
@@ -423,4 +423,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/field-slider/package.json b/plugins/field-slider/package.json
index c297fffb13..9c375eb376 100644
--- a/plugins/field-slider/package.json
+++ b/plugins/field-slider/package.json
@@ -46,7 +46,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/fixed-edges/package.json b/plugins/fixed-edges/package.json
index 26ca5d34d1..a35810c0fb 100644
--- a/plugins/fixed-edges/package.json
+++ b/plugins/fixed-edges/package.json
@@ -42,7 +42,7 @@
"@blockly/dev-tools": "^8.1.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/migration/package-lock.json b/plugins/migration/package-lock.json
index a485ded8aa..b85ccf7fe1 100644
--- a/plugins/migration/package-lock.json
+++ b/plugins/migration/package-lock.json
@@ -2062,4 +2062,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/modal/package-lock.json b/plugins/modal/package-lock.json
index 91cfc1a495..7bb67e8a71 100644
--- a/plugins/modal/package-lock.json
+++ b/plugins/modal/package-lock.json
@@ -18,7 +18,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@sinonjs/commons": {
@@ -3007,4 +3007,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/modal/package.json b/plugins/modal/package.json
index 8be8b25446..71e89ef023 100644
--- a/plugins/modal/package.json
+++ b/plugins/modal/package.json
@@ -47,7 +47,7 @@
"sinon": "7.5.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/scroll-options/package-lock.json b/plugins/scroll-options/package-lock.json
index 1e5dbb7851..66c0bae633 100644
--- a/plugins/scroll-options/package-lock.json
+++ b/plugins/scroll-options/package-lock.json
@@ -15,7 +15,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/typescript": {
@@ -40,4 +40,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/scroll-options/package.json b/plugins/scroll-options/package.json
index 56deab5ed2..51d7f5aa16 100644
--- a/plugins/scroll-options/package.json
+++ b/plugins/scroll-options/package.json
@@ -44,7 +44,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/shadow-block-converter/package-lock.json b/plugins/shadow-block-converter/package-lock.json
index 969d229854..a65254d54c 100644
--- a/plugins/shadow-block-converter/package-lock.json
+++ b/plugins/shadow-block-converter/package-lock.json
@@ -19,7 +19,7 @@
"node": ">=8.0.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@asamuzakjp/css-color": {
diff --git a/plugins/shadow-block-converter/package.json b/plugins/shadow-block-converter/package.json
index 3d5bef3dfc..673dc03378 100644
--- a/plugins/shadow-block-converter/package.json
+++ b/plugins/shadow-block-converter/package.json
@@ -48,7 +48,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/strict-connection-checker/package-lock.json b/plugins/strict-connection-checker/package-lock.json
index 2b487deaa7..53f6ed5ce7 100644
--- a/plugins/strict-connection-checker/package-lock.json
+++ b/plugins/strict-connection-checker/package-lock.json
@@ -15,7 +15,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/assertion-error": {
@@ -169,4 +169,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/strict-connection-checker/package.json b/plugins/strict-connection-checker/package.json
index abd03b83c4..394f09fa50 100644
--- a/plugins/strict-connection-checker/package.json
+++ b/plugins/strict-connection-checker/package.json
@@ -45,7 +45,7 @@
"chai": "^4.2.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/suggested-blocks/package-lock.json b/plugins/suggested-blocks/package-lock.json
index b90f616abc..405d7ef682 100644
--- a/plugins/suggested-blocks/package-lock.json
+++ b/plugins/suggested-blocks/package-lock.json
@@ -16,7 +16,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@sinonjs/commons": {
@@ -354,4 +354,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/suggested-blocks/package.json b/plugins/suggested-blocks/package.json
index b0029974f4..32febf6502 100644
--- a/plugins/suggested-blocks/package.json
+++ b/plugins/suggested-blocks/package.json
@@ -46,7 +46,7 @@
"sinon": "^14.0.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/theme-dark/package.json b/plugins/theme-dark/package.json
index cfeac6d660..c91a1f9d17 100644
--- a/plugins/theme-dark/package.json
+++ b/plugins/theme-dark/package.json
@@ -43,7 +43,7 @@
"@blockly/dev-scripts": "^4.0.7"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/theme-deuteranopia/package.json b/plugins/theme-deuteranopia/package.json
index ac9b0936b5..6b199b0e17 100644
--- a/plugins/theme-deuteranopia/package.json
+++ b/plugins/theme-deuteranopia/package.json
@@ -43,7 +43,7 @@
"@blockly/dev-scripts": "^4.0.7"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/theme-hackermode/package.json b/plugins/theme-hackermode/package.json
index 838b1020de..383e222d54 100644
--- a/plugins/theme-hackermode/package.json
+++ b/plugins/theme-hackermode/package.json
@@ -45,7 +45,7 @@
"@blockly/dev-tools": "^8.0.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/theme-highcontrast/package.json b/plugins/theme-highcontrast/package.json
index a264dcd52b..781e44c1e8 100644
--- a/plugins/theme-highcontrast/package.json
+++ b/plugins/theme-highcontrast/package.json
@@ -43,7 +43,7 @@
"@blockly/dev-scripts": "^4.0.7"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/theme-modern/package.json b/plugins/theme-modern/package.json
index 37862bc36e..c28dec586d 100644
--- a/plugins/theme-modern/package.json
+++ b/plugins/theme-modern/package.json
@@ -43,7 +43,7 @@
"@blockly/dev-scripts": "^4.0.7"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/theme-tritanopia/package.json b/plugins/theme-tritanopia/package.json
index 965b77dc5d..204232732d 100644
--- a/plugins/theme-tritanopia/package.json
+++ b/plugins/theme-tritanopia/package.json
@@ -43,7 +43,7 @@
"@blockly/dev-scripts": "^4.0.7"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/toolbox-search/package-lock.json b/plugins/toolbox-search/package-lock.json
index 145c69b2ac..2d13af01cb 100644
--- a/plugins/toolbox-search/package-lock.json
+++ b/plugins/toolbox-search/package-lock.json
@@ -13,7 +13,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/assertion-error": {
@@ -186,4 +186,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/toolbox-search/package.json b/plugins/toolbox-search/package.json
index 92f3716999..15464fce77 100644
--- a/plugins/toolbox-search/package.json
+++ b/plugins/toolbox-search/package.json
@@ -46,7 +46,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/typed-variable-modal/package-lock.json b/plugins/typed-variable-modal/package-lock.json
index b27ce0145f..ac13de5145 100644
--- a/plugins/typed-variable-modal/package-lock.json
+++ b/plugins/typed-variable-modal/package-lock.json
@@ -18,7 +18,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@sinonjs/commons": {
@@ -3007,4 +3007,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/typed-variable-modal/package.json b/plugins/typed-variable-modal/package.json
index 18bca88d7d..f6be9919f5 100644
--- a/plugins/typed-variable-modal/package.json
+++ b/plugins/typed-variable-modal/package.json
@@ -47,7 +47,7 @@
"sinon": "7.5.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"dependencies": {
"@blockly/plugin-modal": "^7.0.14"
diff --git a/plugins/workspace-backpack/package-lock.json b/plugins/workspace-backpack/package-lock.json
index 13ffe72b5d..79365b70ea 100644
--- a/plugins/workspace-backpack/package-lock.json
+++ b/plugins/workspace-backpack/package-lock.json
@@ -15,7 +15,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/typescript": {
@@ -40,4 +40,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/workspace-backpack/package.json b/plugins/workspace-backpack/package.json
index 474968d045..5222445c07 100644
--- a/plugins/workspace-backpack/package.json
+++ b/plugins/workspace-backpack/package.json
@@ -45,7 +45,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/workspace-minimap/package-lock.json b/plugins/workspace-minimap/package-lock.json
index f50f1003f6..87883680ff 100644
--- a/plugins/workspace-minimap/package-lock.json
+++ b/plugins/workspace-minimap/package-lock.json
@@ -13,7 +13,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/assertion-error": {
@@ -115,4 +115,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/workspace-minimap/package.json b/plugins/workspace-minimap/package.json
index 6c00eb4d45..5fedff5fb1 100644
--- a/plugins/workspace-minimap/package.json
+++ b/plugins/workspace-minimap/package.json
@@ -45,7 +45,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/workspace-search/package-lock.json b/plugins/workspace-search/package-lock.json
index 82c30c72a2..beb7a1a5fa 100644
--- a/plugins/workspace-search/package-lock.json
+++ b/plugins/workspace-search/package-lock.json
@@ -18,7 +18,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/@sinonjs/commons": {
@@ -1475,4 +1475,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/workspace-search/package.json b/plugins/workspace-search/package.json
index f24519ba4e..74faf351d8 100644
--- a/plugins/workspace-search/package.json
+++ b/plugins/workspace-search/package.json
@@ -47,7 +47,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
diff --git a/plugins/zoom-to-fit/package-lock.json b/plugins/zoom-to-fit/package-lock.json
index b3384a47e3..280f6cabd4 100644
--- a/plugins/zoom-to-fit/package-lock.json
+++ b/plugins/zoom-to-fit/package-lock.json
@@ -15,7 +15,7 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
}
},
"node_modules/typescript": {
@@ -40,4 +40,4 @@
"dev": true
}
}
-}
\ No newline at end of file
+}
diff --git a/plugins/zoom-to-fit/package.json b/plugins/zoom-to-fit/package.json
index 86b7fad92f..9fe9806646 100644
--- a/plugins/zoom-to-fit/package.json
+++ b/plugins/zoom-to-fit/package.json
@@ -43,7 +43,7 @@
"typescript": "^5.4.5"
},
"peerDependencies": {
- "blockly": "^11.0.0"
+ "blockly": "^12.0.0"
},
"publishConfig": {
"access": "public",
From 9f49e2811a8c078a6377c4b38025c2cf5d04e744 Mon Sep 17 00:00:00 2001
From: Aaron Dodson
Date: Thu, 15 May 2025 15:50:25 -0700
Subject: [PATCH 33/33] fix: Don't pin continuous-toolbox to Blockly
v12.0.0-beta.0. (#2532)
---
plugins/continuous-toolbox/package-lock.json | 565 ++++++++++++-------
1 file changed, 347 insertions(+), 218 deletions(-)
diff --git a/plugins/continuous-toolbox/package-lock.json b/plugins/continuous-toolbox/package-lock.json
index 998a66d8e5..3bb62f2054 100644
--- a/plugins/continuous-toolbox/package-lock.json
+++ b/plugins/continuous-toolbox/package-lock.json
@@ -16,7 +16,21 @@
"node": ">=8.17.0"
},
"peerDependencies": {
- "blockly": "^12.0.0-beta.0"
+ "blockly": "^12.0.0"
+ }
+ },
+ "node_modules/@asamuzakjp/css-color": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.7.tgz",
+ "integrity": "sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@csstools/css-calc": "^2.1.3",
+ "@csstools/css-color-parser": "^3.0.9",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "lru-cache": "^10.4.3"
}
},
"node_modules/@babel/code-frame": {
@@ -262,9 +276,9 @@
}
},
"node_modules/@blockly/dev-scripts": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@blockly/dev-scripts/-/dev-scripts-4.0.5.tgz",
- "integrity": "sha512-JVCYK4RAJ7mmumbIRr6Hf6ZGrVXy2rw10GM/uwuXIlM33rwjEJRoBTEq+0R2N5+75C28mx4g2xU5Fpff/yjDrA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@blockly/dev-scripts/-/dev-scripts-4.0.7.tgz",
+ "integrity": "sha512-viRLV1HO/NwpfQ1NO/S6br/oyJxnp4owTpQGS+bGx/yOVD1Aiku/bRCjeL/apLnwstNXqSmQl4kEvwnF5i3z2g==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -298,10 +312,11 @@
}
},
"node_modules/@blockly/dev-tools": {
- "version": "8.0.12",
- "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.0.12.tgz",
- "integrity": "sha512-jE0y/Z7ggmM2JS4l0Xf2ic3eecuM+ZDjUZNCcM2k6yy0VDJoxOPN63Cq2soswXQRuKHfzRMHY48rCvoKL3MqPA==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.1.0.tgz",
+ "integrity": "sha512-oiNh1p8N/saDNsk/U6wY+SJs8i2bMkVgQYAwCd4deVIQeLGRZsw83Adm9CiXyXcFrZUOeCwmiNKwTR5JY+qh0Q==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@blockly/block-test": "^6.0.11",
"@blockly/theme-dark": "^7.0.10",
@@ -401,6 +416,121 @@
"eslint": "7.x"
}
},
+ "node_modules/@csstools/color-helpers": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
+ "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@csstools/css-calc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz",
+ "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/@csstools/css-color-parser": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz",
+ "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@csstools/color-helpers": "^5.0.2",
+ "@csstools/css-calc": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/@csstools/css-parser-algorithms": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
+ "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-tokenizer": "^3.0.3"
+ }
+ },
+ "node_modules/@csstools/css-tokenizer": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
+ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
@@ -1526,13 +1656,11 @@
}
},
"node_modules/agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "license": "MIT",
"peer": true,
- "dependencies": {
- "debug": "^4.3.4"
- },
"engines": {
"node": ">= 14"
}
@@ -1693,12 +1821,6 @@
"node": ">=8"
}
},
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "peer": true
- },
"node_modules/babel-eslint": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
@@ -1764,12 +1886,13 @@
}
},
"node_modules/blockly": {
- "version": "12.0.0-beta.0",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.0.tgz",
- "integrity": "sha512-Z9cULe95wgQGj87DQZ9RBJRu5oMLQEUTz0beZVcZL/ddVuga6qtZZ9DbaDfCvt4ffVz1O/kyNzPJ+cqvovSjGg==",
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0.tgz",
+ "integrity": "sha512-CrwxGjbgCh/zGg46VTlp26NYblSi/82n4VFsamyW5b4W6t3HXaf/b3CbMuu4/YnFvqlyJs+8zR4OKNTbIc28EA==",
+ "license": "Apache-2.0",
"peer": true,
"dependencies": {
- "jsdom": "25.0.1"
+ "jsdom": "26.1.0"
},
"engines": {
"node": ">=18"
@@ -2149,18 +2272,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "peer": true,
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -2326,12 +2437,14 @@
}
},
"node_modules/cssstyle": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
- "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz",
+ "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==",
+ "license": "MIT",
"peer": true,
"dependencies": {
- "rrweb-cssom": "^0.7.1"
+ "@asamuzakjp/css-color": "^3.1.2",
+ "rrweb-cssom": "^0.8.0"
},
"engines": {
"node": ">=18"
@@ -2347,6 +2460,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
"integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
+ "license": "MIT",
"peer": true,
"dependencies": {
"whatwg-mimetype": "^4.0.0",
@@ -2387,9 +2501,10 @@
}
},
"node_modules/decimal.js": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
+ "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
+ "license": "MIT",
"peer": true
},
"node_modules/deep-eql": {
@@ -2493,15 +2608,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "peer": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -2649,9 +2755,10 @@
}
},
"node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz",
+ "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==",
+ "license": "BSD-2-Clause",
"peer": true,
"engines": {
"node": ">=0.12"
@@ -3500,20 +3607,6 @@
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/form-data": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
- "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
- "peer": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -3868,6 +3961,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
"integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
+ "license": "MIT",
"peer": true,
"dependencies": {
"whatwg-encoding": "^3.1.1"
@@ -3943,6 +4037,7 @@
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
"integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "license": "MIT",
"peer": true,
"dependencies": {
"agent-base": "^7.1.0",
@@ -3978,12 +4073,13 @@
}
},
"node_modules/https-proxy-agent": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
- "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "license": "MIT",
"peer": true,
"dependencies": {
- "agent-base": "^7.0.2",
+ "agent-base": "^7.1.2",
"debug": "4"
},
"engines": {
@@ -4277,6 +4373,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
"integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "license": "MIT",
"peer": true
},
"node_modules/is-stream": {
@@ -4417,30 +4514,30 @@
}
},
"node_modules/jsdom": {
- "version": "25.0.1",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
- "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
+ "version": "26.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
+ "license": "MIT",
"peer": true,
"dependencies": {
- "cssstyle": "^4.1.0",
+ "cssstyle": "^4.2.1",
"data-urls": "^5.0.0",
- "decimal.js": "^10.4.3",
- "form-data": "^4.0.0",
+ "decimal.js": "^10.5.0",
"html-encoding-sniffer": "^4.0.0",
"http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.5",
+ "https-proxy-agent": "^7.0.6",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.12",
- "parse5": "^7.1.2",
- "rrweb-cssom": "^0.7.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
"saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
- "tough-cookie": "^5.0.0",
+ "tough-cookie": "^5.1.1",
"w3c-xmlserializer": "^5.0.0",
"webidl-conversions": "^7.0.0",
"whatwg-encoding": "^3.1.1",
"whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0",
+ "whatwg-url": "^14.1.1",
"ws": "^8.18.0",
"xml-name-validator": "^5.0.0"
},
@@ -4448,7 +4545,7 @@
"node": ">=18"
},
"peerDependencies": {
- "canvas": "^2.11.2"
+ "canvas": "^3.0.0"
},
"peerDependenciesMeta": {
"canvas": {
@@ -4664,7 +4761,6 @@
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true,
"license": "ISC"
},
"node_modules/media-typer": {
@@ -4751,6 +4847,7 @@
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
"engines": {
"node": ">= 0.6"
}
@@ -4759,6 +4856,7 @@
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
"dependencies": {
"mime-db": "1.52.0"
},
@@ -5039,9 +5137,10 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.16",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz",
- "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==",
+ "version": "2.2.20",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
+ "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==",
+ "license": "MIT",
"peer": true
},
"node_modules/object-inspect": {
@@ -5246,12 +5345,13 @@
}
},
"node_modules/parse5": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
- "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "license": "MIT",
"peer": true,
"dependencies": {
- "entities": "^4.5.0"
+ "entities": "^6.0.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
@@ -5747,9 +5847,10 @@
}
},
"node_modules/rrweb-cssom": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
- "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
+ "license": "MIT",
"peer": true
},
"node_modules/run-applescript": {
@@ -5817,6 +5918,7 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
"integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "license": "ISC",
"peer": true,
"dependencies": {
"xmlchars": "^2.2.0"
@@ -6483,6 +6585,7 @@
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "license": "MIT",
"peer": true
},
"node_modules/table": {
@@ -6667,21 +6770,23 @@
"license": "MIT"
},
"node_modules/tldts": {
- "version": "6.1.65",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.65.tgz",
- "integrity": "sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ==",
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
+ "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
+ "license": "MIT",
"peer": true,
"dependencies": {
- "tldts-core": "^6.1.65"
+ "tldts-core": "^6.1.86"
},
"bin": {
"tldts": "bin/cli.js"
}
},
"node_modules/tldts-core": {
- "version": "6.1.65",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.65.tgz",
- "integrity": "sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg==",
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
+ "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
+ "license": "MIT",
"peer": true
},
"node_modules/to-fast-properties": {
@@ -6716,9 +6821,10 @@
}
},
"node_modules/tough-cookie": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
- "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
+ "license": "BSD-3-Clause",
"peer": true,
"dependencies": {
"tldts": "^6.1.32"
@@ -6728,9 +6834,10 @@
}
},
"node_modules/tr46": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
- "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
+ "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
+ "license": "MIT",
"peer": true,
"dependencies": {
"punycode": "^2.3.1"
@@ -6984,6 +7091,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
"integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
+ "license": "MIT",
"peer": true,
"dependencies": {
"xml-name-validator": "^5.0.0"
@@ -7019,6 +7127,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "license": "BSD-2-Clause",
"peer": true,
"engines": {
"node": ">=12"
@@ -7402,6 +7511,7 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
"integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "license": "MIT",
"peer": true,
"dependencies": {
"iconv-lite": "0.6.3"
@@ -7414,18 +7524,20 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
"integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "license": "MIT",
"peer": true,
"engines": {
"node": ">=18"
}
},
"node_modules/whatwg-url": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz",
- "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==",
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+ "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
+ "license": "MIT",
"peer": true,
"dependencies": {
- "tr46": "^5.0.0",
+ "tr46": "^5.1.0",
"webidl-conversions": "^7.0.0"
},
"engines": {
@@ -7538,6 +7650,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
"integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "license": "Apache-2.0",
"peer": true,
"engines": {
"node": ">=18"
@@ -7547,6 +7660,7 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "license": "MIT",
"peer": true
},
"node_modules/y18n": {
@@ -7638,6 +7752,19 @@
}
},
"dependencies": {
+ "@asamuzakjp/css-color": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.7.tgz",
+ "integrity": "sha512-Ok5fYhtwdyJQmU1PpEv6Si7Y+A4cYb8yNM9oiIJC9TzXPMuN9fvdonKJqcnz9TbFqV6bQ8z0giRq0iaOpGZV2g==",
+ "peer": true,
+ "requires": {
+ "@csstools/css-calc": "^2.1.3",
+ "@csstools/css-color-parser": "^3.0.9",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "lru-cache": "^10.4.3"
+ }
+ },
"@babel/code-frame": {
"version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
@@ -7826,9 +7953,9 @@
}
},
"@blockly/dev-scripts": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@blockly/dev-scripts/-/dev-scripts-4.0.5.tgz",
- "integrity": "sha512-JVCYK4RAJ7mmumbIRr6Hf6ZGrVXy2rw10GM/uwuXIlM33rwjEJRoBTEq+0R2N5+75C28mx4g2xU5Fpff/yjDrA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@blockly/dev-scripts/-/dev-scripts-4.0.7.tgz",
+ "integrity": "sha512-viRLV1HO/NwpfQ1NO/S6br/oyJxnp4owTpQGS+bGx/yOVD1Aiku/bRCjeL/apLnwstNXqSmQl4kEvwnF5i3z2g==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.8.3",
@@ -7847,9 +7974,9 @@
}
},
"@blockly/dev-tools": {
- "version": "8.0.12",
- "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.0.12.tgz",
- "integrity": "sha512-jE0y/Z7ggmM2JS4l0Xf2ic3eecuM+ZDjUZNCcM2k6yy0VDJoxOPN63Cq2soswXQRuKHfzRMHY48rCvoKL3MqPA==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@blockly/dev-tools/-/dev-tools-8.1.0.tgz",
+ "integrity": "sha512-oiNh1p8N/saDNsk/U6wY+SJs8i2bMkVgQYAwCd4deVIQeLGRZsw83Adm9CiXyXcFrZUOeCwmiNKwTR5JY+qh0Q==",
"dev": true,
"requires": {
"@blockly/block-test": "^6.0.11",
@@ -7915,6 +8042,42 @@
"eslint-plugin-jsdoc": "^46.8.0"
}
},
+ "@csstools/color-helpers": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
+ "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==",
+ "peer": true
+ },
+ "@csstools/css-calc": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz",
+ "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==",
+ "peer": true,
+ "requires": {}
+ },
+ "@csstools/css-color-parser": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz",
+ "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==",
+ "peer": true,
+ "requires": {
+ "@csstools/color-helpers": "^5.0.2",
+ "@csstools/css-calc": "^2.1.3"
+ }
+ },
+ "@csstools/css-parser-algorithms": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
+ "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
+ "peer": true,
+ "requires": {}
+ },
+ "@csstools/css-tokenizer": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
+ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
+ "peer": true
+ },
"@discoveryjs/json-ext": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
@@ -8764,13 +8927,10 @@
"requires": {}
},
"agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
- "peer": true,
- "requires": {
- "debug": "^4.3.4"
- }
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "peer": true
},
"ajv": {
"version": "8.17.1",
@@ -8878,12 +9038,6 @@
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true
},
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "peer": true
- },
"babel-eslint": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
@@ -8931,12 +9085,12 @@
"dev": true
},
"blockly": {
- "version": "12.0.0-beta.0",
- "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0-beta.0.tgz",
- "integrity": "sha512-Z9cULe95wgQGj87DQZ9RBJRu5oMLQEUTz0beZVcZL/ddVuga6qtZZ9DbaDfCvt4ffVz1O/kyNzPJ+cqvovSjGg==",
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/blockly/-/blockly-12.0.0.tgz",
+ "integrity": "sha512-CrwxGjbgCh/zGg46VTlp26NYblSi/82n4VFsamyW5b4W6t3HXaf/b3CbMuu4/YnFvqlyJs+8zR4OKNTbIc28EA==",
"peer": true,
"requires": {
- "jsdom": "25.0.1"
+ "jsdom": "26.1.0"
}
},
"body-parser": {
@@ -9195,15 +9349,6 @@
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"dev": true
},
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "peer": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -9333,12 +9478,13 @@
}
},
"cssstyle": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
- "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz",
+ "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==",
"peer": true,
"requires": {
- "rrweb-cssom": "^0.7.1"
+ "@asamuzakjp/css-color": "^3.1.2",
+ "rrweb-cssom": "^0.8.0"
}
},
"dat.gui": {
@@ -9372,9 +9518,9 @@
"dev": true
},
"decimal.js": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
+ "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
"peer": true
},
"deep-eql": {
@@ -9440,12 +9586,6 @@
"integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
"dev": true
},
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "peer": true
- },
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -9554,9 +9694,9 @@
}
},
"entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz",
+ "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==",
"peer": true
},
"envinfo": {
@@ -10181,17 +10321,6 @@
}
}
},
- "form-data": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
- "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
- "peer": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
"forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -10520,12 +10649,12 @@
}
},
"https-proxy-agent": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
- "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"peer": true,
"requires": {
- "agent-base": "^7.0.2",
+ "agent-base": "^7.1.2",
"debug": "4"
}
},
@@ -10805,30 +10934,29 @@
"dev": true
},
"jsdom": {
- "version": "25.0.1",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
- "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
+ "version": "26.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
"peer": true,
"requires": {
- "cssstyle": "^4.1.0",
+ "cssstyle": "^4.2.1",
"data-urls": "^5.0.0",
- "decimal.js": "^10.4.3",
- "form-data": "^4.0.0",
+ "decimal.js": "^10.5.0",
"html-encoding-sniffer": "^4.0.0",
"http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.5",
+ "https-proxy-agent": "^7.0.6",
"is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.12",
- "parse5": "^7.1.2",
- "rrweb-cssom": "^0.7.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
"saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
- "tough-cookie": "^5.0.0",
+ "tough-cookie": "^5.1.1",
"w3c-xmlserializer": "^5.0.0",
"webidl-conversions": "^7.0.0",
"whatwg-encoding": "^3.1.1",
"whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^14.0.0",
+ "whatwg-url": "^14.1.1",
"ws": "^8.18.0",
"xml-name-validator": "^5.0.0"
}
@@ -10998,8 +11126,7 @@
"lru-cache": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
- "dev": true
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
},
"media-typer": {
"version": "0.3.0",
@@ -11059,12 +11186,14 @@
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
"requires": {
"mime-db": "1.52.0"
}
@@ -11279,9 +11408,9 @@
}
},
"nwsapi": {
- "version": "2.2.16",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz",
- "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==",
+ "version": "2.2.20",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
+ "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==",
"peer": true
},
"object-inspect": {
@@ -11418,12 +11547,12 @@
}
},
"parse5": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
- "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
"peer": true,
"requires": {
- "entities": "^4.5.0"
+ "entities": "^6.0.0"
}
},
"parseurl": {
@@ -11756,9 +11885,9 @@
}
},
"rrweb-cssom": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
- "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
"peer": true
},
"run-applescript": {
@@ -12422,18 +12551,18 @@
"dev": true
},
"tldts": {
- "version": "6.1.65",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.65.tgz",
- "integrity": "sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ==",
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
+ "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
"peer": true,
"requires": {
- "tldts-core": "^6.1.65"
+ "tldts-core": "^6.1.86"
}
},
"tldts-core": {
- "version": "6.1.65",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.65.tgz",
- "integrity": "sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg==",
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
+ "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
"peer": true
},
"to-fast-properties": {
@@ -12458,18 +12587,18 @@
"dev": true
},
"tough-cookie": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
- "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
"peer": true,
"requires": {
"tldts": "^6.1.32"
}
},
"tr46": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
- "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
+ "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
"peer": true,
"requires": {
"punycode": "^2.3.1"
@@ -12923,12 +13052,12 @@
"peer": true
},
"whatwg-url": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz",
- "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==",
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+ "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
"peer": true,
"requires": {
- "tr46": "^5.0.0",
+ "tr46": "^5.1.0",
"webidl-conversions": "^7.0.0"
}
},