From addf39c88a8f60a4e7f100379eb5269921947fa9 Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 21 Sep 2022 16:06:16 -0400 Subject: [PATCH 001/110] feat: working react 18 upgrades (non-strict) --- .eslintrc | 7 +- babel.config.json | 3 + package-lock.json | 2011 ++++++++++++++----------------------- src/core/ViewContainer.js | 12 +- usage/package-lock.json | 73 +- usage/package.json | 4 +- usage/src/main.jsx | 5 +- 7 files changed, 784 insertions(+), 1331 deletions(-) create mode 100644 babel.config.json diff --git a/.eslintrc b/.eslintrc index 1423d73..586c297 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,11 +1,10 @@ { - "parser": "babel-eslint", + "parser": "@babel/eslint-parser", "extends": [ "standard", - "standard-react", + "prettier", "plugin:prettier/recommended", - "prettier/standard", - "prettier/react" + "plugin:react/recommended" ], "env": { "browser": true diff --git a/babel.config.json b/babel.config.json new file mode 100644 index 0000000..456751f --- /dev/null +++ b/babel.config.json @@ -0,0 +1,3 @@ +{ + "presets": ["@babel/preset-env", "@babel/preset-react"] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 5ccb516..8003e0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2110,18 +2110,6 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -2598,15 +2586,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@rollup/plugin-eslint/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/@rollup/plugin-eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -2772,37 +2751,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@rollup/plugin-eslint/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/@rollup/plugin-eslint/node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@rollup/plugin-eslint/node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, "node_modules/@rollup/plugin-eslint/node_modules/globals": { "version": "13.19.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", @@ -2827,72 +2775,12 @@ "node": ">=8" } }, - "node_modules/@rollup/plugin-eslint/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/@rollup/plugin-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/@rollup/plugin-eslint/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/@rollup/plugin-eslint/node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "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.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/@rollup/plugin-eslint/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/@rollup/plugin-eslint/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/@rollup/plugin-eslint/node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -2925,44 +2813,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/@rollup/plugin-eslint/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/@rollup/plugin-eslint/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/@rollup/plugin-eslint/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/@rollup/plugin-eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3013,18 +2863,6 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/@rollup/plugin-eslint/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/@rollup/plugin-eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -3239,9 +3077,9 @@ } }, "node_modules/@semantic-release/github/node_modules/ignore": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", - "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -3295,29 +3133,6 @@ "semantic-release": ">=16.0.0 <18.0.0" } }, - "node_modules/@semantic-release/npm/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/@semantic-release/npm/node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -3332,27 +3147,6 @@ "node": ">=12" } }, - "node_modules/@semantic-release/npm/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/@semantic-release/npm/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/@semantic-release/npm/node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -3365,15 +3159,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@semantic-release/npm/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/@semantic-release/npm/node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -3386,21 +3171,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/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/@semantic-release/npm/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -3473,18 +3243,6 @@ "semantic-release": ">=15.8.0 <18.0.0" } }, - "node_modules/@semantic-release/release-notes-generator/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/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -3868,12 +3626,12 @@ } }, "node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "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": ">=6" + "node": ">=8" } }, "node_modules/ansi-styles": { @@ -4580,109 +4338,21 @@ "@colors/colors": "1.5.0" } }, - "node_modules/cli-table3/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==", + "node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-table3/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/cli-table3/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/cli-table3/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/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/cliui/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/cliui/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/cliui/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/cliui/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" + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, "node_modules/collection-visit": { @@ -4769,6 +4439,21 @@ "node": "*" } }, + "node_modules/commitizen/node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/commitizen/node_modules/strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -5271,9 +4956,9 @@ } }, "node_modules/del/node_modules/ignore": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", - "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -5449,74 +5134,6 @@ "node": ">=10.17" } }, - "node_modules/env-ci/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/env-ci/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/env-ci/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/env-ci/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/env-ci/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/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -5800,18 +5417,6 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/eslint-plugin-es/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/eslint-plugin-import": { "version": "2.26.0", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", @@ -6107,15 +5712,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/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/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -6210,6 +5806,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, "node_modules/eslint/node_modules/globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", @@ -6286,28 +5914,23 @@ "node": ">=8" } }, - "node_modules/eslint/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/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/eslint/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==", + "node_modules/eslint/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, "node_modules/eslint/node_modules/mute-stream": { @@ -6316,19 +5939,21 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "node_modules/eslint/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/eslint/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" + "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": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, "node_modules/eslint/node_modules/path-key": { @@ -6340,6 +5965,24 @@ "node": ">=4" } }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true, + "engines": { + "node": ">=6.5.0" + } + }, "node_modules/eslint/node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -6353,6 +5996,18 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, "node_modules/eslint/node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -6374,30 +6029,25 @@ "node": ">=0.10.0" } }, - "node_modules/eslint/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==", + "node_modules/eslint/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/eslint/node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/eslint/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, "node_modules/eslint/node_modules/supports-color": { @@ -6412,6 +6062,18 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/eslint/node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -6519,19 +6181,19 @@ } }, "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "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.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", + "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.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" }, "engines": { @@ -6541,30 +6203,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/execa/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/execa/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/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -6892,9 +6530,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", - "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -6919,15 +6557,15 @@ } }, "node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "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": "^2.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/filename-reserved-regex": { @@ -7062,35 +6700,22 @@ } }, "node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "node_modules/for-in": { @@ -7259,15 +6884,12 @@ } }, "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "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, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7709,12 +7331,12 @@ } }, "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "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": ">=8.12.0" + "node": ">=10.17.0" } }, "node_modules/humanize-url": { @@ -7852,6 +7474,70 @@ "node": ">=6.0.0" } }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -8039,12 +7725,12 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "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": ">=4" + "node": ">=8" } }, "node_modules/is-glob": { @@ -8494,13 +8180,13 @@ } }, "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "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.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -9051,12 +8737,12 @@ } }, "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "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": ">=4" + "node": ">=6" } }, "node_modules/min-indent": { @@ -9081,9 +8767,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/minimist-options": { @@ -9125,15 +8811,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mkdirp/node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -9211,9 +8888,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" @@ -12509,29 +12186,32 @@ } }, "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "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": "^1.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "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" + "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.3" }, "engines": { "node": ">= 0.8.0" @@ -12886,9 +12566,9 @@ } }, "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "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" @@ -13292,12 +12972,15 @@ } }, "node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { - "node": ">=6.5.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/regexpu-core": { @@ -13470,6 +13153,27 @@ "node": ">=4" } }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -13767,6 +13471,29 @@ "node": ">=8" } }, + "node_modules/semantic-release/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/semantic-release/node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -13794,6 +13521,21 @@ "node": ">=8" } }, + "node_modules/semantic-release/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/semantic-release/node_modules/hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -13806,6 +13548,15 @@ "node": ">=10" } }, + "node_modules/semantic-release/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, "node_modules/semantic-release/node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -14052,6 +13803,15 @@ "node": ">=6" } }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -14554,37 +14314,17 @@ } }, "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "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": { - "ansi-regex": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/string.prototype.matchall": { @@ -14652,15 +14392,15 @@ } }, "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "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": "^4.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/strip-bom": { @@ -14694,12 +14434,15 @@ } }, "node_modules/strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "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/strip-outer": { @@ -14812,12 +14555,30 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/table/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/table/node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/table/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -14838,6 +14599,18 @@ "node": ">=6" } }, + "node_modules/table/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -15269,12 +15042,12 @@ "dev": true }, "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "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.1.2" + "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" @@ -15783,15 +15556,6 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/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/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -15825,41 +15589,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/wrap-ansi/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/wrap-ansi/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/wrap-ansi/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/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -15994,50 +15723,6 @@ "node": ">=10" } }, - "node_modules/yargs/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/yargs/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/yargs/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/yargs/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/yargs/node_modules/yargs-parser": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", @@ -17520,12 +17205,6 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "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==", - "dev": true - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -17914,12 +17593,6 @@ "uri-js": "^4.2.2" } }, - "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", @@ -18042,31 +17715,6 @@ "eslint-visitor-keys": "^1.3.0" } }, - "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" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, "globals": { "version": "13.19.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", @@ -18082,54 +17730,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "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 - }, "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 }, - "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" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "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.3" - } - }, - "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 - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, "semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -18150,32 +17756,6 @@ "is-fullwidth-code-point": "^3.0.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==", - "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", @@ -18218,15 +17798,6 @@ } } }, - "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" - } - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -18390,9 +17961,9 @@ } }, "ignore": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", - "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "jsonfile": { @@ -18432,25 +18003,8 @@ "registry-auth-token": "^4.0.0", "semver": "^7.1.2", "tempy": "^1.0.0" - }, - "dependencies": { - "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" - } - }, + }, + "dependencies": { "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -18462,18 +18016,6 @@ "universalify": "^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 - }, - "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 - }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -18484,27 +18026,12 @@ "universalify": "^2.0.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 - }, "normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true }, - "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" - } - }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -18556,14 +18083,6 @@ "into-stream": "^6.0.0", "lodash": "^4.17.4", "read-pkg-up": "^7.0.0" - }, - "dependencies": { - "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 - } } }, "@tootallnate/once": { @@ -18919,9 +18438,9 @@ "dev": true }, "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "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": { @@ -19451,40 +18970,6 @@ "requires": { "@colors/colors": "1.5.0", "string-width": "^4.2.0" - }, - "dependencies": { - "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 - }, - "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 - }, - "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" - } - } } }, "cli-width": { @@ -19502,40 +18987,6 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "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 - }, - "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 - }, - "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" - } - } } }, "collection-visit": { @@ -19604,6 +19055,18 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true } } }, @@ -19977,9 +19440,9 @@ } }, "ignore": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", - "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "p-map": { @@ -20116,52 +19579,6 @@ "execa": "^5.0.0", "fromentries": "^1.3.2", "java-properties": "^1.0.0" - }, - "dependencies": { - "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" - } - }, - "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 - }, - "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 - }, - "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 - }, - "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" - } - } } }, "error-ex": { @@ -20319,12 +19736,6 @@ } } }, - "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", @@ -20394,6 +19805,32 @@ "escape-string-regexp": "^1.0.5" } }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, "globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", @@ -20451,23 +19888,21 @@ } } }, - "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 - }, "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 }, - "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 + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } }, "mute-stream": { "version": "0.0.8", @@ -20475,13 +19910,18 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { - "mimic-fn": "^2.1.0" + "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" } }, "path-key": { @@ -20490,6 +19930,18 @@ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -20500,6 +19952,15 @@ "signal-exit": "^3.0.2" } }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -20515,25 +19976,20 @@ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": 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==", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ansi-regex": "^4.1.0" }, "dependencies": { - "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" - } + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true } } }, @@ -20546,6 +20002,15 @@ "has-flag": "^4.0.0" } }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", @@ -20654,12 +20119,6 @@ "requires": { "eslint-visitor-keys": "^1.1.0" } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true } } }, @@ -20902,37 +20361,20 @@ "peer": true }, "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "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.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", + "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.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "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 - }, - "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" - } - } } }, "expand-brackets": { @@ -21203,9 +20645,9 @@ "dev": true }, "fastq": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", - "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -21227,12 +20669,12 @@ } }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "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": "^2.0.1" + "flat-cache": "^3.0.4" } }, "filename-reserved-regex": { @@ -21339,31 +20781,19 @@ } }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "for-in": { @@ -21480,15 +20910,12 @@ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", "dev": true }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.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 + }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -21825,9 +21252,9 @@ } }, "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "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 }, "humanize-url": { @@ -21935,6 +21362,56 @@ "string-width": "^2.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "internal-slot": { @@ -22070,9 +21547,9 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "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": { @@ -22406,13 +21883,13 @@ "dev": true }, "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "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.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, "lines-and-columns": { @@ -22842,9 +22319,9 @@ } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "min-indent": { @@ -22863,9 +22340,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "minimist-options": { @@ -22896,14 +22373,6 @@ "dev": true, "requires": { "minimist": "^1.2.6" - }, - "dependencies": { - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - } } }, "modify-values": { @@ -22977,9 +22446,9 @@ } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dev": true, "requires": { "whatwg-url": "^5.0.0" @@ -25357,26 +24826,26 @@ } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "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": "^1.0.0" + "mimic-fn": "^2.1.0" } }, "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "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" + "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.3" } }, "os-tmpdir": { @@ -25622,9 +25091,9 @@ "dev": true }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prepend-http": { @@ -25934,9 +25403,9 @@ } }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "regexpu-core": { @@ -26066,6 +25535,23 @@ "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } } }, "ret": { @@ -26290,6 +25776,23 @@ "yaml": "^1.7.2" } }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -26308,6 +25811,15 @@ "to-regex-range": "^5.0.1" } }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -26317,6 +25829,12 @@ "lru-cache": "^6.0.0" } }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -26502,6 +26020,14 @@ "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + } } }, "snapdragon": { @@ -26933,30 +26459,14 @@ } }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "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": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "string.prototype.matchall": { @@ -27009,12 +26519,12 @@ } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "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": "^4.1.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -27039,9 +26549,9 @@ } }, "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "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 }, "strip-outer": { @@ -27125,12 +26635,24 @@ "uri-js": "^4.2.2" } }, + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -27147,6 +26669,15 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } } } }, @@ -27462,12 +26993,12 @@ "dev": true }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "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.1.2" + "prelude-ls": "^1.2.1" } }, "type-fest": { @@ -27848,12 +27379,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "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", @@ -27877,32 +27402,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "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 - }, - "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" - } } } }, @@ -28011,38 +27510,6 @@ "yargs-parser": "^18.1.2" }, "dependencies": { - "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 - }, - "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 - }, - "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" - } - }, "yargs-parser": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", diff --git a/src/core/ViewContainer.js b/src/core/ViewContainer.js index 363d723..174f5d6 100644 --- a/src/core/ViewContainer.js +++ b/src/core/ViewContainer.js @@ -158,8 +158,10 @@ class ViewController extends Component { ViewController.defaultProps = View.defaultProps; ViewController.propTypes = View.propTypes; -export default React.forwardRef((props, ref) => ( - - {(root) => } - -)); +export default React.forwardRef(function ViewContainer(props, ref) { + return ( + + {(root) => } + + ); +}); diff --git a/usage/package-lock.json b/usage/package-lock.json index 6f62b37..0feae54 100644 --- a/usage/package-lock.json +++ b/usage/package-lock.json @@ -8,8 +8,8 @@ "license": "BSD-3-Clause", "dependencies": { "fflate": "^0.7.4", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-vtk-js": "file:.." }, "devDependencies": { @@ -1206,14 +1206,6 @@ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -1263,28 +1255,26 @@ } }, "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.23.0" }, "peerDependencies": { - "react": "17.0.2" + "react": "^18.2.0" } }, "node_modules/react-refresh": { @@ -1333,12 +1323,11 @@ } }, "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "node_modules/semver": { @@ -2188,11 +2177,6 @@ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -2223,22 +2207,20 @@ } }, "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "scheduler": "^0.23.0" } }, "react-refresh": { @@ -2306,12 +2288,11 @@ } }, "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "semver": { diff --git a/usage/package.json b/usage/package.json index 4ff31e5..59e1669 100644 --- a/usage/package.json +++ b/usage/package.json @@ -11,8 +11,8 @@ }, "dependencies": { "fflate": "^0.7.4", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-vtk-js": "file:.." }, "devDependencies": { diff --git a/usage/src/main.jsx b/usage/src/main.jsx index b597a44..04df71c 100644 --- a/usage/src/main.jsx +++ b/usage/src/main.jsx @@ -1,5 +1,6 @@ import React from 'react'; -import ReactDOM from 'react-dom'; +import { createRoot } from 'react-dom/client'; import App from './App'; -ReactDOM.render(, document.getElementById('root')); +const root = createRoot(document.getElementById('root')); +root.render(); From e4a2f3ec17b1b66aa73f472f475365a665b581e1 Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 26 Oct 2022 16:21:55 -0400 Subject: [PATCH 002/110] feat(ts): working PolyDataWithData example - Working PolyData + GeometryRepresentation pipeline - Working Algorithm + GeometryRepresentation pipeline --- .eslintrc | 9 +- .prettierrc | 3 +- package-lock.json | 10299 ++++++++------------- package.json | 61 +- rollup.config.js | 45 +- src/core-ts/Algorithm.tsx | 105 + src/core-ts/DataArray.ts | 125 + src/core-ts/GeometryRepresentation.tsx | 383 + src/core-ts/PointData.tsx | 14 + src/core-ts/PolyData.tsx | 229 + src/core-ts/View.tsx | 370 + src/core-ts/contexts.ts | 48 + src/global.d.ts | 12 + src/index.ts | 11 + src/types/index.ts | 69 + src/utils-ts/comparators.ts | 51 + src/utils-ts/index.ts | 37 + src/utils-ts/numpy.ts | 10 + src/utils-ts/useBooleanAccumulator.ts | 20 + src/utils-ts/useComparableEffect.ts | 23 + src/utils-ts/useGetterRef.ts | 14 + src/utils-ts/useMount.ts | 8 + src/utils-ts/useOrderedUnmountEffect.tsx | 126 + src/utils-ts/usePrevious.ts | 11 + src/utils-ts/useResizeObserver.ts | 37 + src/utils-ts/useUnmount.ts | 11 + tsconfig.json | 17 + usage/package-lock.json | 86 +- 28 files changed, 5732 insertions(+), 6502 deletions(-) create mode 100644 src/core-ts/Algorithm.tsx create mode 100644 src/core-ts/DataArray.ts create mode 100644 src/core-ts/GeometryRepresentation.tsx create mode 100644 src/core-ts/PointData.tsx create mode 100644 src/core-ts/PolyData.tsx create mode 100644 src/core-ts/View.tsx create mode 100644 src/core-ts/contexts.ts create mode 100644 src/global.d.ts create mode 100644 src/index.ts create mode 100644 src/types/index.ts create mode 100644 src/utils-ts/comparators.ts create mode 100644 src/utils-ts/index.ts create mode 100644 src/utils-ts/numpy.ts create mode 100644 src/utils-ts/useBooleanAccumulator.ts create mode 100644 src/utils-ts/useComparableEffect.ts create mode 100644 src/utils-ts/useGetterRef.ts create mode 100644 src/utils-ts/useMount.ts create mode 100644 src/utils-ts/useOrderedUnmountEffect.tsx create mode 100644 src/utils-ts/usePrevious.ts create mode 100644 src/utils-ts/useResizeObserver.ts create mode 100644 src/utils-ts/useUnmount.ts create mode 100644 tsconfig.json diff --git a/.eslintrc b/.eslintrc index 586c297..148f06a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,10 +1,15 @@ { - "parser": "@babel/eslint-parser", + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], "extends": [ "standard", "prettier", "plugin:prettier/recommended", - "plugin:react/recommended" + "plugin:react/recommended", + "plugin:react/jsx-runtime", + "plugin:react-hooks/recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" ], "env": { "browser": true diff --git a/.prettierrc b/.prettierrc index 21a33f5..15c81d2 100644 --- a/.prettierrc +++ b/.prettierrc @@ -6,5 +6,6 @@ "bracketSpacing": true, "jsxBracketSameLine": false, "arrowParens": "always", - "trailingComma": "es5" + "trailingComma": "es5", + "plugins": ["prettier-plugin-organize-imports"] } diff --git a/package-lock.json b/package-lock.json index 8003e0a..628de0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,17 +12,20 @@ "@babel/runtime": "^7.12.5" }, "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/plugin-transform-runtime": "^7.12.10", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", + "@babel/core": "^7.19.1", + "@babel/plugin-transform-runtime": "^7.19.1", + "@babel/preset-env": "^7.19.1", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", "@kitware/vtk.js": "^26.5.3", - "@rollup/plugin-babel": "^5.2.2", - "@rollup/plugin-commonjs": "17.0.0", - "@rollup/plugin-eslint": "^8.0.1", - "@rollup/plugin-node-resolve": "^11.1.0", - "babel-eslint": "^10.0.3", - "commitizen": "4.2.2", + "@rollup/plugin-babel": "^5.3.1", + "@rollup/plugin-commonjs": "22.0.2", + "@rollup/plugin-eslint": "^8.0.2", + "@rollup/plugin-node-resolve": "^14.1.0", + "@types/react": "^18.0.21", + "@typescript-eslint/eslint-plugin": "^5.40.1", + "@typescript-eslint/parser": "^5.40.1", + "commitizen": "4.2.5", "cross-env": "^7.0.2", "eslint": "^6.8.0", "eslint-config-prettier": "^6.7.0", @@ -30,20 +33,22 @@ "eslint-config-standard-react": "^9.2.0", "eslint-plugin-import": "^2.18.2", "eslint-plugin-node": "^11.0.0", - "eslint-plugin-prettier": "^3.1.1", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-react": "^7.17.0", - "eslint-plugin-standard": "^4.0.1", - "gh-pages": "^2.2.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-promise": "^6.0.1", + "eslint-plugin-react": "^7.31.10", + "eslint-plugin-react-hooks": "^4.6.0", + "gh-pages": "^4.0.0", "npm-run-all": "^4.1.5", - "prettier": "^2.0.4", - "react": "^16.13.1", - "react-dom": "^16.13.1", + "prettier": "^2.7.1", + "prettier-plugin-organize-imports": "^3.1.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", "rimraf": "^3.0.2", "rollup": "^2.37.1", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-terser": "^7.0.2", - "semantic-release": "17.3.1" + "semantic-release": "19.0.5", + "typescript": "^4.8.4" }, "peerDependencies": { "@kitware/vtk.js": "^26.5.3", @@ -115,13 +120,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dev": true, "dependencies": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -186,17 +192,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", - "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", + "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { @@ -261,13 +268,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -286,12 +293,12 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dev": true, "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -368,16 +375,17 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -438,9 +446,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -490,9 +498,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", + "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -989,6 +997,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", @@ -1549,6 +1572,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", + "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", @@ -1705,6 +1745,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-typescript": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", + "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-transform-typescript": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/runtime": { "version": "7.20.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", @@ -1717,33 +1774,33 @@ } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", + "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", + "@babel/generator": "^7.21.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/parser": "^7.21.0", + "@babel/types": "^7.21.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1752,9 +1809,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", + "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", @@ -2291,76 +2348,82 @@ } }, "node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz", + "integrity": "sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==", "dev": true, "dependencies": { - "@octokit/types": "^6.0.3" + "@octokit/types": "^9.0.0" + }, + "engines": { + "node": ">= 14" } }, "node_modules/@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz", + "integrity": "sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==", "dev": true, "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" } }, "node_modules/@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz", + "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==", "dev": true, "dependencies": { - "@octokit/types": "^6.0.3", + "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/endpoint/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, + }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, "node_modules/@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz", + "integrity": "sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==", "dev": true, "dependencies": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" } }, "node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz", + "integrity": "sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==", "dev": true, "dependencies": { - "@octokit/types": "^6.40.0" + "@octokit/types": "^9.0.0" + }, + "engines": { + "node": ">= 14" }, "peerDependencies": { - "@octokit/core": ">=2" + "@octokit/core": ">=4" } }, "node_modules/@octokit/plugin-request-log": { @@ -2373,71 +2436,74 @@ } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz", + "integrity": "sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==", "dev": true, "dependencies": { - "@octokit/types": "^6.39.0", + "@octokit/types": "^9.0.0", "deprecation": "^2.3.1" }, + "engines": { + "node": ">= 14" + }, "peerDependencies": { "@octokit/core": ">=3" } }, "node_modules/@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz", + "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", "dev": true, "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" } }, "node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "dev": true, "dependencies": { - "@octokit/types": "^6.0.3", + "@octokit/types": "^9.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" - } - }, - "node_modules/@octokit/request/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, + }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, "node_modules/@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "version": "19.0.7", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.7.tgz", + "integrity": "sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA==", "dev": true, "dependencies": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/core": "^4.1.0", + "@octokit/plugin-paginate-rest": "^6.0.0", "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + "@octokit/plugin-rest-endpoint-methods": "^7.0.0" + }, + "engines": { + "node": ">= 14" } }, "node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^12.11.0" + "@octokit/openapi-types": "^16.0.0" } }, "node_modules/@oozcitak/dom": { @@ -2488,6 +2554,31 @@ "node": ">=8.0" } }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/npm-conf": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz", + "integrity": "sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==", + "dev": true, + "dependencies": { + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -2512,9 +2603,9 @@ } }, "node_modules/@rollup/plugin-commonjs": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.0.0.tgz", - "integrity": "sha512-/omBIJG1nHQc+bgkYDuLpb/V08QyutP9amOrJRUSlYJZP+b/68gM//D8sxJe3Yry2QnYIr3QjR3x4AlxJEN3GA==", + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz", + "integrity": "sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -2526,10 +2617,10 @@ "resolve": "^1.17.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 12.0.0" }, "peerDependencies": { - "rollup": "^2.30.0" + "rollup": "^2.68.0" } }, "node_modules/@rollup/plugin-eslint": { @@ -2876,15 +2967,15 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-14.1.0.tgz", + "integrity": "sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", "is-module": "^1.0.0", "resolve": "^1.19.0" }, @@ -2892,7 +2983,7 @@ "node": ">= 10.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "rollup": "^2.78.0" } }, "node_modules/@rollup/pluginutils": { @@ -2919,118 +3010,63 @@ "dev": true }, "node_modules/@semantic-release/commit-analyzer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-8.0.1.tgz", - "integrity": "sha512-5bJma/oB7B4MtwUkZC2Bf7O1MHfi4gWe4mA+MIQ3lsEV0b422Bvl1z5HRpplDnMLHH3EXMoRdEng6Ds5wUqA3A==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", + "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", "dev": true, "dependencies": { "conventional-changelog-angular": "^5.0.0", "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.0.7", + "conventional-commits-parser": "^3.2.3", "debug": "^4.0.0", - "import-from": "^3.0.0", + "import-from": "^4.0.0", "lodash": "^4.17.4", "micromatch": "^4.0.2" }, "engines": { - "node": ">=10.18" + "node": ">=14.17" }, "peerDependencies": { - "semantic-release": ">=16.0.0 <18.0.0" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/commit-analyzer/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/commit-analyzer/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/@semantic-release/commit-analyzer/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" + "semantic-release": ">=18.0.0-beta.1" } }, - "node_modules/@semantic-release/commit-analyzer/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==", + "node_modules/@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, "engines": { - "node": ">=8.0" + "node": ">=14.17" } }, - "node_modules/@semantic-release/error": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-2.2.0.tgz", - "integrity": "sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg==", - "dev": true - }, "node_modules/@semantic-release/github": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-7.2.3.tgz", - "integrity": "sha512-lWjIVDLal+EQBzy697ayUNN8MoBpp+jYIyW2luOdqn5XBH4d9bQGfTnjuLyzARZBHejqh932HVjiH/j4+R7VHw==", + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.0.7.tgz", + "integrity": "sha512-VtgicRIKGvmTHwm//iqTh/5NGQwsncOMR5vQK9pMT92Aem7dv37JFKKRuulUsAnUOIlO4G8wH3gPiBAA0iW0ww==", "dev": true, "dependencies": { - "@octokit/rest": "^18.0.0", - "@semantic-release/error": "^2.2.0", + "@octokit/rest": "^19.0.0", + "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", "bottleneck": "^2.18.1", "debug": "^4.0.0", "dir-glob": "^3.0.0", - "fs-extra": "^10.0.0", + "fs-extra": "^11.0.0", "globby": "^11.0.0", - "http-proxy-agent": "^4.0.0", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "issue-parser": "^6.0.0", "lodash": "^4.17.4", - "mime": "^2.4.3", + "mime": "^3.0.0", "p-filter": "^2.0.0", "p-retry": "^4.0.0", "url-join": "^4.0.0" }, "engines": { - "node": ">=10.18" + "node": ">=14.17" }, "peerDependencies": { - "semantic-release": ">=16.0.0 <18.0.0" + "semantic-release": ">=18.0.0-beta.1" } }, "node_modules/@semantic-release/github/node_modules/array-union": { @@ -3043,9 +3079,9 @@ } }, "node_modules/@semantic-release/github/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==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -3053,7 +3089,7 @@ "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=14.14" } }, "node_modules/@semantic-release/github/node_modules/globby": { @@ -3107,36 +3143,36 @@ } }, "node_modules/@semantic-release/npm": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-7.1.3.tgz", - "integrity": "sha512-x52kQ/jR09WjuWdaTEHgQCvZYMOTx68WnS+TZ4fya5ZAJw4oRtJETtrvUw10FdfM28d/keInQdc66R1Gw5+OEQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.2.tgz", + "integrity": "sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g==", "dev": true, "dependencies": { - "@semantic-release/error": "^2.2.0", + "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", "execa": "^5.0.0", - "fs-extra": "^10.0.0", + "fs-extra": "^11.0.0", "lodash": "^4.17.15", "nerf-dart": "^1.0.0", "normalize-url": "^6.0.0", - "npm": "^7.0.0", + "npm": "^8.3.0", "rc": "^1.2.8", "read-pkg": "^5.0.0", - "registry-auth-token": "^4.0.0", + "registry-auth-token": "^5.0.0", "semver": "^7.1.2", "tempy": "^1.0.0" }, "engines": { - "node": ">=10.19" + "node": ">=16 || ^14.17" }, "peerDependencies": { - "semantic-release": ">=16.0.0 <18.0.0" + "semantic-release": ">=19.0.0" } }, "node_modules/@semantic-release/npm/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==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -3144,7 +3180,7 @@ "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=14.14" } }, "node_modules/@semantic-release/npm/node_modules/jsonfile": { @@ -3159,18 +3195,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@semantic-release/npm/node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@semantic-release/npm/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -3220,36 +3244,36 @@ } }, "node_modules/@semantic-release/release-notes-generator": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-9.0.3.tgz", - "integrity": "sha512-hMZyddr0u99OvM2SxVOIelHzly+PP3sYtJ8XOLHdMp8mrluN5/lpeTnIO27oeCYdupY/ndoGfvrqDjHqkSyhVg==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz", + "integrity": "sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w==", "dev": true, "dependencies": { "conventional-changelog-angular": "^5.0.0", - "conventional-changelog-writer": "^4.0.0", + "conventional-changelog-writer": "^5.0.0", "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.0.0", + "conventional-commits-parser": "^3.2.3", "debug": "^4.0.0", "get-stream": "^6.0.0", - "import-from": "^3.0.0", + "import-from": "^4.0.0", "into-stream": "^6.0.0", "lodash": "^4.17.4", "read-pkg-up": "^7.0.0" }, "engines": { - "node": ">=10.18" + "node": ">=14.17" }, "peerDependencies": { - "semantic-release": ">=15.8.0 <18.0.0" + "semantic-release": ">=18.0.0-beta.1" } }, "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==", + "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": ">= 6" + "node": ">= 10" } }, "node_modules/@tsconfig/node10": { @@ -3344,6 +3368,23 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, "node_modules/@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -3359,42 +3400,370 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", + "integrity": "sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==", "dev": true, - "peer": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/type-utils": "5.53.0", + "@typescript-eslint/utils": "5.53.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "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_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, - "peer": true + "engines": { + "node": ">= 4" + } }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, - "peer": true + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "node_modules/@typescript-eslint/parser": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz", + "integrity": "sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==", "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dependencies": { + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "debug": "^4.3.4" + }, + "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_modules/@typescript-eslint/scope-manager": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", + "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz", + "integrity": "sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.53.0", + "@typescript-eslint/utils": "5.53.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "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_modules/@typescript-eslint/types": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", + "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", + "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.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_modules/@typescript-eslint/typescript-estree/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/@typescript-eslint/typescript-estree/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/@typescript-eslint/typescript-estree/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", + "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "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" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/utils/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/@typescript-eslint/utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", + "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "peer": true, "dependencies": { @@ -3617,12 +3986,18 @@ } }, "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-regex": { @@ -3674,33 +4049,6 @@ "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", "dev": true }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", @@ -3747,15 +4095,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array.prototype.flat": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", @@ -3814,15 +4153,6 @@ "node": ">=0.10.0" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -3841,43 +4171,19 @@ "lodash": "^4.17.14" } }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, - "bin": { - "atob": "bin/atob.js" - }, "engines": { - "node": ">= 4.5.0" + "node": ">= 4.0.0" } }, - "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-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.17.7", @@ -3919,35 +4225,25 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "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/before-after-hook": { "version": "2.2.3", @@ -3964,6 +4260,31 @@ "node": "*" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/bottleneck": { "version": "2.19.5", "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", @@ -3981,45 +4302,15 @@ } }, "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/browserslist": { @@ -4050,6 +4341,30 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -4068,30 +4383,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cachedir": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz", - "integrity": "sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true, "engines": { "node": ">=6" @@ -4204,104 +4499,6 @@ "node": ">=6.0" } }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -4312,15 +4509,27 @@ } }, "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "dependencies": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-table3": { @@ -4339,33 +4548,32 @@ } }, "node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } }, "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "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": "^6.2.0" + "wrap-ansi": "^7.0.0" } }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8" } }, "node_modules/color-convert": { @@ -4393,25 +4601,25 @@ } }, "node_modules/commitizen": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.2.2.tgz", - "integrity": "sha512-uz+E6lGsDBDI2mYA4QfOxFeqdWUYwR1ky11YmLgg2BnEEP3YbeejpT4lxzGjkYqumnXr062qTOGavR9NtX/iwQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.2.5.tgz", + "integrity": "sha512-9sXju8Qrz1B4Tw7kC5KhnvwYQN88qs2zbiB8oyMsnXZyJ24PPGiNM3nHr73d32dnE3i8VJEXddBFIbOgYSEXtQ==", "dev": true, "dependencies": { - "cachedir": "2.2.0", + "cachedir": "2.3.0", "cz-conventional-changelog": "3.3.0", "dedent": "0.7.0", - "detect-indent": "6.0.0", - "find-node-modules": "2.0.0", + "detect-indent": "6.1.0", + "find-node-modules": "^2.1.2", "find-root": "1.1.0", - "fs-extra": "8.1.0", - "glob": "7.1.4", - "inquirer": "6.5.2", + "fs-extra": "9.1.0", + "glob": "7.2.3", + "inquirer": "8.2.4", "is-utf8": "^0.2.1", - "lodash": "^4.17.20", - "minimist": "1.2.5", + "lodash": "4.17.21", + "minimist": "1.2.6", "strip-bom": "4.0.0", - "strip-json-comments": "3.0.1" + "strip-json-comments": "3.1.1" }, "bin": { "commitizen": "bin/commitizen", @@ -4419,39 +4627,43 @@ "git-cz": "bin/git-cz" }, "engines": { - "node": ">= 10" + "node": ">= 12" } }, - "node_modules/commitizen/node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "node_modules/commitizen/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/commitizen/node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "node_modules/commitizen/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/commitizen/node_modules/strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "node_modules/commitizen/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 10.0.0" } }, "node_modules/commondir": { @@ -4470,18 +4682,22 @@ "dot-prop": "^5.1.0" } }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "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/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "node_modules/conventional-changelog-angular": { "version": "5.0.13", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", @@ -4496,15 +4712,14 @@ } }, "node_modules/conventional-changelog-writer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz", - "integrity": "sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, "dependencies": { - "compare-func": "^2.0.0", "conventional-commits-filter": "^2.0.7", "dateformat": "^3.0.0", - "handlebars": "^4.7.6", + "handlebars": "^4.7.7", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.15", "meow": "^8.0.0", @@ -4564,15 +4779,6 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/core-js-compat": { "version": "3.26.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", @@ -4597,7 +4803,6 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, - "optional": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -4674,6 +4879,12 @@ "node": ">=8" } }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true + }, "node_modules/cz-conventional-changelog": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", @@ -4836,15 +5047,6 @@ "node": ">=0.10.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -4875,6 +5077,18 @@ "node": ">=0.10.0" } }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -4891,19 +5105,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -4995,9 +5196,9 @@ } }, "node_modules/detect-indent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", - "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, "engines": { "node": ">=8" @@ -5085,15 +5286,6 @@ "node": ">= 4" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", @@ -5516,19 +5708,19 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.0.0" }, "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" }, "peerDependenciesMeta": { "eslint-config-prettier": { @@ -5537,12 +5729,15 @@ } }, "node_modules/eslint-plugin-promise": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", - "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, "node_modules/eslint-plugin-react": { @@ -5574,6 +5769,18 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -5622,6 +5829,7 @@ "url": "https://feross.org/support" } ], + "peer": true, "peerDependencies": { "eslint": ">=5.0.0" } @@ -5685,33 +5893,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -5727,27 +5908,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5933,12 +6093,6 @@ "node": ">= 0.8.0" } }, - "node_modules/eslint/node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, "node_modules/eslint/node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -5983,19 +6137,6 @@ "node": ">=6.5.0" } }, - "node_modules/eslint/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -6203,500 +6344,223 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "homedir-polyfill": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "dependencies": { - "ms": "2.0.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" } }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "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-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" + "@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": ">=0.10.0" + "node": ">=8.6.0" } }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "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/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "reusify": "^1.0.4" } }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "node_modules/fflate": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.3.tgz", + "integrity": "sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw==", + "dev": true + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/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": { - "is-buffer": "^1.1.5" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=0.10.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/find-node-modules": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", + "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "findup-sync": "^4.0.0", + "merge": "^2.1.1" } }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", "dev": true }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "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": { - "homedir-polyfill": "^1.0.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "node_modules/find-versions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", + "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", "dev": true, "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "semver-regex": "^3.1.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "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-glob/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/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/fast-glob/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/fast-glob/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/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/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fflate": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.3.tgz", - "integrity": "sha512-0Zz1jOzJWERhyhsimS54VTqOteCNwRtIlh8isdL0AXLo0g7xNTfTL7oWrkmCnPhZGocKIkWHBistBrrpoNH3aw==", - "dev": true - }, - "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "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/filename-reserved-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", - "integrity": "sha512-UZArj7+U+2reBBVCvVmRlyq9D7EYQdUtuNN+1iz7pF1jGcJ2L0TjiRCxsTZfj2xFbM4c25uGCUDpKTHA7L2TKg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/filenamify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", - "integrity": "sha512-DKVP0WQcB7WaIMSwDETqImRej2fepPqvXQjaVib7LRZn9Rxn5UbvK2tYTqGf1A1DkIprQQkG4XSQXSOZp7Q3GQ==", - "dev": true, - "dependencies": { - "filename-reserved-regex": "^1.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/filenamify-url": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/filenamify-url/-/filenamify-url-1.0.0.tgz", - "integrity": "sha512-O9K9JcZeF5VdZWM1qR92NSv1WY2EofwudQayPx5dbnnFl9k0IcZha4eV/FGkjnBK+1irOQInij0yiooCHu/0Fg==", - "dev": true, - "dependencies": { - "filenamify": "^1.0.0", - "humanize-url": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/find-node-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz", - "integrity": "sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==", - "dev": true, - "dependencies": { - "findup-sync": "^3.0.0", - "merge": "^1.2.1" - } - }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, - "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/find-versions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", - "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", - "dev": true, - "dependencies": { - "semver-regex": "^3.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", "dev": true, "dependencies": { "detect-file": "^1.0.0", "is-glob": "^4.0.0", - "micromatch": "^3.0.4", + "micromatch": "^4.0.2", "resolve-dir": "^1.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">= 8" } }, "node_modules/flat-cache": { @@ -6718,27 +6582,6 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -6911,25 +6754,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/gh-pages": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.2.0.tgz", - "integrity": "sha512-c+yPkNOPMFGNisYg9r4qvsMIjVYikJv7ImFOhPIVPt0+AcRUamZ7zkGRLHz7FKB0xrlZ+ddSOJsZv9XAFVXLmA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-4.0.0.tgz", + "integrity": "sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==", "dev": true, "dependencies": { "async": "^2.6.1", "commander": "^2.18.0", "email-addresses": "^3.0.1", - "filenamify-url": "^1.0.0", + "filenamify": "^4.3.0", + "find-cache-dir": "^3.3.1", "fs-extra": "^8.1.0", "globby": "^6.1.0" }, @@ -6938,7 +6773,7 @@ "gh-pages-clean": "bin/gh-pages-clean.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, "node_modules/gh-pages/node_modules/commander": { @@ -7138,6 +6973,12 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -7237,45 +7078,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -7304,12 +7106,12 @@ "dev": true }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "dependencies": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" }, @@ -7339,19 +7141,6 @@ "node": ">=10.17.0" } }, - "node_modules/humanize-url": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/humanize-url/-/humanize-url-1.0.1.tgz", - "integrity": "sha512-RtgTzXCPVb/te+e82NDhAc5paj+DuKSratIGAr+v+HZK24eAQ8LMoBGYoL7N/O+9iEc33AKHg45dOMKw3DNldQ==", - "dev": true, - "dependencies": { - "normalize-url": "^1.0.0", - "strip-url-auth": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -7364,6 +7153,26 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -7399,15 +7208,15 @@ } }, "node_modules/import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { @@ -7451,93 +7260,131 @@ "dev": true }, "node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", "dev": true, "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.0.0" } }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inquirer/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/inquirer/node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { + "node_modules/inquirer/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/inquirer/node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "tslib": "^2.1.0" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, + "node_modules/inquirer/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -7581,21 +7428,9 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-arrayish": { @@ -7632,11 +7467,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "node_modules/is-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-callable": { "version": "1.2.7", @@ -7662,18 +7506,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -7689,32 +7521,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -7745,6 +7551,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -7764,15 +7579,12 @@ } }, "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, "node_modules/is-number-object": { @@ -7790,18 +7602,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -7839,13 +7639,10 @@ } }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, "engines": { "node": ">=0.10.0" } @@ -7941,6 +7738,18 @@ "node": ">=0.10.0" } }, + "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-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -7980,15 +7789,6 @@ "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/issue-parser": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", @@ -8372,6 +8172,92 @@ "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", "dev": true }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/longest": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", @@ -8414,6 +8300,21 @@ "sourcemap-codec": "^1.4.8" } }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -8421,15 +8322,6 @@ "dev": true, "optional": true }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -8442,136 +8334,69 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/marked": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.9.tgz", - "integrity": "sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw==", + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", + "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", "dev": true, "bin": { - "marked": "bin/marked" + "marked": "bin/marked.js" }, "engines": { - "node": ">= 8.16.2" + "node": ">= 12" } }, "node_modules/marked-terminal": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-4.2.0.tgz", - "integrity": "sha512-DQfNRV9svZf0Dm9Cf5x5xaVJ1+XjxQW6XjFJ5HFkVyK52SDpj5PCBzS5X5r2w9nHr3mlB0T5201UMLue9fmhUw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.1.1.tgz", + "integrity": "sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g==", "dev": true, "dependencies": { - "ansi-escapes": "^4.3.1", + "ansi-escapes": "^5.0.0", "cardinal": "^2.1.1", - "chalk": "^4.1.0", - "cli-table3": "^0.6.0", - "node-emoji": "^1.10.0", - "supports-hyperlinks": "^2.1.0" + "chalk": "^5.0.0", + "cli-table3": "^0.6.1", + "node-emoji": "^1.11.0", + "supports-hyperlinks": "^2.2.0" + }, + "engines": { + "node": ">=14.13.1 || >=16.0.0" }, "peerDependencies": { - "marked": "^1.0.0 || ^2.0.0" + "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" } }, "node_modules/marked-terminal/node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" + "type-fest": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/marked-terminal/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/marked-terminal/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/marked-terminal/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/marked-terminal/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/marked-terminal/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/marked-terminal/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/marked-terminal/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/marked-terminal/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "engines": { "node": ">=10" @@ -8656,10 +8481,22 @@ "node": ">=10" } }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", "dev": true }, "node_modules/merge-stream": { @@ -8678,39 +8515,28 @@ } }, "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true, "bin": { "mime": "cli.js" }, "engines": { - "node": ">=4.0.0" + "node": ">=10.0.0" } }, "node_modules/mime-db": { @@ -8786,19 +8612,6 @@ "node": ">= 6" } }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -8827,39 +8640,23 @@ "dev": true }, "node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/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/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -8935,35 +8732,31 @@ } }, "node_modules/normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, - "dependencies": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-7.24.2.tgz", - "integrity": "sha512-120p116CE8VMMZ+hk8IAb1inCPk4Dj3VZw29/n2g6UI77urJKVYb7FZUDW8hY+EBnfsjI/2yrobBgFyzo7YpVQ==", + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.19.4.tgz", + "integrity": "sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", "@npmcli/ci-detect", "@npmcli/config", + "@npmcli/fs", "@npmcli/map-workspaces", "@npmcli/package-json", "@npmcli/run-script", "abbrev", - "ansicolors", - "ansistyles", "archy", "cacache", "chalk", @@ -8972,6 +8765,7 @@ "cli-table3", "columnify", "fastest-levenshtein", + "fs-minipass", "glob", "graceful-fs", "hosted-git-info", @@ -8991,6 +8785,7 @@ "libnpmteam", "libnpmversion", "make-fetch-happen", + "minimatch", "minipass", "minipass-pipeline", "mkdirp", @@ -9007,8 +8802,10 @@ "npm-user-validate", "npmlog", "opener", + "p-map", "pacote", "parse-conflict-json", + "proc-log", "qrcode-terminal", "read", "read-package-json", @@ -9027,83 +8824,86 @@ ], "dev": true, "dependencies": { - "@isaacs/string-locale-compare": "*", - "@npmcli/arborist": "*", - "@npmcli/ci-detect": "*", - "@npmcli/config": "*", - "@npmcli/map-workspaces": "*", - "@npmcli/package-json": "*", - "@npmcli/run-script": "*", - "abbrev": "*", - "ansicolors": "*", - "ansistyles": "*", - "archy": "*", - "cacache": "*", - "chalk": "*", - "chownr": "*", - "cli-columns": "*", - "cli-table3": "*", - "columnify": "*", - "fastest-levenshtein": "*", - "glob": "*", - "graceful-fs": "*", - "hosted-git-info": "*", - "ini": "*", - "init-package-json": "*", - "is-cidr": "*", - "json-parse-even-better-errors": "*", - "libnpmaccess": "*", - "libnpmdiff": "*", - "libnpmexec": "*", - "libnpmfund": "*", - "libnpmhook": "*", - "libnpmorg": "*", - "libnpmpack": "*", - "libnpmpublish": "*", - "libnpmsearch": "*", - "libnpmteam": "*", - "libnpmversion": "*", - "make-fetch-happen": "*", - "minipass": "*", - "minipass-pipeline": "*", - "mkdirp": "*", - "mkdirp-infer-owner": "*", - "ms": "*", - "node-gyp": "*", - "nopt": "*", - "npm-audit-report": "*", - "npm-install-checks": "*", - "npm-package-arg": "*", - "npm-pick-manifest": "*", - "npm-profile": "*", - "npm-registry-fetch": "*", - "npm-user-validate": "*", - "npmlog": "*", - "opener": "*", - "pacote": "*", - "parse-conflict-json": "*", - "qrcode-terminal": "*", - "read": "*", - "read-package-json": "*", - "read-package-json-fast": "*", - "readdir-scoped-modules": "*", - "rimraf": "*", - "semver": "*", - "ssri": "*", - "tar": "*", - "text-table": "*", - "tiny-relative-date": "*", - "treeverse": "*", - "validate-npm-package-name": "*", - "which": "*", - "write-file-atomic": "*" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^5.6.3", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/config": "^4.2.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^4.2.1", + "abbrev": "~1.1.1", + "archy": "~1.0.0", + "cacache": "^16.1.3", + "chalk": "^4.1.2", + "chownr": "^2.0.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.2", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.12", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "graceful-fs": "^4.2.10", + "hosted-git-info": "^5.2.1", + "ini": "^3.0.1", + "init-package-json": "^3.0.2", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^2.3.1", + "libnpmaccess": "^6.0.4", + "libnpmdiff": "^4.0.5", + "libnpmexec": "^4.0.14", + "libnpmfund": "^3.0.5", + "libnpmhook": "^8.0.4", + "libnpmorg": "^4.0.4", + "libnpmpack": "^4.1.3", + "libnpmpublish": "^6.0.5", + "libnpmsearch": "^5.0.4", + "libnpmteam": "^4.0.4", + "libnpmversion": "^3.0.7", + "make-fetch-happen": "^10.2.0", + "minimatch": "^5.1.0", + "minipass": "^3.1.6", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "ms": "^2.1.2", + "node-gyp": "^9.1.0", + "nopt": "^6.0.0", + "npm-audit-report": "^3.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.1.0", + "npm-pick-manifest": "^7.0.2", + "npm-profile": "^6.2.0", + "npm-registry-fetch": "^13.3.1", + "npm-user-validate": "^1.0.1", + "npmlog": "^6.0.2", + "opener": "^1.5.2", + "p-map": "^4.0.0", + "pacote": "^13.6.2", + "parse-conflict-json": "^2.0.2", + "proc-log": "^2.0.1", + "qrcode-terminal": "^0.12.0", + "read": "~1.0.7", + "read-package-json": "^5.0.2", + "read-package-json-fast": "^2.0.3", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.1", + "tar": "^6.1.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^2.0.0", + "validate-npm-package-name": "^4.0.0", + "which": "^2.0.2", + "write-file-atomic": "^4.0.1" }, "bin": { "npm": "bin/npm-cli.js", "npx": "bin/npx-cli.js" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm-run-all": { @@ -9210,8 +9010,18 @@ "node": ">=8" } }, + "node_modules/npm/node_modules/@colors/colors": { + "version": "1.5.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/npm/node_modules/@gar/promisify": { - "version": "1.1.2", + "version": "1.1.3", "dev": true, "inBundle": true, "license": "MIT" @@ -9223,75 +9033,86 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "2.9.0", + "version": "5.6.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@isaacs/string-locale-compare": "^1.0.1", + "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^1.0.2", - "@npmcli/metavuln-calculator": "^1.1.0", - "@npmcli/move-file": "^1.1.0", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^1.0.1", - "@npmcli/package-json": "^1.0.1", - "@npmcli/run-script": "^1.8.2", - "bin-links": "^2.2.1", - "cacache": "^15.0.3", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/query": "^1.2.0", + "@npmcli/run-script": "^4.1.3", + "bin-links": "^3.0.3", + "cacache": "^16.1.3", "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^5.2.1", "json-parse-even-better-errors": "^2.3.1", "json-stringify-nice": "^1.1.4", + "minimatch": "^5.1.0", "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", - "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.5", - "npm-pick-manifest": "^6.1.0", - "npm-registry-fetch": "^11.0.0", - "pacote": "^11.3.5", - "parse-conflict-json": "^1.1.1", - "proc-log": "^1.0.0", + "nopt": "^6.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.2", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", "read-package-json-fast": "^2.0.2", "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", - "semver": "^7.3.5", - "ssri": "^8.0.1", - "treeverse": "^1.0.4", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", "walk-up-path": "^1.0.0" }, "bin": { "arborist": "bin/index.js" }, "engines": { - "node": ">= 10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/ci-detect": { - "version": "1.3.0", + "version": "2.0.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "2.3.0", + "version": "4.2.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "ini": "^2.0.0", + "@npmcli/map-workspaces": "^2.0.2", + "ini": "^3.0.0", "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "semver": "^7.3.4", + "nopt": "^6.0.0", + "proc-log": "^2.0.0", + "read-package-json-fast": "^2.0.3", + "semver": "^7.3.5", "walk-up-path": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "1.0.1", + "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -9299,33 +9120,40 @@ "ansi-styles": "^4.3.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/fs": { - "version": "1.0.0", + "version": "2.1.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@gar/promisify": "^1.0.1", + "@gar/promisify": "^1.1.3", "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "2.1.0", + "version": "3.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { @@ -9344,34 +9172,47 @@ "node": ">= 10" } }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { + "version": "1.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "1.0.4", + "version": "2.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/name-from-folder": "^1.0.1", - "glob": "^7.1.6", - "minimatch": "^3.0.4", - "read-package-json-fast": "^2.0.1" + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "1.1.1", + "version": "3.1.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "cacache": "^15.0.5", - "pacote": "^11.1.11", - "semver": "^7.3.2" + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/move-file": { - "version": "1.1.2", + "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", @@ -9380,7 +9221,7 @@ "rimraf": "^3.0.2" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { @@ -9390,48 +9231,75 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "1.0.2", + "version": "2.0.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "1.0.1", + "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^2.3.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "1.3.2", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "infer-owner": "^1.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "1.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^9.1.0", + "postcss-selector-parser": "^6.0.10", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "1.8.6", + "version": "4.2.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@tootallnate/once": { - "version": "1.1.2", + "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/npm/node_modules/abbrev": { @@ -9453,7 +9321,7 @@ } }, "node_modules/npm/node_modules/agentkeepalive": { - "version": "4.1.4", + "version": "4.2.1", "dev": true, "inBundle": true, "license": "MIT", @@ -9479,29 +9347,13 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "inBundle": true, - "license": "MIT", - "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/npm/node_modules/ansi-regex": { - "version": "2.1.1", + "version": "5.0.1", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/npm/node_modules/ansi-styles": { @@ -9519,18 +9371,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/npm/node_modules/ansicolors": { - "version": "0.3.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/ansistyles": { - "version": "0.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", "dev": true, @@ -9544,7 +9384,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { - "version": "1.1.6", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -9553,7 +9393,7 @@ "readable-stream": "^3.6.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/asap": { @@ -9562,75 +9402,36 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/asn1": { - "version": "0.2.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/npm/node_modules/assert-plus": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/npm/node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/aws-sign2": { - "version": "0.7.0", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/aws4": { - "version": "1.11.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", "dev": true, "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/bcrypt-pbkdf": { - "version": "1.0.2", + "node_modules/npm/node_modules/bin-links": { + "version": "3.0.3", "dev": true, "inBundle": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "tweetnacl": "^0.14.3" + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm/node_modules/bin-links": { - "version": "2.2.1", + "node_modules/npm/node_modules/bin-links/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "cmd-shim": "^4.0.1", - "mkdirp": "^1.0.3", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^2.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^3.0.3" - }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/binary-extensions": { @@ -9643,56 +9444,52 @@ } }, "node_modules/npm/node_modules/brace-expansion": { - "version": "1.1.11", + "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/npm/node_modules/builtins": { - "version": "1.0.3", + "version": "5.0.1", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } }, "node_modules/npm/node_modules/cacache": { - "version": "15.3.0", + "version": "16.1.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" }, "engines": { - "node": ">= 10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/npm/node_modules/caseless": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "license": "Apache-2.0" - }, "node_modules/npm/node_modules/chalk": { "version": "4.1.2", "dev": true, @@ -9740,76 +9537,31 @@ } }, "node_modules/npm/node_modules/cli-columns": { - "version": "3.1.2", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "string-width": "^2.0.0", - "strip-ansi": "^3.0.1" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 4" + "node": ">= 10" } }, "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.0", + "version": "0.6.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "object-assign": "^4.1.0", "string-width": "^4.2.0" }, "engines": { "node": "10.* || >= 12.*" }, "optionalDependencies": { - "colors": "^1.1.2" - } - }, - "node_modules/npm/node_modules/cli-table3/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-table3/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" + "@colors/colors": "1.5.0" } }, "node_modules/npm/node_modules/clone": { @@ -9822,7 +9574,7 @@ } }, "node_modules/npm/node_modules/cmd-shim": { - "version": "4.1.0", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -9830,16 +9582,7 @@ "mkdirp-infer-owner": "^2.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/code-point-at": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/color-convert": { @@ -9869,36 +9612,17 @@ "color-support": "bin.js" } }, - "node_modules/npm/node_modules/colors": { - "version": "1.4.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/npm/node_modules/columnify": { - "version": "1.5.4", + "version": "1.6.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "strip-ansi": "^3.0.0", + "strip-ansi": "^6.0.1", "wcwidth": "^1.0.0" - } - }, - "node_modules/npm/node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=8.0.0" } }, "node_modules/npm/node_modules/common-ancestor-path": { @@ -9919,26 +9643,20 @@ "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/core-util-is": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/dashdash": { - "version": "1.14.1", + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": ">=0.10" + "node": ">=4" } }, "node_modules/npm/node_modules/debug": { - "version": "4.3.2", + "version": "4.3.4", "dev": true, "inBundle": true, "license": "MIT", @@ -9978,15 +9696,6 @@ "clone": "^1.0.2" } }, - "node_modules/npm/node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", "dev": true, @@ -10003,7 +9712,7 @@ } }, "node_modules/npm/node_modules/dezalgo": { - "version": "1.0.3", + "version": "1.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -10013,7 +9722,7 @@ } }, "node_modules/npm/node_modules/diff": { - "version": "5.0.0", + "version": "5.1.0", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -10021,16 +9730,6 @@ "node": ">=0.3.1" } }, - "node_modules/npm/node_modules/ecc-jsbn": { - "version": "0.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/npm/node_modules/emoji-regex": { "version": "8.0.0", "dev": true, @@ -10062,48 +9761,12 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/extend": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/extsprintf": { - "version": "1.3.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.12", "dev": true, "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/forever-agent": { - "version": "0.6.1", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, "node_modules/npm/node_modules/fs-minipass": { "version": "2.1.0", "dev": true, @@ -10129,36 +9792,26 @@ "license": "MIT" }, "node_modules/npm/node_modules/gauge": { - "version": "3.0.1", + "version": "4.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1 || ^2.0.0", - "strip-ansi": "^3.0.1 || ^4.0.0", - "wide-align": "^1.1.2" + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" }, "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/getpass": { - "version": "0.1.7", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/glob": { - "version": "7.2.0", + "version": "8.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -10166,45 +9819,22 @@ "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.8", + "version": "4.2.10", "dev": true, "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/har-schema": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/har-validator": { - "version": "5.1.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/npm/node_modules/has": { "version": "1.0.3", "dev": true, @@ -10233,30 +9863,30 @@ "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "4.0.2", + "version": "5.2.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.5.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.0", + "version": "4.1.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/http-proxy-agent": { - "version": "4.0.1", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" }, @@ -10264,23 +9894,8 @@ "node": ">= 6" } }, - "node_modules/npm/node_modules/http-signature": { - "version": "1.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, "node_modules/npm/node_modules/https-proxy-agent": { - "version": "5.0.0", + "version": "5.0.1", "dev": true, "inBundle": true, "license": "MIT", @@ -10315,12 +9930,15 @@ } }, "node_modules/npm/node_modules/ignore-walk": { - "version": "3.0.4", + "version": "5.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/imurmurhash": { @@ -10364,34 +9982,34 @@ "license": "ISC" }, "node_modules/npm/node_modules/ini": { - "version": "2.0.0", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/init-package-json": { - "version": "2.0.5", + "version": "3.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^8.1.5", + "npm-package-arg": "^9.0.1", "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^4.1.1", + "read": "^1.0.7", + "read-package-json": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/ip": { - "version": "1.1.5", + "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT" @@ -10418,7 +10036,7 @@ } }, "node_modules/npm/node_modules/is-core-module": { - "version": "2.7.0", + "version": "2.10.0", "dev": true, "inBundle": true, "license": "MIT", @@ -10430,12 +10048,12 @@ } }, "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/npm/node_modules/is-lambda": { @@ -10444,47 +10062,18 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/isstream": { - "version": "0.1.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/jsbn": { - "version": "0.1.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "2.3.1", "dev": true, "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/json-schema": { - "version": "0.2.3", - "dev": true, - "inBundle": true - }, - "node_modules/npm/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", "dev": true, @@ -10494,12 +10083,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", "dev": true, @@ -10509,266 +10092,236 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/jsprim": { - "version": "1.4.1", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "node_modules/npm/node_modules/just-diff": { - "version": "3.1.1", + "version": "5.1.1", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { - "version": "3.0.0", + "version": "5.4.1", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "4.0.3", + "version": "6.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0" + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "2.0.4", + "version": "4.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/disparity-colors": "^1.0.1", + "@npmcli/disparity-colors": "^2.0.0", "@npmcli/installed-package-contents": "^1.0.7", "binary-extensions": "^2.2.0", - "diff": "^5.0.0", - "minimatch": "^3.0.4", - "npm-package-arg": "^8.1.4", - "pacote": "^11.3.4", + "diff": "^5.1.0", + "minimatch": "^5.0.1", + "npm-package-arg": "^9.0.1", + "pacote": "^13.6.1", "tar": "^6.1.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "2.0.1", + "version": "4.0.14", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^2.3.0", - "@npmcli/ci-detect": "^1.3.0", - "@npmcli/run-script": "^1.8.4", + "@npmcli/arborist": "^5.6.3", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/fs": "^2.1.1", + "@npmcli/run-script": "^4.2.0", "chalk": "^4.1.0", "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^8.1.2", - "pacote": "^11.3.1", - "proc-log": "^1.0.0", + "npm-package-arg": "^9.0.1", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "proc-log": "^2.0.0", "read": "^1.0.7", "read-package-json-fast": "^2.0.2", + "semver": "^7.3.7", "walk-up-path": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "1.1.0", + "version": "3.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^2.5.0" + "@npmcli/arborist": "^5.6.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmhook": { - "version": "6.0.3", + "version": "8.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "2.0.3", + "version": "4.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "2.0.1", + "version": "4.1.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/run-script": "^1.8.3", - "npm-package-arg": "^8.1.0", - "pacote": "^11.2.6" + "@npmcli/run-script": "^4.1.3", + "npm-package-arg": "^9.0.1", + "pacote": "^13.6.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "4.0.2", + "version": "6.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0", - "semver": "^7.1.3", - "ssri": "^8.0.1" + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "3.1.2", + "version": "5.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "2.0.4", + "version": "4.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "1.2.1", + "version": "3.0.7", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^2.0.7", - "@npmcli/run-script": "^1.8.4", + "@npmcli/git": "^3.0.0", + "@npmcli/run-script": "^4.1.3", "json-parse-even-better-errors": "^2.3.1", - "semver": "^7.3.5", - "stringify-package": "^1.0.1" + "proc-log": "^2.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/lru-cache": { - "version": "6.0.0", + "version": "7.13.2", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "9.1.0", + "version": "10.2.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/npm/node_modules/mime-db": { - "version": "1.49.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/npm/node_modules/mime-types": { - "version": "2.1.32", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.49.0" + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" }, "engines": { - "node": ">= 0.6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/minimatch": { - "version": "3.0.4", + "version": "5.1.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=10" } }, "node_modules/npm/node_modules/minipass": { - "version": "3.1.5", + "version": "3.3.4", "dev": true, "inBundle": true, "license": "ISC", @@ -10792,20 +10345,20 @@ } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "1.4.1", + "version": "2.1.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^3.1.0", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { - "encoding": "^0.1.12" + "encoding": "^0.1.13" } }, "node_modules/npm/node_modules/minipass-flush": { @@ -10906,7 +10459,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/negotiator": { - "version": "0.6.2", + "version": "0.6.3", "dev": true, "inBundle": true, "license": "MIT", @@ -10915,121 +10468,118 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "7.1.2", + "version": "9.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", - "graceful-fs": "^4.2.3", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", + "npmlog": "^6.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 10.12.0" + "node": "^12.22 || ^14.13 || >=16" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/aproba": { - "version": "1.2.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { - "version": "2.7.4", + "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", + "node_modules/npm/node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "number-is-nan": "^1.0.0" + "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": ">=0.10.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/npmlog": { - "version": "4.1.2", + "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/string-width": { - "version": "1.0.2", + "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { + "version": "5.0.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, "node_modules/npm/node_modules/nopt": { - "version": "5.0.0", + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "abbrev": "1" + "abbrev": "^1.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": ">=6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/normalize-package-data": { - "version": "3.0.3", + "version": "4.0.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-audit-report": { - "version": "2.1.5", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -11037,20 +10587,32 @@ "chalk": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-bundled": { - "version": "1.1.2", + "version": "2.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-install-checks": { - "version": "4.0.0", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -11058,7 +10620,7 @@ "semver": "^7.1.1" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-normalize-package-bin": { @@ -11068,76 +10630,100 @@ "license": "ISC" }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "8.1.5", + "version": "9.1.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-packlist": { - "version": "2.2.2", + "version": "5.1.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" }, "bin": { "npm-packlist": "bin/index.js" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "6.1.1", + "version": "7.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^2.0.0", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-profile": { - "version": "5.0.4", + "version": "6.2.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "11.0.0", + "version": "13.3.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-user-validate": { @@ -11147,55 +10733,18 @@ "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/npmlog": { - "version": "5.0.1", + "version": "6.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "are-we-there-yet": "^2.0.0", + "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", + "gauge": "^4.0.3", "set-blocking": "^2.0.0" - } - }, - "node_modules/npm/node_modules/npmlog/node_modules/are-we-there-yet": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/number-is-nan": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm/node_modules/oauth-sign": { - "version": "0.9.0", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/once": { @@ -11232,47 +10781,52 @@ } }, "node_modules/npm/node_modules/pacote": { - "version": "11.3.5", + "version": "13.6.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" + "ssri": "^9.0.0", + "tar": "^6.1.11" }, "bin": { "pacote": "lib/bin.js" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/parse-conflict-json": { - "version": "1.1.1", + "version": "2.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "just-diff": "^3.0.1", - "just-diff-apply": "^3.0.0" + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/path-is-absolute": { @@ -11284,17 +10838,27 @@ "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/performance-now": { - "version": "2.1.0", + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.0.10", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } }, "node_modules/npm/node_modules/proc-log": { - "version": "1.0.0", + "version": "2.0.1", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", @@ -11342,21 +10906,6 @@ "read": "1" } }, - "node_modules/npm/node_modules/psl": { - "version": "1.8.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", "dev": true, @@ -11365,15 +10914,6 @@ "qrcode-terminal": "bin/qrcode-terminal.js" } }, - "node_modules/npm/node_modules/qs": { - "version": "6.5.2", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, "node_modules/npm/node_modules/read": { "version": "1.0.7", "dev": true, @@ -11387,24 +10927,27 @@ } }, "node_modules/npm/node_modules/read-cmd-shim": { - "version": "2.0.0", + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/npm/node_modules/read-package-json": { - "version": "4.1.1", + "version": "5.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^2.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/read-package-json-fast": { @@ -11420,6 +10963,15 @@ "node": ">=10" } }, + "node_modules/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/npm/node_modules/readable-stream": { "version": "3.6.0", "dev": true, @@ -11446,86 +10998,70 @@ "once": "^1.3.0" } }, - "node_modules/npm/node_modules/request": { - "version": "2.88.2", + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", "dev": true, "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, + "license": "MIT", "engines": { - "node": ">= 6" + "node": ">= 4" } }, - "node_modules/npm/node_modules/request/node_modules/form-data": { - "version": "2.3.3", + "node_modules/npm/node_modules/rimraf": { + "version": "3.0.2", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "glob": "^7.1.3" }, - "engines": { - "node": ">= 0.12" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", + "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, "inBundle": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", + "node_modules/npm/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">= 4" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/rimraf": { - "version": "3.0.2", + "node_modules/npm/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "*" } }, "node_modules/npm/node_modules/safe-buffer": { @@ -11552,10 +11088,11 @@ "version": "2.1.2", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.3.5", + "version": "7.3.7", "dev": true, "inBundle": true, "license": "ISC", @@ -11569,6 +11106,18 @@ "node": ">=10" } }, + "node_modules/npm/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", "dev": true, @@ -11576,7 +11125,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/signal-exit": { - "version": "3.0.3", + "version": "3.0.7", "dev": true, "inBundle": true, "license": "ISC" @@ -11592,13 +11141,13 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.6.1", + "version": "2.7.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" }, "engines": { "node": ">= 10.13.0", @@ -11606,14 +11155,14 @@ } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "6.1.0", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { "node": ">= 10" @@ -11646,38 +11195,13 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.10", + "version": "3.0.11", "dev": true, "inBundle": true, "license": "CC0-1.0" }, - "node_modules/npm/node_modules/sshpk": { - "version": "1.16.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/npm/node_modules/ssri": { - "version": "8.0.1", + "version": "9.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -11685,7 +11209,7 @@ "minipass": "^3.1.1" }, "engines": { - "node": ">= 8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/string_decoder": { @@ -11698,55 +11222,29 @@ } }, "node_modules/npm/node_modules/string-width": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/npm/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", + "version": "4.2.3", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "ansi-regex": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/npm/node_modules/stringify-package": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, "node_modules/npm/node_modules/strip-ansi": { - "version": "3.0.1", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/npm/node_modules/supports-color": { @@ -11791,63 +11289,36 @@ "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/tunnel-agent": { - "version": "0.6.0", + "version": "2.0.0", "dev": true, "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, + "license": "ISC", "engines": { - "node": "*" - } - }, - "node_modules/npm/node_modules/tweetnacl": { - "version": "0.14.5", - "dev": true, - "inBundle": true, - "license": "Unlicense" - }, - "node_modules/npm/node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/unique-filename": { - "version": "1.1.1", + "version": "2.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "unique-slug": "^2.0.0" + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/unique-slug": { - "version": "2.0.2", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" - } - }, - "node_modules/npm/node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/util-deprecate": { @@ -11856,15 +11327,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/uuid": { - "version": "3.4.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", "dev": true, @@ -11876,26 +11338,15 @@ } }, "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "3.0.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/npm/node_modules/verror": { - "version": "1.10.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/walk-up-path": { @@ -11929,128 +11380,44 @@ } }, "node_modules/npm/node_modules/wide-align": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/npm/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "3.0.3", + "version": "1.1.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/npm/node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "4.0.2", "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "inBundle": true, + "license": "ISC" }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { "node": ">=0.10.0" } @@ -12073,18 +11440,6 @@ "node": ">= 0.4" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -12147,18 +11502,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.values": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", @@ -12217,6 +11560,99 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -12365,15 +11801,6 @@ "node": ">=0.10.0" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -12556,13 +11983,16 @@ "node": ">=4" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "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": ">=0.10.0" + "node": ">=8" } }, "node_modules/prelude-ls": { @@ -12574,15 +12004,6 @@ "node": ">= 0.8.0" } }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/prettier": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", @@ -12610,6 +12031,26 @@ "node": ">=6.0.0" } }, + "node_modules/prettier-plugin-organize-imports": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.2.tgz", + "integrity": "sha512-e97lE6odGSiHonHJMTYC0q0iLXQyw0u5z/PJpvP/3vRy6/Zi9kLBwFAbEGjDzIowpjQv8b+J04PDamoUSQbzGA==", + "dev": true, + "peerDependencies": { + "@volar/vue-language-plugin-pug": "^1.0.4", + "@volar/vue-typescript": "^1.0.4", + "prettier": ">=2.0", + "typescript": ">=2.9" + }, + "peerDependenciesMeta": { + "@volar/vue-language-plugin-pug": { + "optional": true + }, + "@volar/vue-typescript": { + "optional": true + } + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -12636,15 +12077,11 @@ "react-is": "^16.13.1" } }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true }, "node_modules/punycode": { "version": "2.1.1", @@ -12665,19 +12102,6 @@ "teleport": ">=0.2.0" } }, - "node_modules/query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -12741,32 +12165,28 @@ } }, "node_modules/react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" + "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dev": true, "dependencies": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" + "scheduler": "^0.23.0" }, "peerDependencies": { - "react": "^16.14.0" + "react": "^18.2.0" } }, "node_modules/react-is": { @@ -12941,19 +12361,6 @@ "@babel/runtime": "^7.8.4" } }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", @@ -13001,15 +12408,15 @@ } }, "node_modules/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.1.tgz", + "integrity": "sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA==", "dev": true, "dependencies": { - "rc": "1.2.8" + "@pnpm/npm-conf": "^1.0.4" }, "engines": { - "node": ">=6.0.0" + "node": ">=14" } }, "node_modules/regjsgen": { @@ -13039,24 +12446,6 @@ "jsesc": "bin/jsesc" } }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -13075,12 +12464,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -13133,54 +12516,17 @@ "node": ">=8" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "dependencies": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" + "node": ">=8" } }, "node_modules/retry": { @@ -13307,15 +12653,6 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -13337,13 +12674,12 @@ "dev": true }, "node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "node_modules/schema-utils": { @@ -13402,30 +12738,30 @@ "dev": true }, "node_modules/semantic-release": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-17.3.1.tgz", - "integrity": "sha512-NSdxvnBTklrRBYRexVUx44Hri9sTu9b8x+1HfWDGIWemDTFQfWOTbT1N3oy5l8WcZHodhRvtyI7gm50SfAa3Fg==", + "version": "19.0.5", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-19.0.5.tgz", + "integrity": "sha512-NMPKdfpXTnPn49FDogMBi36SiBfXkSOJqCkk0E4iWOY1tusvvgBwqUmxTX1kmlT6kIYed9YwNKD1sfPpqa5yaA==", "dev": true, "dependencies": { - "@semantic-release/commit-analyzer": "^8.0.0", - "@semantic-release/error": "^2.2.0", - "@semantic-release/github": "^7.0.0", - "@semantic-release/npm": "^7.0.0", - "@semantic-release/release-notes-generator": "^9.0.0", + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/error": "^3.0.0", + "@semantic-release/github": "^8.0.0", + "@semantic-release/npm": "^9.0.0", + "@semantic-release/release-notes-generator": "^10.0.0", "aggregate-error": "^3.0.0", - "cosmiconfig": "^6.0.0", + "cosmiconfig": "^7.0.0", "debug": "^4.0.0", "env-ci": "^5.0.0", - "execa": "^4.0.0", + "execa": "^5.0.0", "figures": "^3.0.0", "find-versions": "^4.0.0", - "get-stream": "^5.0.0", + "get-stream": "^6.0.0", "git-log-parser": "^1.2.0", "hook-std": "^2.0.0", - "hosted-git-info": "^3.0.0", - "lodash": "^4.17.15", - "marked": "^1.0.0", - "marked-terminal": "^4.0.0", + "hosted-git-info": "^4.0.0", + "lodash": "^4.17.21", + "marked": "^4.0.10", + "marked-terminal": "^5.0.0", "micromatch": "^4.0.2", "p-each-series": "^2.1.0", "p-reduce": "^2.0.0", @@ -13434,64 +12770,13 @@ "semver": "^7.3.2", "semver-diff": "^3.1.1", "signale": "^1.2.1", - "yargs": "^15.0.1" - }, - "bin": { - "semantic-release": "bin/semantic-release.js" - }, - "engines": { - "node": ">=10.18" - } - }, - "node_modules/semantic-release/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semantic-release/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "yargs": "^16.2.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semantic-release/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "bin": { + "semantic-release": "bin/semantic-release.js" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=16 || ^14.17" } }, "node_modules/semantic-release/node_modules/figures": { @@ -13509,37 +12794,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semantic-release/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/semantic-release/node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -13548,37 +12806,6 @@ "node": ">=10" } }, - "node_modules/semantic-release/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/semantic-release/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/semantic-release/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/semantic-release/node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -13594,18 +12821,6 @@ "node": ">=10" } }, - "node_modules/semantic-release/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/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -13648,48 +12863,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/shader-loader": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/shader-loader/-/shader-loader-1.3.1.tgz", @@ -13740,285 +12913,76 @@ "rechoir": "^0.6.2" }, "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "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/signale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", - "dev": true, - "dependencies": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "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": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/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/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" + "shjs": "bin/shjs" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "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/signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "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": ">=0.10.0" + "node": ">=8" } }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/snapdragon/node_modules/ms": { + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/source-map": { @@ -14030,20 +12994,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -14054,13 +13004,6 @@ "source-map": "^0.6.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -14124,18 +13067,6 @@ "node": "*" } }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", @@ -14165,102 +13096,6 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", @@ -14295,15 +13130,6 @@ "readable-stream": "^2.0.2" } }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -14457,15 +13283,6 @@ "node": ">=0.10.0" } }, - "node_modules/strip-url-auth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-url-auth/-/strip-url-auth-1.0.1.tgz", - "integrity": "sha512-++41PnXftlL3pvI6lpvhSEO+89g1kIJC4MYB5E6yH+WHa5InIqz51yGd1YOGd7VNSNdoEOfzTMqbAM/2PbgaHQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -14848,56 +13665,16 @@ "node": ">=4" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "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": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0" } }, "node_modules/tr46": { @@ -15041,6 +13818,21 @@ "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", @@ -15054,9 +13846,9 @@ } }, "node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { "node": ">=10" @@ -15070,7 +13862,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true, - "optional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15147,30 +13938,6 @@ "node": ">=4" } }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -15198,54 +13965,6 @@ "node": ">= 4.0.0" } }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", @@ -15281,27 +14000,11 @@ "punycode": "^2.1.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true }, "node_modules/util-deprecate": { "version": "1.0.2", @@ -15346,6 +14049,15 @@ "node": ">=10.13.0" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -15487,12 +14199,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -15543,9 +14249,9 @@ } }, "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "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", @@ -15553,7 +14259,10 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { @@ -15672,10 +14381,13 @@ } }, "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } }, "node_modules/yallist": { "version": "4.0.0", @@ -15693,25 +14405,21 @@ } }, "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/yargs-parser": { @@ -15723,19 +14431,6 @@ "node": ">=10" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -15797,13 +14492,14 @@ } }, "@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dev": true, "requires": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { @@ -15852,17 +14548,18 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz", - "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", + "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" } }, @@ -15906,13 +14603,13 @@ } }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" } }, "@babel/helper-hoist-variables": { @@ -15925,12 +14622,12 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dev": true, "requires": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.21.0" } }, "@babel/helper-module-imports": { @@ -15986,16 +14683,17 @@ } }, "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/helper-simple-access": { @@ -16038,9 +14736,9 @@ "dev": true }, "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "dev": true }, "@babel/helper-wrap-function": { @@ -16078,9 +14776,9 @@ } }, "@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", + "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -16406,6 +15104,15 @@ "@babel/helper-plugin-utils": "^7.14.5" } }, + "@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, "@babel/plugin-transform-arrow-functions": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", @@ -16756,6 +15463,17 @@ "@babel/helper-plugin-utils": "^7.18.9" } }, + "@babel/plugin-transform-typescript": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", + "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + } + }, "@babel/plugin-transform-unicode-escapes": { "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", @@ -16885,6 +15603,17 @@ "@babel/plugin-transform-react-pure-annotations": "^7.18.6" } }, + "@babel/preset-typescript": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", + "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-transform-typescript": "^7.21.0" + } + }, "@babel/runtime": { "version": "7.20.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", @@ -16894,38 +15623,38 @@ } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", + "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", + "@babel/generator": "^7.21.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/parser": "^7.21.0", + "@babel/types": "^7.21.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", + "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", @@ -17352,72 +16081,64 @@ } }, "@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz", + "integrity": "sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==", "dev": true, "requires": { - "@octokit/types": "^6.0.3" + "@octokit/types": "^9.0.0" } }, "@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz", + "integrity": "sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==", "dev": true, "requires": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" } }, "@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz", + "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==", "dev": true, "requires": { - "@octokit/types": "^6.0.3", + "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } } }, "@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz", + "integrity": "sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==", "dev": true, "requires": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", "universal-user-agent": "^6.0.0" } }, "@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==", "dev": true }, "@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz", + "integrity": "sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==", "dev": true, "requires": { - "@octokit/types": "^6.40.0" + "@octokit/types": "^9.0.0" } }, "@octokit/plugin-request-log": { @@ -17428,67 +16149,59 @@ "requires": {} }, "@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz", + "integrity": "sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==", "dev": true, "requires": { - "@octokit/types": "^6.39.0", + "@octokit/types": "^9.0.0", "deprecation": "^2.3.1" } }, "@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz", + "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", "dev": true, "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } } }, "@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "dev": true, "requires": { - "@octokit/types": "^6.0.3", + "@octokit/types": "^9.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" } }, "@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "version": "19.0.7", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.7.tgz", + "integrity": "sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA==", "dev": true, "requires": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/core": "^4.1.0", + "@octokit/plugin-paginate-rest": "^6.0.0", "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + "@octokit/plugin-rest-endpoint-methods": "^7.0.0" } }, "@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", "dev": true, "requires": { - "@octokit/openapi-types": "^12.11.0" + "@octokit/openapi-types": "^16.0.0" } }, "@oozcitak/dom": { @@ -17527,6 +16240,25 @@ "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", "dev": true }, + "@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "requires": { + "graceful-fs": "4.2.10" + } + }, + "@pnpm/npm-conf": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz", + "integrity": "sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==", + "dev": true, + "requires": { + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + } + }, "@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -17538,9 +16270,9 @@ } }, "@rollup/plugin-commonjs": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.0.0.tgz", - "integrity": "sha512-/omBIJG1nHQc+bgkYDuLpb/V08QyutP9amOrJRUSlYJZP+b/68gM//D8sxJe3Yry2QnYIr3QjR3x4AlxJEN3GA==", + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz", + "integrity": "sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -17807,15 +16539,15 @@ } }, "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-14.1.0.tgz", + "integrity": "sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", "is-module": "^1.0.0", "resolve": "^1.19.0" } @@ -17840,90 +16572,45 @@ } }, "@semantic-release/commit-analyzer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-8.0.1.tgz", - "integrity": "sha512-5bJma/oB7B4MtwUkZC2Bf7O1MHfi4gWe4mA+MIQ3lsEV0b422Bvl1z5HRpplDnMLHH3EXMoRdEng6Ds5wUqA3A==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", + "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", "dev": true, "requires": { "conventional-changelog-angular": "^5.0.0", "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.0.7", + "conventional-commits-parser": "^3.2.3", "debug": "^4.0.0", - "import-from": "^3.0.0", + "import-from": "^4.0.0", "lodash": "^4.17.4", "micromatch": "^4.0.2" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.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 - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "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" - } - } } }, "@semantic-release/error": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-2.2.0.tgz", - "integrity": "sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", "dev": true }, "@semantic-release/github": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-7.2.3.tgz", - "integrity": "sha512-lWjIVDLal+EQBzy697ayUNN8MoBpp+jYIyW2luOdqn5XBH4d9bQGfTnjuLyzARZBHejqh932HVjiH/j4+R7VHw==", + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.0.7.tgz", + "integrity": "sha512-VtgicRIKGvmTHwm//iqTh/5NGQwsncOMR5vQK9pMT92Aem7dv37JFKKRuulUsAnUOIlO4G8wH3gPiBAA0iW0ww==", "dev": true, "requires": { - "@octokit/rest": "^18.0.0", - "@semantic-release/error": "^2.2.0", + "@octokit/rest": "^19.0.0", + "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", "bottleneck": "^2.18.1", "debug": "^4.0.0", "dir-glob": "^3.0.0", - "fs-extra": "^10.0.0", + "fs-extra": "^11.0.0", "globby": "^11.0.0", - "http-proxy-agent": "^4.0.0", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "issue-parser": "^6.0.0", "lodash": "^4.17.4", - "mime": "^2.4.3", + "mime": "^3.0.0", "p-filter": "^2.0.0", "p-retry": "^4.0.0", "url-join": "^4.0.0" @@ -17936,9 +16623,9 @@ "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==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -17985,30 +16672,30 @@ } }, "@semantic-release/npm": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-7.1.3.tgz", - "integrity": "sha512-x52kQ/jR09WjuWdaTEHgQCvZYMOTx68WnS+TZ4fya5ZAJw4oRtJETtrvUw10FdfM28d/keInQdc66R1Gw5+OEQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.2.tgz", + "integrity": "sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g==", "dev": true, "requires": { - "@semantic-release/error": "^2.2.0", + "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", "execa": "^5.0.0", - "fs-extra": "^10.0.0", + "fs-extra": "^11.0.0", "lodash": "^4.17.15", "nerf-dart": "^1.0.0", "normalize-url": "^6.0.0", - "npm": "^7.0.0", + "npm": "^8.3.0", "rc": "^1.2.8", "read-pkg": "^5.0.0", - "registry-auth-token": "^4.0.0", + "registry-auth-token": "^5.0.0", "semver": "^7.1.2", "tempy": "^1.0.0" }, "dependencies": { "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==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -18026,12 +16713,6 @@ "universalify": "^2.0.0" } }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, "read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -18068,27 +16749,27 @@ } }, "@semantic-release/release-notes-generator": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-9.0.3.tgz", - "integrity": "sha512-hMZyddr0u99OvM2SxVOIelHzly+PP3sYtJ8XOLHdMp8mrluN5/lpeTnIO27oeCYdupY/ndoGfvrqDjHqkSyhVg==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz", + "integrity": "sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w==", "dev": true, "requires": { "conventional-changelog-angular": "^5.0.0", - "conventional-changelog-writer": "^4.0.0", + "conventional-changelog-writer": "^5.0.0", "conventional-commits-filter": "^2.0.0", - "conventional-commits-parser": "^3.0.0", + "conventional-commits-parser": "^3.2.3", "debug": "^4.0.0", "get-stream": "^6.0.0", - "import-from": "^3.0.0", + "import-from": "^4.0.0", "into-stream": "^6.0.0", "lodash": "^4.17.4", "read-pkg-up": "^7.0.0" } }, "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "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 }, "@tsconfig/node10": { @@ -18183,21 +16864,237 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "@types/react": { + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", + "integrity": "sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/type-utils": "5.53.0", + "@typescript-eslint/utils": "5.53.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz", + "integrity": "sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", + "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz", + "integrity": "sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.53.0", + "@typescript-eslint/utils": "5.53.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", + "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", + "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "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 + }, + "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" + } + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", + "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "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 + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", + "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", "dev": true, "requires": { - "@types/node": "*" + "@typescript-eslint/types": "5.53.0", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } } }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -18432,10 +17329,13 @@ "dev": true }, "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } }, "ansi-regex": { "version": "5.0.1", @@ -18480,24 +17380,6 @@ "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", "dev": true }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true - }, "array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", @@ -18532,12 +17414,6 @@ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true - }, "array.prototype.flat": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", @@ -18581,12 +17457,6 @@ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true - }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -18602,26 +17472,12 @@ "lodash": "^4.17.14" } }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": 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" - } - }, "babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", @@ -18658,31 +17514,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, "before-after-hook": { "version": "2.2.3", @@ -18696,6 +17532,30 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "bottleneck": { "version": "2.19.5", "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", @@ -18713,38 +17573,12 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } + "fill-range": "^7.0.1" } }, "browserslist": { @@ -18759,6 +17593,16 @@ "update-browserslist-db": "^1.0.9" } }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -18771,27 +17615,10 @@ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, "cachedir": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz", - "integrity": "sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true }, "call-bind": { @@ -18867,86 +17694,6 @@ "dev": true, "peer": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -18954,14 +17701,20 @@ "dev": true }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, + "cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true + }, "cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", @@ -18973,31 +17726,27 @@ } }, "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "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": "^6.2.0" + "wrap-ansi": "^7.0.0" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true }, "color-convert": { "version": "1.9.3", @@ -19021,51 +17770,53 @@ "dev": true }, "commitizen": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.2.2.tgz", - "integrity": "sha512-uz+E6lGsDBDI2mYA4QfOxFeqdWUYwR1ky11YmLgg2BnEEP3YbeejpT4lxzGjkYqumnXr062qTOGavR9NtX/iwQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.2.5.tgz", + "integrity": "sha512-9sXju8Qrz1B4Tw7kC5KhnvwYQN88qs2zbiB8oyMsnXZyJ24PPGiNM3nHr73d32dnE3i8VJEXddBFIbOgYSEXtQ==", "dev": true, "requires": { - "cachedir": "2.2.0", + "cachedir": "2.3.0", "cz-conventional-changelog": "3.3.0", "dedent": "0.7.0", - "detect-indent": "6.0.0", - "find-node-modules": "2.0.0", + "detect-indent": "6.1.0", + "find-node-modules": "^2.1.2", "find-root": "1.1.0", - "fs-extra": "8.1.0", - "glob": "7.1.4", - "inquirer": "6.5.2", + "fs-extra": "9.1.0", + "glob": "7.2.3", + "inquirer": "8.2.4", "is-utf8": "^0.2.1", - "lodash": "^4.17.20", - "minimist": "1.2.5", + "lodash": "4.17.21", + "minimist": "1.2.6", "strip-bom": "4.0.0", - "strip-json-comments": "3.0.1" + "strip-json-comments": "3.1.1" }, "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "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" + } }, - "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true } } @@ -19086,18 +17837,22 @@ "dot-prop": "^5.1.0" } }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "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 }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "conventional-changelog-angular": { "version": "5.0.13", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", @@ -19109,15 +17864,14 @@ } }, "conventional-changelog-writer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz", - "integrity": "sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, "requires": { - "compare-func": "^2.0.0", "conventional-commits-filter": "^2.0.7", "dateformat": "^3.0.0", - "handlebars": "^4.7.6", + "handlebars": "^4.7.7", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.15", "meow": "^8.0.0", @@ -19162,12 +17916,6 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true - }, "core-js-compat": { "version": "3.26.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", @@ -19188,7 +17936,6 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, - "optional": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -19238,6 +17985,12 @@ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true + }, "cz-conventional-changelog": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", @@ -19353,12 +18106,6 @@ } } }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true - }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -19383,6 +18130,15 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, "define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -19393,16 +18149,6 @@ "object-keys": "^1.1.1" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, "del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -19469,9 +18215,9 @@ "dev": true }, "detect-indent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", - "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true }, "diff": { @@ -19541,15 +18287,6 @@ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "enhanced-resolve": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", @@ -19719,46 +18456,14 @@ "uri-js": "^4.2.2" } }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, "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" - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true + "color-convert": "^2.0.1" + } }, "color-convert": { "version": "2.0.1", @@ -19904,12 +18609,6 @@ "type-check": "~0.3.2" } }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -19942,16 +18641,6 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -20201,19 +18890,20 @@ } }, "eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-promise": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", - "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", - "dev": true + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "requires": {} }, "eslint-plugin-react": { "version": "7.31.11", @@ -20260,11 +18950,19 @@ } } }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "requires": {} + }, "eslint-plugin-standard": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", "dev": true, + "peer": true, "requires": {} }, "eslint-scope": { @@ -20377,119 +19075,6 @@ "strip-final-newline": "^2.0.0" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "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" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -20499,16 +19084,6 @@ "homedir-polyfill": "^1.0.1" } }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -20520,48 +19095,6 @@ "tmp": "^0.0.33" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -20585,51 +19118,6 @@ "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.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 - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "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" - } - } } }, "fast-json-stable-stringify": { @@ -20678,69 +19166,50 @@ } }, "filename-reserved-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", - "integrity": "sha512-UZArj7+U+2reBBVCvVmRlyq9D7EYQdUtuNN+1iz7pF1jGcJ2L0TjiRCxsTZfj2xFbM4c25uGCUDpKTHA7L2TKg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", "dev": true }, "filenamify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", - "integrity": "sha512-DKVP0WQcB7WaIMSwDETqImRej2fepPqvXQjaVib7LRZn9Rxn5UbvK2tYTqGf1A1DkIprQQkG4XSQXSOZp7Q3GQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", "dev": true, "requires": { - "filename-reserved-regex": "^1.0.0", - "strip-outer": "^1.0.0", + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", "trim-repeated": "^1.0.0" } }, - "filenamify-url": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/filenamify-url/-/filenamify-url-1.0.0.tgz", - "integrity": "sha512-O9K9JcZeF5VdZWM1qR92NSv1WY2EofwudQayPx5dbnnFl9k0IcZha4eV/FGkjnBK+1irOQInij0yiooCHu/0Fg==", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "filenamify": "^1.0.0", - "humanize-url": "^1.0.0" + "to-regex-range": "^5.0.1" } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, "find-node-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.0.0.tgz", - "integrity": "sha512-8MWIBRgJi/WpjjfVXumjPKCtmQ10B+fjx6zmSA+770GMJirLhWIzg8l763rhjl9xaeaHbnxPNRQKq2mgMhr+aw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", + "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", "dev": true, "requires": { - "findup-sync": "^3.0.0", - "merge": "^1.2.1" + "findup-sync": "^4.0.0", + "merge": "^2.1.1" } }, "find-root": { @@ -20769,14 +19238,14 @@ } }, "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", "dev": true, "requires": { "detect-file": "^1.0.0", "is-glob": "^4.0.0", - "micromatch": "^3.0.4", + "micromatch": "^4.0.2", "resolve-dir": "^1.0.1" } }, @@ -20796,21 +19265,6 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -20926,22 +19380,17 @@ "get-intrinsic": "^1.1.1" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true - }, "gh-pages": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.2.0.tgz", - "integrity": "sha512-c+yPkNOPMFGNisYg9r4qvsMIjVYikJv7ImFOhPIVPt0+AcRUamZ7zkGRLHz7FKB0xrlZ+ddSOJsZv9XAFVXLmA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-4.0.0.tgz", + "integrity": "sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==", "dev": true, "requires": { "async": "^2.6.1", "commander": "^2.18.0", "email-addresses": "^3.0.1", - "filenamify-url": "^1.0.0", + "filenamify": "^4.3.0", + "find-cache-dir": "^3.3.1", "fs-extra": "^8.1.0", "globby": "^6.1.0" }, @@ -21113,6 +19562,12 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -21177,38 +19632,6 @@ "has-symbols": "^1.0.2" } }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -21231,12 +19654,12 @@ "dev": true }, "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==", + "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, "requires": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" } @@ -21257,16 +19680,6 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, - "humanize-url": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/humanize-url/-/humanize-url-1.0.1.tgz", - "integrity": "sha512-RtgTzXCPVb/te+e82NDhAc5paj+DuKSratIGAr+v+HZK24eAQ8LMoBGYoL7N/O+9iEc33AKHg45dOMKw3DNldQ==", - "dev": true, - "requires": { - "normalize-url": "^1.0.0", - "strip-url-auth": "^1.0.0" - } - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -21276,6 +19689,12 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -21301,13 +19720,10 @@ } }, "import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", + "dev": true }, "imurmurhash": { "version": "0.1.4", @@ -21344,73 +19760,100 @@ "dev": true }, "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", "dev": true, "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "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" + } + }, + "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" + } + }, + "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 }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "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 }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "tslib": "^2.1.0" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "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": { - "ansi-regex": "^4.1.0" + "has-flag": "^4.0.0" } + }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true } } }, @@ -21447,15 +19890,6 @@ "p-is-promise": "^3.0.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -21481,11 +19915,14 @@ "has-tostringtag": "^1.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "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-callable": { "version": "1.2.7", @@ -21502,15 +19939,6 @@ "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -21520,26 +19948,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -21561,6 +19969,12 @@ "is-extglob": "^2.1.1" } }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -21574,24 +19988,10 @@ "dev": true }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-number-object": { "version": "1.0.7", @@ -21627,13 +20027,10 @@ "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" - } + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true }, "is-reference": { "version": "1.2.1", @@ -21696,6 +20093,12 @@ "text-extensions": "^1.0.0" } }, + "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-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -21729,12 +20132,6 @@ "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 - }, "issue-parser": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", @@ -22052,6 +20449,67 @@ "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", "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" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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 + }, + "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 + }, + "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" + } + } + } + }, "longest": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", @@ -22085,6 +20543,15 @@ "sourcemap-codec": "^1.4.8" } }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -22092,109 +20559,51 @@ "dev": true, "optional": true }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, "map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, "marked": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.9.tgz", - "integrity": "sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw==", + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", + "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", "dev": true }, "marked-terminal": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-4.2.0.tgz", - "integrity": "sha512-DQfNRV9svZf0Dm9Cf5x5xaVJ1+XjxQW6XjFJ5HFkVyK52SDpj5PCBzS5X5r2w9nHr3mlB0T5201UMLue9fmhUw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.1.1.tgz", + "integrity": "sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g==", "dev": true, "requires": { - "ansi-escapes": "^4.3.1", + "ansi-escapes": "^5.0.0", "cardinal": "^2.1.1", - "chalk": "^4.1.0", - "cli-table3": "^0.6.0", - "node-emoji": "^1.10.0", - "supports-hyperlinks": "^2.1.0" + "chalk": "^5.0.0", + "cli-table3": "^0.6.1", + "node-emoji": "^1.11.0", + "supports-hyperlinks": "^2.2.0" }, "dependencies": { "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "type-fest": "^1.0.2" } }, "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" - } - }, - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "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" - } - }, "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true } } @@ -22253,13 +20662,19 @@ "requires": { "lru-cache": "^6.0.0" } + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true } } }, "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", "dev": true }, "merge-stream": { @@ -22275,30 +20690,19 @@ "dev": true }, "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true }, "mime-db": { @@ -22356,16 +20760,6 @@ "kind-of": "^6.0.3" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -22388,36 +20782,23 @@ "dev": true }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, "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 + }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -22481,97 +20862,100 @@ } }, "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true }, "npm": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-7.24.2.tgz", - "integrity": "sha512-120p116CE8VMMZ+hk8IAb1inCPk4Dj3VZw29/n2g6UI77urJKVYb7FZUDW8hY+EBnfsjI/2yrobBgFyzo7YpVQ==", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "*", - "@npmcli/arborist": "*", - "@npmcli/ci-detect": "*", - "@npmcli/config": "*", - "@npmcli/map-workspaces": "*", - "@npmcli/package-json": "*", - "@npmcli/run-script": "*", - "abbrev": "*", - "ansicolors": "*", - "ansistyles": "*", - "archy": "*", - "cacache": "*", - "chalk": "*", - "chownr": "*", - "cli-columns": "*", - "cli-table3": "*", - "columnify": "*", - "fastest-levenshtein": "*", - "glob": "*", - "graceful-fs": "*", - "hosted-git-info": "*", - "ini": "*", - "init-package-json": "*", - "is-cidr": "*", - "json-parse-even-better-errors": "*", - "libnpmaccess": "*", - "libnpmdiff": "*", - "libnpmexec": "*", - "libnpmfund": "*", - "libnpmhook": "*", - "libnpmorg": "*", - "libnpmpack": "*", - "libnpmpublish": "*", - "libnpmsearch": "*", - "libnpmteam": "*", - "libnpmversion": "*", - "make-fetch-happen": "*", - "minipass": "*", - "minipass-pipeline": "*", - "mkdirp": "*", - "mkdirp-infer-owner": "*", - "ms": "*", - "node-gyp": "*", - "nopt": "*", - "npm-audit-report": "*", - "npm-install-checks": "*", - "npm-package-arg": "*", - "npm-pick-manifest": "*", - "npm-profile": "*", - "npm-registry-fetch": "*", - "npm-user-validate": "*", - "npmlog": "*", - "opener": "*", - "pacote": "*", - "parse-conflict-json": "*", - "qrcode-terminal": "*", - "read": "*", - "read-package-json": "*", - "read-package-json-fast": "*", - "readdir-scoped-modules": "*", - "rimraf": "*", - "semver": "*", - "ssri": "*", - "tar": "*", - "text-table": "*", - "tiny-relative-date": "*", - "treeverse": "*", - "validate-npm-package-name": "*", - "which": "*", - "write-file-atomic": "*" - }, - "dependencies": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.19.4.tgz", + "integrity": "sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw==", + "dev": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^5.6.3", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/config": "^4.2.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^4.2.1", + "abbrev": "~1.1.1", + "archy": "~1.0.0", + "cacache": "^16.1.3", + "chalk": "^4.1.2", + "chownr": "^2.0.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.2", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.12", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "graceful-fs": "^4.2.10", + "hosted-git-info": "^5.2.1", + "ini": "^3.0.1", + "init-package-json": "^3.0.2", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^2.3.1", + "libnpmaccess": "^6.0.4", + "libnpmdiff": "^4.0.5", + "libnpmexec": "^4.0.14", + "libnpmfund": "^3.0.5", + "libnpmhook": "^8.0.4", + "libnpmorg": "^4.0.4", + "libnpmpack": "^4.1.3", + "libnpmpublish": "^6.0.5", + "libnpmsearch": "^5.0.4", + "libnpmteam": "^4.0.4", + "libnpmversion": "^3.0.7", + "make-fetch-happen": "^10.2.0", + "minimatch": "^5.1.0", + "minipass": "^3.1.6", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "ms": "^2.1.2", + "node-gyp": "^9.1.0", + "nopt": "^6.0.0", + "npm-audit-report": "^3.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.1.0", + "npm-pick-manifest": "^7.0.2", + "npm-profile": "^6.2.0", + "npm-registry-fetch": "^13.3.1", + "npm-user-validate": "^1.0.1", + "npmlog": "^6.0.2", + "opener": "^1.5.2", + "p-map": "^4.0.0", + "pacote": "^13.6.2", + "parse-conflict-json": "^2.0.2", + "proc-log": "^2.0.1", + "qrcode-terminal": "^0.12.0", + "read": "~1.0.7", + "read-package-json": "^5.0.2", + "read-package-json-fast": "^2.0.3", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.1", + "tar": "^6.1.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^2.0.0", + "validate-npm-package-name": "^4.0.0", + "which": "^2.0.2", + "write-file-atomic": "^4.0.1" + }, + "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "bundled": true, + "dev": true, + "optional": true + }, "@gar/promisify": { - "version": "1.1.2", + "version": "1.1.3", "bundled": true, "dev": true }, @@ -22581,63 +20965,71 @@ "dev": true }, "@npmcli/arborist": { - "version": "2.9.0", + "version": "5.6.3", "bundled": true, "dev": true, "requires": { - "@isaacs/string-locale-compare": "^1.0.1", + "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^1.0.2", - "@npmcli/metavuln-calculator": "^1.1.0", - "@npmcli/move-file": "^1.1.0", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^1.0.1", - "@npmcli/package-json": "^1.0.1", - "@npmcli/run-script": "^1.8.2", - "bin-links": "^2.2.1", - "cacache": "^15.0.3", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/query": "^1.2.0", + "@npmcli/run-script": "^4.1.3", + "bin-links": "^3.0.3", + "cacache": "^16.1.3", "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^5.2.1", "json-parse-even-better-errors": "^2.3.1", "json-stringify-nice": "^1.1.4", + "minimatch": "^5.1.0", "mkdirp": "^1.0.4", "mkdirp-infer-owner": "^2.0.0", - "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.5", - "npm-pick-manifest": "^6.1.0", - "npm-registry-fetch": "^11.0.0", - "pacote": "^11.3.5", - "parse-conflict-json": "^1.1.1", - "proc-log": "^1.0.0", + "nopt": "^6.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.2", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", "read-package-json-fast": "^2.0.2", "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", - "semver": "^7.3.5", - "ssri": "^8.0.1", - "treeverse": "^1.0.4", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", "walk-up-path": "^1.0.0" } }, "@npmcli/ci-detect": { - "version": "1.3.0", + "version": "2.0.0", "bundled": true, "dev": true }, "@npmcli/config": { - "version": "2.3.0", + "version": "4.2.2", "bundled": true, "dev": true, "requires": { - "ini": "^2.0.0", + "@npmcli/map-workspaces": "^2.0.2", + "ini": "^3.0.0", "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "semver": "^7.3.4", + "nopt": "^6.0.0", + "proc-log": "^2.0.0", + "read-package-json-fast": "^2.0.3", + "semver": "^7.3.5", "walk-up-path": "^1.0.0" } }, "@npmcli/disparity-colors": { - "version": "1.0.1", + "version": "2.0.0", "bundled": true, "dev": true, "requires": { @@ -22645,23 +21037,24 @@ } }, "@npmcli/fs": { - "version": "1.0.0", + "version": "2.1.2", "bundled": true, "dev": true, "requires": { - "@gar/promisify": "^1.0.1", + "@gar/promisify": "^1.1.3", "semver": "^7.3.5" } }, "@npmcli/git": { - "version": "2.1.0", + "version": "3.0.2", "bundled": true, "dev": true, "requires": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", @@ -22675,31 +21068,42 @@ "requires": { "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" + }, + "dependencies": { + "npm-bundled": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + } } }, "@npmcli/map-workspaces": { - "version": "1.0.4", + "version": "2.0.4", "bundled": true, "dev": true, "requires": { "@npmcli/name-from-folder": "^1.0.1", - "glob": "^7.1.6", - "minimatch": "^3.0.4", - "read-package-json-fast": "^2.0.1" + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" } }, "@npmcli/metavuln-calculator": { - "version": "1.1.1", + "version": "3.1.1", "bundled": true, "dev": true, "requires": { - "cacache": "^15.0.5", - "pacote": "^11.1.11", - "semver": "^7.3.2" + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" } }, "@npmcli/move-file": { - "version": "1.1.2", + "version": "2.0.1", "bundled": true, "dev": true, "requires": { @@ -22713,12 +21117,12 @@ "dev": true }, "@npmcli/node-gyp": { - "version": "1.0.2", + "version": "2.0.0", "bundled": true, "dev": true }, "@npmcli/package-json": { - "version": "1.0.1", + "version": "2.0.0", "bundled": true, "dev": true, "requires": { @@ -22726,26 +21130,37 @@ } }, "@npmcli/promise-spawn": { - "version": "1.3.2", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { "infer-owner": "^1.0.4" } }, + "@npmcli/query": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "npm-package-arg": "^9.1.0", + "postcss-selector-parser": "^6.0.10", + "semver": "^7.3.7" + } + }, "@npmcli/run-script": { - "version": "1.8.6", + "version": "4.2.1", "bundled": true, "dev": true, "requires": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" } }, "@tootallnate/once": { - "version": "1.1.2", + "version": "2.0.0", "bundled": true, "dev": true }, @@ -22763,7 +21178,7 @@ } }, "agentkeepalive": { - "version": "4.1.4", + "version": "4.2.1", "bundled": true, "dev": true, "requires": { @@ -22781,19 +21196,8 @@ "indent-string": "^4.0.0" } }, - "ajv": { - "version": "6.12.6", - "bundled": true, - "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" - } - }, "ansi-regex": { - "version": "2.1.1", + "version": "5.0.1", "bundled": true, "dev": true }, @@ -22805,16 +21209,6 @@ "color-convert": "^2.0.1" } }, - "ansicolors": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "ansistyles": { - "version": "0.1.3", - "bundled": true, - "dev": true - }, "aproba": { "version": "2.0.0", "bundled": true, @@ -22826,7 +21220,7 @@ "dev": true }, "are-we-there-yet": { - "version": "1.1.6", + "version": "3.0.1", "bundled": true, "dev": true, "requires": { @@ -22839,58 +21233,29 @@ "bundled": true, "dev": true }, - "asn1": { - "version": "0.2.4", - "bundled": true, - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "bundled": true, - "dev": true - }, - "aws4": { - "version": "1.11.0", - "bundled": true, - "dev": true - }, "balanced-match": { "version": "1.0.2", "bundled": true, "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, "bin-links": { - "version": "2.2.1", + "version": "3.0.3", "bundled": true, "dev": true, "requires": { - "cmd-shim": "^4.0.1", - "mkdirp": "^1.0.3", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^2.0.0", + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0", + "read-cmd-shim": "^3.0.0", "rimraf": "^3.0.0", - "write-file-atomic": "^3.0.3" + "write-file-atomic": "^4.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "dev": true + } } }, "binary-extensions": { @@ -22899,49 +21264,46 @@ "dev": true }, "brace-expansion": { - "version": "1.1.11", + "version": "2.0.1", "bundled": true, "dev": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "builtins": { - "version": "1.0.3", + "version": "5.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "semver": "^7.0.0" + } }, "cacache": { - "version": "15.3.0", + "version": "16.1.3", "bundled": true, "dev": true, "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" } }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, "chalk": { "version": "4.1.2", "bundled": true, @@ -22970,52 +21332,21 @@ "dev": true }, "cli-columns": { - "version": "3.1.2", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "string-width": "^2.0.0", - "strip-ansi": "^3.0.1" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" } }, "cli-table3": { - "version": "0.6.0", + "version": "0.6.2", "bundled": true, "dev": true, "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", + "@colors/colors": "1.5.0", "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "string-width": { - "version": "4.2.2", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "clone": { @@ -23024,18 +21355,13 @@ "dev": true }, "cmd-shim": { - "version": "4.1.0", + "version": "5.0.0", "bundled": true, "dev": true, "requires": { "mkdirp-infer-owner": "^2.0.0" } }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, "color-convert": { "version": "2.0.1", "bundled": true, @@ -23054,29 +21380,15 @@ "bundled": true, "dev": true }, - "colors": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true - }, "columnify": { - "version": "1.5.4", + "version": "1.6.0", "bundled": true, "dev": true, "requires": { - "strip-ansi": "^3.0.0", + "strip-ansi": "^6.0.1", "wcwidth": "^1.0.0" } }, - "combined-stream": { - "version": "1.0.8", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, "common-ancestor-path": { "version": "1.0.1", "bundled": true, @@ -23092,21 +21404,13 @@ "bundled": true, "dev": true }, - "core-util-is": { - "version": "1.0.2", + "cssesc": { + "version": "3.0.0", "bundled": true, "dev": true }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "debug": { - "version": "4.3.2", + "version": "4.3.4", "bundled": true, "dev": true, "requires": { @@ -23133,11 +21437,6 @@ "clone": "^1.0.2" } }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, "delegates": { "version": "1.0.0", "bundled": true, @@ -23149,7 +21448,7 @@ "dev": true }, "dezalgo": { - "version": "1.0.3", + "version": "1.0.4", "bundled": true, "dev": true, "requires": { @@ -23158,19 +21457,10 @@ } }, "diff": { - "version": "5.0.0", + "version": "5.1.0", "bundled": true, "dev": true }, - "ecc-jsbn": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "emoji-regex": { "version": "8.0.0", "bundled": true, @@ -23195,36 +21485,11 @@ "bundled": true, "dev": true }, - "extend": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "bundled": true, - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, "fastest-levenshtein": { "version": "1.0.12", "bundled": true, "dev": true }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true - }, "fs-minipass": { "version": "2.1.0", "bundled": true, @@ -23244,61 +21509,37 @@ "dev": true }, "gauge": { - "version": "3.0.1", + "version": "4.0.4", "bundled": true, "dev": true, "requires": { "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1 || ^2.0.0", - "strip-ansi": "^3.0.1 || ^4.0.0", - "wide-align": "^1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "^1.0.0" + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" } }, "glob": { - "version": "7.2.0", + "version": "8.0.3", "bundled": true, "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" } }, "graceful-fs": { - "version": "4.2.8", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "2.0.0", + "version": "4.2.10", "bundled": true, "dev": true }, - "har-validator": { - "version": "5.1.5", - "bundled": true, - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "has": { "version": "1.0.3", "bundled": true, @@ -23318,40 +21559,30 @@ "dev": true }, "hosted-git-info": { - "version": "4.0.2", + "version": "5.2.1", "bundled": true, "dev": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.5.1" } }, "http-cache-semantics": { - "version": "4.1.0", + "version": "4.1.1", "bundled": true, "dev": true }, "http-proxy-agent": { - "version": "4.0.1", + "version": "5.0.0", "bundled": true, "dev": true, "requires": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" } }, - "http-signature": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "https-proxy-agent": { - "version": "5.0.0", + "version": "5.0.1", "bundled": true, "dev": true, "requires": { @@ -23377,11 +21608,11 @@ } }, "ignore-walk": { - "version": "3.0.4", + "version": "5.0.1", "bundled": true, "dev": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "^5.0.1" } }, "imurmurhash": { @@ -23414,26 +21645,26 @@ "dev": true }, "ini": { - "version": "2.0.0", + "version": "3.0.1", "bundled": true, "dev": true }, "init-package-json": { - "version": "2.0.5", + "version": "3.0.2", "bundled": true, "dev": true, "requires": { - "npm-package-arg": "^8.1.5", + "npm-package-arg": "^9.0.1", "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^4.1.1", + "read": "^1.0.7", + "read-package-json": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" } }, "ip": { - "version": "1.1.5", + "version": "2.0.0", "bundled": true, "dev": true }, @@ -23451,7 +21682,7 @@ } }, "is-core-module": { - "version": "2.7.0", + "version": "2.10.0", "bundled": true, "dev": true, "requires": { @@ -23459,7 +21690,7 @@ } }, "is-fullwidth-code-point": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true, "dev": true }, @@ -23468,252 +21699,198 @@ "bundled": true, "dev": true }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, "isexe": { "version": "2.0.0", "bundled": true, "dev": true }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, "json-parse-even-better-errors": { "version": "2.3.1", "bundled": true, "dev": true }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "bundled": true, - "dev": true - }, "json-stringify-nice": { "version": "1.1.4", "bundled": true, "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, "jsonparse": { "version": "1.3.1", "bundled": true, "dev": true }, - "jsprim": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "just-diff": { - "version": "3.1.1", + "version": "5.1.1", "bundled": true, "dev": true }, "just-diff-apply": { - "version": "3.0.0", + "version": "5.4.1", "bundled": true, "dev": true }, "libnpmaccess": { - "version": "4.0.3", + "version": "6.0.4", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0" + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" } }, "libnpmdiff": { - "version": "2.0.4", + "version": "4.0.5", "bundled": true, "dev": true, "requires": { - "@npmcli/disparity-colors": "^1.0.1", + "@npmcli/disparity-colors": "^2.0.0", "@npmcli/installed-package-contents": "^1.0.7", "binary-extensions": "^2.2.0", - "diff": "^5.0.0", - "minimatch": "^3.0.4", - "npm-package-arg": "^8.1.4", - "pacote": "^11.3.4", + "diff": "^5.1.0", + "minimatch": "^5.0.1", + "npm-package-arg": "^9.0.1", + "pacote": "^13.6.1", "tar": "^6.1.0" } }, "libnpmexec": { - "version": "2.0.1", + "version": "4.0.14", "bundled": true, "dev": true, "requires": { - "@npmcli/arborist": "^2.3.0", - "@npmcli/ci-detect": "^1.3.0", - "@npmcli/run-script": "^1.8.4", + "@npmcli/arborist": "^5.6.3", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/fs": "^2.1.1", + "@npmcli/run-script": "^4.2.0", "chalk": "^4.1.0", "mkdirp-infer-owner": "^2.0.0", - "npm-package-arg": "^8.1.2", - "pacote": "^11.3.1", - "proc-log": "^1.0.0", + "npm-package-arg": "^9.0.1", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "proc-log": "^2.0.0", "read": "^1.0.7", "read-package-json-fast": "^2.0.2", + "semver": "^7.3.7", "walk-up-path": "^1.0.0" } }, "libnpmfund": { - "version": "1.1.0", + "version": "3.0.5", "bundled": true, "dev": true, "requires": { - "@npmcli/arborist": "^2.5.0" + "@npmcli/arborist": "^5.6.3" } }, "libnpmhook": { - "version": "6.0.3", + "version": "8.0.4", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" } }, "libnpmorg": { - "version": "2.0.3", + "version": "4.0.4", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" } }, "libnpmpack": { - "version": "2.0.1", + "version": "4.1.3", "bundled": true, "dev": true, "requires": { - "@npmcli/run-script": "^1.8.3", - "npm-package-arg": "^8.1.0", - "pacote": "^11.2.6" + "@npmcli/run-script": "^4.1.3", + "npm-package-arg": "^9.0.1", + "pacote": "^13.6.1" } }, "libnpmpublish": { - "version": "4.0.2", + "version": "6.0.5", "bundled": true, "dev": true, "requires": { - "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0", - "semver": "^7.1.3", - "ssri": "^8.0.1" + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" } }, "libnpmsearch": { - "version": "3.1.2", + "version": "5.0.4", "bundled": true, "dev": true, "requires": { - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" } }, "libnpmteam": { - "version": "2.0.4", + "version": "4.0.4", "bundled": true, "dev": true, "requires": { "aproba": "^2.0.0", - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.0" } }, "libnpmversion": { - "version": "1.2.1", + "version": "3.0.7", "bundled": true, "dev": true, "requires": { - "@npmcli/git": "^2.0.7", - "@npmcli/run-script": "^1.8.4", + "@npmcli/git": "^3.0.0", + "@npmcli/run-script": "^4.1.3", "json-parse-even-better-errors": "^2.3.1", - "semver": "^7.3.5", - "stringify-package": "^1.0.1" + "proc-log": "^2.0.0", + "semver": "^7.3.7" } }, "lru-cache": { - "version": "6.0.0", + "version": "7.13.2", "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } + "dev": true }, "make-fetch-happen": { - "version": "9.1.0", + "version": "10.2.1", "bundled": true, "dev": true, "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", + "negotiator": "^0.6.3", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - } - }, - "mime-db": { - "version": "1.49.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.32", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "1.49.0" + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" } }, "minimatch": { - "version": "3.0.4", + "version": "5.1.0", "bundled": true, "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" } }, "minipass": { - "version": "3.1.5", + "version": "3.3.4", "bundled": true, "dev": true, "requires": { @@ -23729,14 +21906,14 @@ } }, "minipass-fetch": { - "version": "1.4.1", + "version": "2.1.1", "bundled": true, "dev": true, "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", + "encoding": "^0.1.13", + "minipass": "^3.1.6", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^2.1.2" } }, "minipass-flush": { @@ -23807,99 +21984,88 @@ "dev": true }, "negotiator": { - "version": "0.6.2", + "version": "0.6.3", "bundled": true, "dev": true }, "node-gyp": { - "version": "7.1.2", + "version": "9.1.0", "bundled": true, "dev": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", - "graceful-fs": "^4.2.3", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", + "npmlog": "^6.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", "which": "^2.0.2" }, "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "gauge": { - "version": "2.7.4", + "brace-expansion": { + "version": "1.1.11", "bundled": true, "dev": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "is-fullwidth-code-point": { - "version": "1.0.0", + "glob": { + "version": "7.2.3", "bundled": true, "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "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" } }, - "npmlog": { - "version": "4.1.2", + "minimatch": { + "version": "3.1.2", "bundled": true, "dev": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "brace-expansion": "^1.1.7" } }, - "string-width": { - "version": "1.0.2", + "nopt": { + "version": "5.0.0", "bundled": true, "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "abbrev": "1" } } } }, "nopt": { - "version": "5.0.0", + "version": "6.0.0", "bundled": true, "dev": true, "requires": { - "abbrev": "1" + "abbrev": "^1.0.0" } }, "normalize-package-data": { - "version": "3.0.3", + "version": "4.0.1", "bundled": true, "dev": true, "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" } }, "npm-audit-report": { - "version": "2.1.5", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { @@ -23907,15 +22073,22 @@ } }, "npm-bundled": { - "version": "1.1.2", + "version": "2.0.1", "bundled": true, "dev": true, "requires": { - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "dev": true + } } }, "npm-install-checks": { - "version": "4.0.0", + "version": "5.0.0", "bundled": true, "dev": true, "requires": { @@ -23928,56 +22101,73 @@ "dev": true }, "npm-package-arg": { - "version": "8.1.5", + "version": "9.1.0", "bundled": true, "dev": true, "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" } }, "npm-packlist": { - "version": "2.2.2", + "version": "5.1.3", "bundled": true, "dev": true, "requires": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "dev": true + } } }, "npm-pick-manifest": { - "version": "6.1.1", + "version": "7.0.2", "bundled": true, "dev": true, "requires": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^2.0.0", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "dev": true + } } }, "npm-profile": { - "version": "5.0.4", + "version": "6.2.1", "bundled": true, "dev": true, "requires": { - "npm-registry-fetch": "^11.0.0" + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0" } }, "npm-registry-fetch": { - "version": "11.0.0", + "version": "13.3.1", "bundled": true, "dev": true, "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" } }, "npm-user-validate": { @@ -23986,42 +22176,16 @@ "dev": true }, "npmlog": { - "version": "5.0.1", + "version": "6.0.2", "bundled": true, "dev": true, "requires": { - "are-we-there-yet": "^2.0.0", + "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", + "gauge": "^4.0.3", "set-blocking": "^2.0.0" - }, - "dependencies": { - "are-we-there-yet": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - } } }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, "once": { "version": "1.4.0", "bundled": true, @@ -24044,39 +22208,41 @@ } }, "pacote": { - "version": "11.3.5", + "version": "13.6.2", "bundled": true, "dev": true, "requires": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" + "ssri": "^9.0.0", + "tar": "^6.1.11" } }, "parse-conflict-json": { - "version": "1.1.1", + "version": "2.0.2", "bundled": true, "dev": true, "requires": { - "json-parse-even-better-errors": "^2.3.0", - "just-diff": "^3.0.1", - "just-diff-apply": "^3.0.0" + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", + "just-diff-apply": "^5.2.0" } }, "path-is-absolute": { @@ -24084,13 +22250,17 @@ "bundled": true, "dev": true }, - "performance-now": { - "version": "2.1.0", + "postcss-selector-parser": { + "version": "6.0.10", "bundled": true, - "dev": true + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } }, "proc-log": { - "version": "1.0.0", + "version": "2.0.1", "bundled": true, "dev": true }, @@ -24126,26 +22296,11 @@ "read": "1" } }, - "psl": { - "version": "1.8.0", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, "qrcode-terminal": { "version": "0.12.0", "bundled": true, "dev": true }, - "qs": { - "version": "6.5.2", - "bundled": true, - "dev": true - }, "read": { "version": "1.0.7", "bundled": true, @@ -24155,19 +22310,26 @@ } }, "read-cmd-shim": { - "version": "2.0.0", + "version": "3.0.0", "bundled": true, "dev": true }, "read-package-json": { - "version": "4.1.1", + "version": "5.0.2", "bundled": true, "dev": true, "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "dev": true + } } }, "read-package-json-fast": { @@ -24200,67 +22362,51 @@ "once": "^1.3.0" } }, - "request": { - "version": "2.88.2", + "retry": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "rimraf": { + "version": "3.0.2", "bundled": true, "dev": true, "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "glob": "^7.1.3" }, "dependencies": { - "form-data": { - "version": "2.3.3", + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", "bundled": true, "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "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" } }, - "tough-cookie": { - "version": "2.5.0", + "minimatch": { + "version": "3.1.2", "bundled": true, "dev": true, "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "brace-expansion": "^1.1.7" } } } }, - "retry": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "safe-buffer": { "version": "5.2.1", "bundled": true, @@ -24269,14 +22415,25 @@ "safer-buffer": { "version": "2.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "semver": { - "version": "7.3.5", + "version": "7.3.7", "bundled": true, "dev": true, "requires": { "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "set-blocking": { @@ -24285,7 +22442,7 @@ "dev": true }, "signal-exit": { - "version": "3.0.3", + "version": "3.0.7", "bundled": true, "dev": true }, @@ -24295,22 +22452,22 @@ "dev": true }, "socks": { - "version": "2.6.1", + "version": "2.7.0", "bundled": true, "dev": true, "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" } }, "socks-proxy-agent": { - "version": "6.1.0", + "version": "7.0.0", "bundled": true, "dev": true, "requires": { "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" + "debug": "^4.3.3", + "socks": "^2.6.2" } }, "spdx-correct": { @@ -24337,28 +22494,12 @@ } }, "spdx-license-ids": { - "version": "3.0.10", + "version": "3.0.11", "bundled": true, "dev": true }, - "sshpk": { - "version": "1.16.1", - "bundled": true, - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "ssri": { - "version": "8.0.1", + "version": "9.0.1", "bundled": true, "dev": true, "requires": { @@ -24374,40 +22515,21 @@ } }, "string-width": { - "version": "2.1.1", + "version": "4.2.3", "bundled": true, "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "stringify-package": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, "strip-ansi": { - "version": "3.0.1", + "version": "6.0.1", "bundled": true, "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, "supports-color": { @@ -24433,74 +22555,40 @@ }, "text-table": { "version": "0.2.0", - "bundled": true, - "dev": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "treeverse": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } + "bundled": true, + "dev": true }, - "tweetnacl": { - "version": "0.14.5", + "tiny-relative-date": { + "version": "1.3.0", "bundled": true, "dev": true }, - "typedarray-to-buffer": { - "version": "3.1.5", + "treeverse": { + "version": "2.0.0", "bundled": true, - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } + "dev": true }, "unique-filename": { - "version": "1.1.1", + "version": "2.0.1", "bundled": true, "dev": true, "requires": { - "unique-slug": "^2.0.0" + "unique-slug": "^3.0.0" } }, "unique-slug": { - "version": "2.0.2", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { "imurmurhash": "^0.1.4" } }, - "uri-js": { - "version": "4.4.1", - "bundled": true, - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, "util-deprecate": { "version": "1.0.2", "bundled": true, "dev": true }, - "uuid": { - "version": "3.4.0", - "bundled": true, - "dev": true - }, "validate-npm-package-license": { "version": "3.0.4", "bundled": true, @@ -24511,21 +22599,11 @@ } }, "validate-npm-package-name": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "verror": { - "version": "1.10.0", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "builtins": "^5.0.0" } }, "walk-up-path": { @@ -24550,11 +22628,11 @@ } }, "wide-align": { - "version": "1.1.3", + "version": "1.1.5", "bundled": true, "dev": true, "requires": { - "string-width": "^1.0.2 || 2" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "wrappy": { @@ -24563,14 +22641,12 @@ "dev": true }, "write-file-atomic": { - "version": "3.0.3", + "version": "4.0.2", "bundled": true, "dev": true, "requires": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.7" } }, "yallist": { @@ -24663,74 +22739,6 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", @@ -24743,15 +22751,6 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", @@ -24796,15 +22795,6 @@ "es-abstract": "^1.20.4" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "object.values": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", @@ -24848,6 +22838,74 @@ "word-wrap": "^1.2.3" } }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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 + }, + "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 + }, + "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" + } + } + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -24948,12 +23006,6 @@ "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -25084,11 +23136,14 @@ } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true + "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" + } }, "prelude-ls": { "version": "1.2.1", @@ -25096,12 +23151,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "dev": true - }, "prettier": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", @@ -25117,6 +23166,13 @@ "fast-diff": "^1.1.2" } }, + "prettier-plugin-organize-imports": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.2.tgz", + "integrity": "sha512-e97lE6odGSiHonHJMTYC0q0iLXQyw0u5z/PJpvP/3vRy6/Zi9kLBwFAbEGjDzIowpjQv8b+J04PDamoUSQbzGA==", + "dev": true, + "requires": {} + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -25140,15 +23196,11 @@ "react-is": "^16.13.1" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true }, "punycode": { "version": "2.1.1", @@ -25162,16 +23214,6 @@ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "dev": true }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", - "dev": true, - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -25214,26 +23256,22 @@ } }, "react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" + "loose-envify": "^1.1.0" } }, "react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dev": true, "requires": { "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" + "scheduler": "^0.23.0" } }, "react-is": { @@ -25381,16 +23419,6 @@ "@babel/runtime": "^7.8.4" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, "regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", @@ -25423,12 +23451,12 @@ } }, "registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.1.tgz", + "integrity": "sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA==", "dev": true, "requires": { - "rc": "1.2.8" + "@pnpm/npm-conf": "^1.0.4" } }, "regjsgen": { @@ -25454,18 +23482,6 @@ } } }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -25478,12 +23494,6 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -25521,45 +23531,16 @@ "global-dirs": "^0.1.1" } }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "dev": true - }, "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - } } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, "retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -25638,15 +23619,6 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -25665,13 +23637,12 @@ "dev": true }, "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "^1.1.0" } }, "schema-utils": { @@ -25719,30 +23690,30 @@ "dev": true }, "semantic-release": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-17.3.1.tgz", - "integrity": "sha512-NSdxvnBTklrRBYRexVUx44Hri9sTu9b8x+1HfWDGIWemDTFQfWOTbT1N3oy5l8WcZHodhRvtyI7gm50SfAa3Fg==", + "version": "19.0.5", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-19.0.5.tgz", + "integrity": "sha512-NMPKdfpXTnPn49FDogMBi36SiBfXkSOJqCkk0E4iWOY1tusvvgBwqUmxTX1kmlT6kIYed9YwNKD1sfPpqa5yaA==", "dev": true, "requires": { - "@semantic-release/commit-analyzer": "^8.0.0", - "@semantic-release/error": "^2.2.0", - "@semantic-release/github": "^7.0.0", - "@semantic-release/npm": "^7.0.0", - "@semantic-release/release-notes-generator": "^9.0.0", + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/error": "^3.0.0", + "@semantic-release/github": "^8.0.0", + "@semantic-release/npm": "^9.0.0", + "@semantic-release/release-notes-generator": "^10.0.0", "aggregate-error": "^3.0.0", - "cosmiconfig": "^6.0.0", + "cosmiconfig": "^7.0.0", "debug": "^4.0.0", "env-ci": "^5.0.0", - "execa": "^4.0.0", + "execa": "^5.0.0", "figures": "^3.0.0", "find-versions": "^4.0.0", - "get-stream": "^5.0.0", + "get-stream": "^6.0.0", "git-log-parser": "^1.2.0", "hook-std": "^2.0.0", - "hosted-git-info": "^3.0.0", - "lodash": "^4.17.15", - "marked": "^1.0.0", - "marked-terminal": "^4.0.0", + "hosted-git-info": "^4.0.0", + "lodash": "^4.17.21", + "marked": "^4.0.10", + "marked-terminal": "^5.0.0", "micromatch": "^4.0.2", "p-each-series": "^2.1.0", "p-reduce": "^2.0.0", @@ -25751,48 +23722,9 @@ "semver": "^7.3.2", "semver-diff": "^3.1.1", "signale": "^1.2.1", - "yargs": "^15.0.1" + "yargs": "^16.2.0" }, "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -25802,71 +23734,22 @@ "escape-string-regexp": "^1.0.5" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, "hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "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 - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, "semver": { "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "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==", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { - "is-number": "^7.0.0" + "lru-cache": "^6.0.0" } } } @@ -25901,41 +23784,6 @@ "randombytes": "^2.1.0" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } - } - }, "shader-loader": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/shader-loader/-/shader-loader-1.3.1.tgz", @@ -26030,196 +23878,12 @@ } } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "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" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", - "dev": true, - "requires": { - "is-plain-obj": "^1.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==", "dev": true }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -26230,12 +23894,6 @@ "source-map": "^0.6.0" } }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -26295,15 +23953,6 @@ "through": "2" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", @@ -26332,84 +23981,6 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, "stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", @@ -26443,12 +24014,6 @@ "readable-stream": "^2.0.2" } }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "dev": true - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -26563,12 +24128,6 @@ "escape-string-regexp": "^1.0.2" } }, - "strip-url-auth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-url-auth/-/strip-url-auth-1.0.1.tgz", - "integrity": "sha512-++41PnXftlL3pvI6lpvhSEO+89g1kIJC4MYB5E6yH+WHa5InIqz51yGd1YOGd7VNSNdoEOfzTMqbAM/2PbgaHQ==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -26851,46 +24410,13 @@ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "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": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, "tr46": { @@ -26992,6 +24518,15 @@ "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", @@ -27002,17 +24537,16 @@ } }, "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, "typescript": { "version": "4.9.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "dev": true, - "optional": true + "dev": true }, "uglify-js": { "version": "3.17.4", @@ -27061,26 +24595,6 @@ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } - } - }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -27102,46 +24616,6 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true - } - } - }, "update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", @@ -27161,24 +24635,12 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "dev": true - }, "url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "dev": true }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -27219,6 +24681,15 @@ "graceful-fs": "^4.1.2" } }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -27327,12 +24798,6 @@ "is-symbol": "^1.0.3" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -27369,9 +24834,9 @@ } }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "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", @@ -27474,9 +24939,9 @@ "dev": true }, "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { @@ -27492,34 +24957,18 @@ "dev": true }, "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { diff --git a/package.json b/package.json index cd064fb..fba479e 100644 --- a/package.json +++ b/package.json @@ -6,22 +6,8 @@ "license": "BSD-3-Clause", "repository": "Kitware/react-vtk-js", "main": "dist/umd/react-vtk.js", - "module": "dist/esm/index.js", - "source": "src/index.js", - "exports": { - ".": { - "import": "./dist/esm/index.js", - "browser": "./dist/cjs/react-vtk.js", - "umd": "./dist/umd/react-vtk.js", - "package.json": "./package.json", - "default": "./dist/esm/index.js" - }, - "./light": { - "import": "./dist/esm/light.js", - "package.json": "./package.json", - "default": "./dist/esm/light.js" - } - }, + "module": "dist/ts/index.js", + "source": "src/index.ts", "dependencies": { "@babel/runtime": "^7.12.5" }, @@ -46,17 +32,20 @@ "react": "^16.0.0" }, "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/plugin-transform-runtime": "^7.12.10", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", + "@babel/core": "^7.19.1", + "@babel/plugin-transform-runtime": "^7.19.1", + "@babel/preset-env": "^7.19.1", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", "@kitware/vtk.js": "^26.5.3", - "@rollup/plugin-babel": "^5.2.2", - "@rollup/plugin-commonjs": "17.0.0", - "@rollup/plugin-eslint": "^8.0.1", - "@rollup/plugin-node-resolve": "^11.1.0", - "babel-eslint": "^10.0.3", - "commitizen": "4.2.2", + "@rollup/plugin-babel": "^5.3.1", + "@rollup/plugin-commonjs": "22.0.2", + "@rollup/plugin-eslint": "^8.0.2", + "@rollup/plugin-node-resolve": "^14.1.0", + "@types/react": "^18.0.21", + "@typescript-eslint/eslint-plugin": "^5.40.1", + "@typescript-eslint/parser": "^5.40.1", + "commitizen": "4.2.5", "cross-env": "^7.0.2", "eslint": "^6.8.0", "eslint-config-prettier": "^6.7.0", @@ -64,20 +53,22 @@ "eslint-config-standard-react": "^9.2.0", "eslint-plugin-import": "^2.18.2", "eslint-plugin-node": "^11.0.0", - "eslint-plugin-prettier": "^3.1.1", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-react": "^7.17.0", - "eslint-plugin-standard": "^4.0.1", - "gh-pages": "^2.2.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-promise": "^6.0.1", + "eslint-plugin-react": "^7.31.10", + "eslint-plugin-react-hooks": "^4.6.0", + "gh-pages": "^4.0.0", "npm-run-all": "^4.1.5", - "prettier": "^2.0.4", - "react": "^16.13.1", - "react-dom": "^16.13.1", + "prettier": "^2.7.1", + "prettier-plugin-organize-imports": "^3.1.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", "rimraf": "^3.0.2", "rollup": "^2.37.1", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-terser": "^7.0.2", - "semantic-release": "17.3.1" + "semantic-release": "19.0.5", + "typescript": "^4.8.4" }, "files": [ "dist" diff --git a/rollup.config.js b/rollup.config.js index daa7a4b..53933e1 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -8,7 +8,7 @@ import { nodeResolve } from '@rollup/plugin-node-resolve'; const plugins = [ !process.env.NOLINT && eslint({ - include: 'src/**/*.js', + include: 'src/**/*.[tj]sx?', exclude: 'node_modules/**', }), babel({ @@ -36,6 +36,7 @@ const external = [ ]; export default [ + /* { input: 'src/index.js', output: [ @@ -74,4 +75,46 @@ export default [ ...plugins, ], }, + */ + { + input: 'src/index.ts', + output: { + dir: 'dist/ts', + format: 'esm', + preserveModules: true, + preserveModulesRoot: 'src', + }, + external: [ + '@babel/runtime', + '@kitware/vtk.js', + 'prop-types', + 'react', + 'regenerator-runtime', + ], + plugins: [ + nodeResolve({ + browser: true, + preferBuiltins: false, + extensions: ['.js', '.ts', '.tsx'], + }), + commonjs(), + babel({ + include: 'src/**', + exclude: '**/node_modules/**', + extensions: ['.js', '.ts', '.tsx'], + babelHelpers: 'runtime', + presets: [ + '@babel/env', + [ + '@babel/preset-react', + { + runtime: 'automatic', + }, + ], + '@babel/preset-typescript', + ], + plugins: ['@babel/plugin-transform-runtime'], + }), + ], + }, ]; diff --git a/src/core-ts/Algorithm.tsx b/src/core-ts/Algorithm.tsx new file mode 100644 index 0000000..a296388 --- /dev/null +++ b/src/core-ts/Algorithm.tsx @@ -0,0 +1,105 @@ +import { vtkAlgorithm, vtkObject } from '@kitware/vtk.js/interfaces'; +import vtk from '@kitware/vtk.js/vtk'; +import { PropsWithChildren, useCallback, useEffect } from 'react'; +import { VtkConstructor } from '../types'; +import useGetterRef from '../utils-ts/useGetterRef'; +import useUnmount from '../utils-ts/useUnmount'; +import { + DownstreamContext, + useDownstream, + useRepresentation, +} from './contexts'; + +interface Props extends PropsWithChildren { + /** + * Can either be a string containing the name of the vtkClass or a vtk object constructor. + * + * If a string, then that vtk class must be registered (i.e. by import). + */ + vtkClass: string | VtkConstructor; + /** + * The properties and state object to pass to the algorithm. + */ + state?: Record; + /** + * An optional port number for connections. + */ + port?: number; +} + +export default function Algorithm(props: Props) { + const { vtkClass, state, port = 0 } = props; + + const createAlgo = useCallback(() => { + if (typeof vtkClass === 'string') { + return vtk({ vtkClass, ...state }) as vtkAlgorithm & vtkObject; + } + return vtkClass.newInstance(state) as vtkAlgorithm & vtkObject; + }, [vtkClass, state]); + + const [algoRef, getAlgorithm] = useGetterRef(() => createAlgo()); + + const representation = useRepresentation(); + const getDownstream = useDownstream(); + + useEffect(() => { + let algoChanged = false; + + if (!algoRef.current) { + algoRef.current = createAlgo(); + algoChanged = true; + } else if (algoRef.current.getClassName() !== vtkClass) { + const curAlgo = algoRef.current; + const newAlgo = createAlgo(); + + // copy connections over from current algorithm + const nbInputs = curAlgo.getNumberOfInputPorts(); + for (let i = 0; i < nbInputs; i++) { + const connection = curAlgo.getInputConnection(i); + if (connection) { + newAlgo.setInputConnection(connection, i); + } else { + newAlgo.setInputData(curAlgo.getInputData(i), i); + } + } + + algoRef.current = newAlgo; + curAlgo.delete(); + algoChanged = true; + } else if (state) { + const modified = algoRef.current.set(state); + if (modified) { + representation.dataChanged(); + } + } + + if (algoChanged) { + getDownstream().setInputConnection(algoRef.current.getOutputPort(), port); + // if a source algo, then it already produces data + if (algoRef.current.getNumberOfInputPorts() === 0) { + representation.dataAvailable(); + } + } + }, [ + vtkClass, + state, + port, + createAlgo, + algoRef, + representation, + getDownstream, + ]); + + useUnmount(() => { + if (algoRef.current) { + algoRef.current.delete(); + algoRef.current = null; + } + }); + + return ( + + {props.children} + + ); +} diff --git a/src/core-ts/DataArray.ts b/src/core-ts/DataArray.ts new file mode 100644 index 0000000..1f59bfa --- /dev/null +++ b/src/core-ts/DataArray.ts @@ -0,0 +1,125 @@ +import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray'; +import { useEffect } from 'react'; +import { usePrevious } from '../utils-ts/usePrevious'; +import { TYPED_ARRAYS } from '@kitware/vtk.js/macros'; +import { useDataset, useFieldData } from './contexts'; +import { toTypedArray, TypedArrayLookup } from '../utils-ts'; +import { DataArrayValues } from '../types'; +import { vtkRange } from '@kitware/vtk.js/interfaces'; +import useUnmount from '../utils-ts/useUnmount'; +import { useOrderedUnmountEffect } from '../utils-ts/useOrderedUnmountEffect'; +import useGetterRef from '../utils-ts/useGetterRef'; + +// ----- + +interface Props { + /** + * The ID used to identify this component. + */ + name?: string; + + /** + * Typed array name + */ + type?: keyof typeof TYPED_ARRAYS; + + /** + * Actual values to use inside our array ([] | TypedArray | { bvals, dtype, shape }) + */ + values?: DataArrayValues; + + /** + * Number of components / Tuple size + */ + numberOfComponents?: number; + + /** + * Name of the method to call on the fieldData (addArray, setScalars, setVectors...) + */ + registration?: string; + + /** + * Data values range + */ + range?: vtkRange; +} + +const DefaultProps = { + registration: 'addArray', + name: 'scalars', + type: 'Float32Array' as const, + numberOfComponents: 1, +}; + +export default function DataArray(props: Props) { + const prev = usePrevious(props); + + const [daRef, getDataArray] = useGetterRef(() => + vtkDataArray.newInstance({ + name: 'scalars', + empty: true, + }) + ); + + const getFieldData = useFieldData(); + const dataset = useDataset(); + + const { registration = DefaultProps.registration } = props; + + const { + name = DefaultProps.name, + type = DefaultProps.type, + values = [], + numberOfComponents = DefaultProps.numberOfComponents, + range, + } = props; + + useEffect(() => { + const array = getDataArray(); + + let modified = !prev; + + modified = array.setName(name) || modified; + modified = type !== prev?.type || modified; + modified = numberOfComponents !== prev?.numberOfComponents || modified; + modified = values !== prev?.values || modified; + + if (modified) { + const typedArrayClass = TypedArrayLookup[TYPED_ARRAYS[type]]; + array.setData(toTypedArray(values, typedArrayClass), numberOfComponents); + if (range) { + array.setRange(range, numberOfComponents); + } + } + + if (modified) dataset.modified(); + }); + + // register array with the dataset + // cleanup should happend before the polydata is deleted + useOrderedUnmountEffect(() => { + const array = getDataArray(); + const ds = dataset.getDataSet(); + const fieldData = getFieldData(); + + const register = fieldData[registration as keyof typeof fieldData] as ( + da: vtkDataArray + ) => void; + register(array); + + ds.modified(); + + return () => { + fieldData.removeArray(array.getName()); + }; + }, [registration, dataset, getDataArray, getFieldData]); + + useUnmount(() => { + if (daRef.current) { + daRef.current.delete(); + daRef.current = null; + } + }); + + return null; +} diff --git a/src/core-ts/GeometryRepresentation.tsx b/src/core-ts/GeometryRepresentation.tsx new file mode 100644 index 0000000..50809eb --- /dev/null +++ b/src/core-ts/GeometryRepresentation.tsx @@ -0,0 +1,383 @@ +import vtkActor, { + IActorInitialValues, +} from '@kitware/vtk.js/Rendering/Core/Actor'; +import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; +import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'; +import vtkMapper, { + IMapperInitialValues, +} from '@kitware/vtk.js/Rendering/Core/Mapper'; +import { IPropertyInitialValues } from '@kitware/vtk.js/Rendering/Core/Property'; +import { Vector2 } from '@kitware/vtk.js/types'; +import { + forwardRef, + PropsWithChildren, + useEffect, + useImperativeHandle, + useMemo, + useState, +} from 'react'; +import { IRepresentation, IView } from '../types'; +import { compareShallowObject, compareVector2 } from '../utils-ts/comparators'; +import useBooleanAccumulator, { + BooleanAccumulator, +} from '../utils-ts/useBooleanAccumulator'; +import useComparableEffect from '../utils-ts/useComparableEffect'; +import useGetterRef from '../utils-ts/useGetterRef'; +import { + useOrderedUnmountContext, + useOrderedUnmountEffect, +} from '../utils-ts/useOrderedUnmountEffect'; +import useUnmount from '../utils-ts/useUnmount'; +import { DownstreamContext, RepresentationContext, useView } from './contexts'; + +interface Props extends PropsWithChildren { + /** + * The ID used to identify this component. + */ + id?: string; + + /** + * Properties to set to the actor + */ + actor?: IActorInitialValues; + + /** + * Properties to set to the actor + */ + mapper?: IMapperInitialValues; + + /** + * Properties to set to the actor.property + */ + property?: IPropertyInitialValues; + + /** + * Preset name for the lookup table color map + */ + colorMapPreset?: string; + + /** + * Data range use for the colorMap + */ + colorDataRange?: [number, number]; + + /** + * Show/Hide Cube Axes for the given representation + */ + showCubeAxes?: boolean; + + /** + * Configure cube Axes style by overriding the set of properties defined + * https://github.com/Kitware/vtk-js/blob/HEAD/Sources/Rendering/Core/CubeAxesActor/index.js#L703-L719 + * + * TODO fix type + */ + cubeAxesStyle?: Record; + + /** + * Show hide scalar bar for that representation + */ + showScalarBar?: boolean; + + /** + * Use given string as title for scalar bar. By default it is empty (no title). + */ + scalarBarTitle?: boolean; + + /** + * Configure scalar bar style by overriding the set of properties defined + * https://github.com/Kitware/vtk-js/blob/master/Sources/Rendering/Core/ScalarBarActor/index.js#L776-L796 + * + * TODO fix type + */ + scalarBarStyle?: Record; +} + +const DefaultProps = { + colorMapPreset: 'erdc_rainbow_bright', + colorDataRange: [0, 1] as Vector2, +}; + +/* +function useScalarBarActor( + view: IView, + visible: boolean, + lookupTable: Nullable +) { + const scalarBarActor = useRef>(null); + + useEffect(() => { + if (!lookupTable) return; + + scalarBarActor.current = vtkScalarBarActor.newInstance(); + // TODO fixable? + scalarBarActor.current.setScalarsToColors( + lookupTable as unknown as vtkScalarsToColors + ); + scalarBarActor.current.setVisibility(false); + + view.getRenderer().addActor(scalarBarActor.current); + + return () => { + if (scalarBarActor.current) { + view.getRenderer().removeActor(scalarBarActor.current); + scalarBarActor.current.delete(); + scalarBarActor.current = null; + } + }; + }, [view, visible, lookupTable]); + + return scalarBarActor.current; +} + +/* +function useCubeAxes( + view: View, + visible: boolean, + mapper: Nullable +) { + const axes = useRef>(null); + + useEffect(() => { + axes.current = vtkCubeAxesActor.newInstance({ + visibility: false, + dataBounds: [-1, 1, -1, 1, -1, 1], + }); + + axes.current + .getActors() + .forEach(({ setVisibility }) => setVisibility(false)); + + view.getRenderer().addActor(axes.current); + + return () => { + if (axes.current) { + view.getRenderer().removeActor(axes.current); + axes.current.delete(); + axes.current = null; + } + }; + }, []); + + const updateCubeAxes = useCallback(() => { + if (!axes.current || !mapper) return; + + if (mapper.getInputData()) { + const bounds = mapper.getInputData().getBounds(); + if (bounds[0] < bounds[1]) { + axes.current.setDataBounds(bounds); + view.requestRender(); + } + } + }, [mapper, view]); + + useVTKModifiedEffect(mapper, updateCubeAxes); + useVTKModifiedEffect(mapper?.getInputData(), updateCubeAxes); + + return axes.current; +} +*/ + +function useLookupTable(props: Props, trackModified: BooleanAccumulator) { + const [lutRef, getLUT] = useGetterRef(() => + vtkColorTransferFunction.newInstance() + ); + const { + colorDataRange: range = DefaultProps.colorDataRange, + colorMapPreset: presetName = DefaultProps.colorMapPreset, + } = props; + + useComparableEffect( + () => { + if (!presetName || !range) return; + const lut = getLUT(); + const preset = vtkColorMaps.getPresetByName(presetName); + lut.applyColorMap(preset); + lut.setMappingRange(range[0], range[1]); + lut.updateRange(); + trackModified(true); + }, + [presetName, range] as const, + ([curPreset, curRange], [oldPreset, oldRange]) => + curPreset === oldPreset && compareVector2(curRange, oldRange) + ); + + useUnmount(() => { + if (lutRef.current) { + lutRef.current.delete(); + lutRef.current = null; + } + }); + + return getLUT; +} + +function useMapper( + getLookupTable: () => vtkColorTransferFunction, + props: Props, + trackModified: BooleanAccumulator +) { + const [mapperRef, getMapper] = useGetterRef(() => + vtkMapper.newInstance({ + lookupTable: getLookupTable(), + useLookupTableScalarRange: true, + } as IMapperInitialValues) + ); + const { mapper: mapperProps } = props; + + useEffect(() => { + getMapper().setLookupTable(getLookupTable()); + }, [getMapper, getLookupTable]); + + useComparableEffect( + () => { + if (!mapperProps) return; + trackModified(getMapper().set(mapperProps)); + }, + [mapperProps], + ([cur], [prev]) => compareShallowObject(cur, prev) + ); + + useUnmount(() => { + if (mapperRef.current) { + mapperRef.current.delete(); + mapperRef.current = null; + } + }); + + return getMapper; +} + +function useActor( + view: IView, + getMapper: () => vtkMapper, + dataAvailable: boolean, + props: Props, + trackModified: BooleanAccumulator +) { + const [actorRef, getActor] = useGetterRef(() => + vtkActor.newInstance({ visibility: false }) + ); + const { id, actor: actorProps, property: propertyProps } = props; + + useEffect(() => { + getActor().set({ representationID: id }); + }, [id, getActor]); + + useEffect(() => { + getActor().setMapper(getMapper()); + }, [getActor, getMapper]); + + // add to renderer + useOrderedUnmountEffect(() => { + const actor = getActor(); + const renderer = view.getRenderer(); + renderer.addActor(actor); + return () => { + renderer.removeActor(actor); + }; + }, [view, getActor]); + + // set actor props + useComparableEffect( + () => { + if (!actorProps) return; + trackModified(getActor().set(actorProps)); + }, + [actorProps], + ([cur], [prev]) => compareShallowObject(cur, prev) + ); + + // handle visibility as a special case + const { visibility = true } = actorProps ?? {}; + useEffect(() => { + const visible = dataAvailable && visibility; + trackModified(getActor().setVisibility(visible)); + }, [dataAvailable, visibility, getActor, trackModified]); + + // set actor property props + useComparableEffect( + () => { + if (!propertyProps) return; + trackModified(getActor().getProperty().set(propertyProps)); + }, + [propertyProps], + ([cur], [prev]) => compareShallowObject(cur, prev) + ); + + // cleanup on unmount + useUnmount(() => { + if (actorRef.current) { + actorRef.current.delete(); + actorRef.current = null; + } + }); + + return getActor; +} + +export default forwardRef(function GeometryRepresentation( + props: Props, + fwdRef +) { + const OrderedUnmountContext = useOrderedUnmountContext(); + + /* + const { + // showCubeAxes = false, + // showScalarBar = false, + // scalarBarTitle = '', + } = props; + */ + const view = useView(); + const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); + + const [dataAvailable, setDataAvailable] = useState(false); + + const getLookupTable = useLookupTable(props, trackModified); + const getMapper = useMapper(getLookupTable, props, trackModified); + const getActor = useActor( + view, + getMapper, + dataAvailable, + props, + trackModified + ); + + // const scalarBarActor = useScalarBarActor(view, false, lookupTable); + // const cubeAxes = useCubeAxes(view, false, mapper); + + useEffect(() => { + if (view && modifiedRef.current) { + view.requestRender(); + resetModified(); + } + }); + + const representation = useMemo>( + () => ({ + getActor, + getMapper, + dataChanged: () => { + view.requestRender(); + }, + dataAvailable: () => { + setDataAvailable(true); + representation.dataChanged(); + }, + }), + [view, getActor, getMapper] + ); + + useImperativeHandle(fwdRef, () => representation); + + return ( + + + + {props.children} + + + + ); +}); diff --git a/src/core-ts/PointData.tsx b/src/core-ts/PointData.tsx new file mode 100644 index 0000000..c26cbcb --- /dev/null +++ b/src/core-ts/PointData.tsx @@ -0,0 +1,14 @@ +import { PropsWithChildren, useCallback } from 'react'; +import { FieldDataContext, useDataset } from './contexts'; + +export default function PointData(props: PropsWithChildren) { + const dataset = useDataset(); + const getPointData = useCallback(() => { + return dataset.getDataSet().getPointData(); + }, [dataset]); + return ( + + {props.children} + + ); +} diff --git a/src/core-ts/PolyData.tsx b/src/core-ts/PolyData.tsx new file mode 100644 index 0000000..95b70bc --- /dev/null +++ b/src/core-ts/PolyData.tsx @@ -0,0 +1,229 @@ +import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData'; +import { + forwardRef, + PropsWithChildren, + useEffect, + useImperativeHandle, + useMemo, +} from 'react'; +import { + DataArrayValues, + IDataset, + NumpyEncodedArray, + TypedArrayConstructor, +} from '../types'; +import { dataArraySize, toTypedArray } from '../utils-ts'; +import useGetterRef from '../utils-ts/useGetterRef'; +import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; +import { usePrevious } from '../utils-ts/usePrevious'; +import useUnmount from '../utils-ts/useUnmount'; +import { DatasetContext, useDownstream, useRepresentation } from './contexts'; + +interface Props extends PropsWithChildren { + /** + * The ID used to identify this component. + */ + id?: string; + + /** + * downstream connection port + */ + port?: number; + + /** + * xyz coordinates ([] | TypedArray | { bvals, dtype, shape }) + */ + points?: DataArrayValues; + + /** + * verts cells + */ + verts?: + | number[] + | Uint8Array + | Uint8ClampedArray + | Uint16Array + | Uint32Array + | NumpyEncodedArray; + + /** + * lines cells + */ + lines?: + | number[] + | Uint8Array + | Uint8ClampedArray + | Uint16Array + | Uint32Array + | NumpyEncodedArray; + + /** + * polys cells + */ + polys?: + | number[] + | Uint8Array + | Uint8ClampedArray + | Uint16Array + | Uint32Array + | NumpyEncodedArray; + + /** + * strips cells + */ + strips?: + | number[] + | Uint8Array + | Uint8ClampedArray + | Uint16Array + | Uint32Array + | NumpyEncodedArray; + + /** + * Type of connectivity `manual` or implicit such as `points`, `triangles`, `strips` + */ + connectivity?: string; +} + +export default forwardRef(function PolyData(props: Props, fwdRef) { + const { + port = 0, + points = [], + connectivity = 'manual', + verts, + lines, + polys, + strips, + } = props; + const prev = usePrevious(props); + + const [pdRef, getPolyData] = useGetterRef(() => vtkPolyData.newInstance()); + + const OrderedUnmountContext = useOrderedUnmountContext(); + + const representation = useRepresentation(); + const getDownstream = useDownstream(); + + // dataset API + const dataset = useMemo>( + () => ({ + getDataSet: getPolyData, + modified: () => { + const pd = getPolyData(); + pd.modified(); + + const downstream = getDownstream(); + downstream.setInputData(pd, port); + + // Let the representation know that we have data + if (pd.getPoints().getData()) { + representation.dataAvailable(); + } + }, + }), + [getPolyData, getDownstream, representation, port] + ); + + useImperativeHandle(fwdRef, () => dataset); + + // update polydata + useEffect(() => { + const polyData = getPolyData(); + let modified = !prev; + let typedArrayClass: TypedArrayConstructor = Uint32Array; + + // TODO shallow array equals? Or tell developer to do this? + + if (points && points !== prev?.points) { + modified = true; + const array = toTypedArray(points, Float64Array); + polyData.getPoints().setData(array, 3); + + // Adapt cell size + // Max cell size for uint16 is 655356*3=196608. + // switch to uint32array if this is the case. + typedArrayClass = array.length > 196608 ? Uint32Array : Uint16Array; + } + + if (verts && verts !== prev?.verts) { + modified = true; + polyData.getVerts().setData(toTypedArray(verts, typedArrayClass)); + } + + if (lines && lines !== prev?.lines) { + modified = true; + polyData.getLines().setData(toTypedArray(lines, typedArrayClass)); + } + + if (polys && polys !== prev?.polys) { + modified = true; + polyData.getPolys().setData(toTypedArray(polys, typedArrayClass)); + } + + if (strips && strips !== prev?.strips) { + modified = true; + polyData.getStrips().setData(toTypedArray(strips, typedArrayClass)); + } + + const curSize = dataArraySize(points); + const prevSize = prev?.points ? dataArraySize(prev.points) : NaN; + if (connectivity !== prev?.connectivity || curSize !== prevSize) { + modified = true; + const nbPoints = curSize / 3; + switch (connectivity) { + case 'points': + { + const values = new Uint32Array(nbPoints + 1); + values[0] = nbPoints; + for (let i = 0; i < nbPoints; i++) { + values[i + 1] = i; + } + polyData.getVerts().setData(values); + } + break; + case 'triangles': + { + const values = new Uint32Array(nbPoints + nbPoints / 3); + let offset = 0; + for (let i = 0; i < nbPoints; i += 3) { + values[offset++] = 3; + values[offset++] = i + 0; + values[offset++] = i + 1; + values[offset++] = i + 2; + } + polyData.getPolys().setData(values); + } + break; + case 'strips': + { + const values = new Uint32Array(nbPoints + 1); + values[0] = nbPoints; + for (let i = 0; i < nbPoints; i++) { + values[i + 1] = i; + } + polyData.getStrips().setData(values); + } + break; + default: + // do nothing for manual or anything else... + } + } + + if (modified) dataset.modified(); + }); + + useUnmount(() => { + if (pdRef.current) { + pdRef.current.delete(); + pdRef.current = null; + } + }); + + return ( + + + {props.children} + + + ); +}); diff --git a/src/core-ts/View.tsx b/src/core-ts/View.tsx new file mode 100644 index 0000000..18b8933 --- /dev/null +++ b/src/core-ts/View.tsx @@ -0,0 +1,370 @@ +import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; +import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow'; +import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; +import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; +import { Nullable, Vector3 } from '@kitware/vtk.js/types'; +import { + CSSProperties, + forwardRef, + PropsWithChildren, + useCallback, + useEffect, + useImperativeHandle, + useMemo, + useRef, + useState, +} from 'react'; +import { IView } from '../types'; +import useGetterRef from '../utils-ts/useGetterRef'; +import useMount from '../utils-ts/useMount'; +import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; +import useResizeObserver from '../utils-ts/useResizeObserver'; +import useUnmount from '../utils-ts/useUnmount'; +import { ViewContext } from './contexts'; + +const RENDERER_STYLE: CSSProperties = { + position: 'absolute', + width: '100%', + height: '100%', + overflow: 'hidden', +}; + +interface Props extends PropsWithChildren { + /** + * The ID used to identify this component. + */ + id?: string; + + /** + * Allow user to override the default View style { width: '100%', height: '100%' } + */ + style?: CSSProperties; + + /** + * Allow user to provide custom className associated to root element + */ + className?: string; + + /** + * The color of the view background using 3 floating numbers + * between 0-1 of Red, Green, Blue component. + */ + background?: Vector3; + + /** + * Configure the interactions + * TODO fix + */ + interactorSettings?: Record[]; + + /** + * Enable/Disable interaction + */ + interactive?: boolean; + + /** + * Initial camera position from an object in [0,0,0] + */ + cameraPosition?: Vector3; + + /** + * Initial camera focal point from an object in [0,0,0] + */ + cameraFocalPoint?: Vector3; + + /** + * Initial camera position from an object in [0,0,0] + */ + cameraViewUp?: Vector3; + + /** + * Use parallel projection (default: false) + */ + cameraParallelProjection?: boolean; + + /** + * Whether to automatically call resetCamera() (default: true) + * + * When set to true, resetCamera() will be invoked whenever + * a render is requested due to a pipeline update, e.g. the data + * changed or a representation property was modified. + * + * When set to false, the user must explicitly provide camera + * properties. Note that the initial resetCamera() call will + * still occur upon component mount. + */ + autoResetCamera?: boolean; + + /** + * Property use to trigger a render when changing. + + * TODO remove because the recommended way is to use a ref + */ + // triggerRender?: number; + + /** + * Property use to trigger a resetCamera when changing. + * + * TODO remove because the recommended way is to use a ref + */ + // triggerResetCamera?: number; + + /** + * List of picking listeners to bind. By default it is disabled (empty array). + */ + pickingModes?: 'click' | 'hover' | 'select' | 'mouseDown' | 'mouseUp'; + + /** + * User callback function for click + */ + onClick?: () => void; + + /** + * User callback function for mouse down + */ + onMouseDown?: () => void; + + /** + * User callback function for mouse up + */ + onMouseUp?: () => void; + + /** + * User callback function for hover + */ + onHover?: () => void; + + /** + * User callback function for box select + */ + onSelect?: () => void; + + /** + * Defines the tolerance of the click and hover selection. + */ + pointerSize?: number; + + /** + * Show/Hide Cube Axes for the given representation + */ + showCubeAxes?: boolean; + + /** + * Configure cube Axes style by overriding the set of properties defined + * https://github.com/Kitware/vtk-js/blob/HEAD/Sources/Rendering/Core/CubeAxesActor/index.js#L703-L719 + */ + cubeAxesStyle?: Record; + + /** + * Show/Hide orientation axes. + */ + showOrientationAxes?: boolean; +} + +const DefaultProps = { + interactive: true, + autoResetCamera: true, + background: [0.2, 0.3, 0.4], + style: { + width: '100%', + height: '100%', + } as CSSProperties, +}; + +function useRenderWindowView(container: Nullable) { + const [viewRef, getView] = useGetterRef(() => { + return vtkOpenGLRenderWindow.newInstance(); + }); + + useEffect(() => { + const view = getView(); + // FIXME setContainer API should allow null + view.setContainer(container as HTMLElement); + }, [container, getView]); + + useUnmount(() => { + if (viewRef.current) { + viewRef.current.delete(); + viewRef.current = null; + } + }); + + return getView; +} + +function useInteractor( + getRWView: () => vtkOpenGLRenderWindow, + container: Nullable, + props: Props +) { + const [interactorRef, getInteractor] = useGetterRef(() => { + return vtkRenderWindowInteractor.newInstance(); + }); + const { interactive = DefaultProps.interactive } = props; + + useEffect(() => { + if (!container || !interactive) return; + const interactor = getInteractor(); + const rwView = getRWView(); + + interactor.setView(rwView); + interactor.initialize(); + interactor.bindEvents(container); + }, [interactive, container, getRWView, getInteractor]); + + useUnmount(() => { + if (interactorRef.current) { + interactorRef.current.delete(); + interactorRef.current = null; + } + }); + + return getInteractor; +} + +function useRenderWindow( + getRWView: () => vtkOpenGLRenderWindow, + getRenderer: () => vtkRenderer +) { + const [rwRef, getRenderWindow] = useGetterRef(() => { + return vtkRenderWindow.newInstance(); + }); + + useEffect(() => { + const rwView = getRWView(); + const renderWindow = getRenderWindow(); + renderWindow.addView(rwView); + return () => { + renderWindow.removeView(rwView); + }; + }, [getRWView, getRenderWindow]); + + useEffect(() => { + const renderWindow = getRenderWindow(); + const renderer = getRenderer(); + renderWindow.addRenderer(renderer); + return () => { + renderWindow.removeRenderer(renderer); + }; + }, [getRenderer, getRenderWindow]); + + useUnmount(() => { + if (rwRef.current) { + rwRef.current.delete(); + rwRef.current = null; + } + }); + + return getRenderWindow; +} + +function useRenderer(props: Props) { + const [renRef, getRenderer] = useGetterRef(() => vtkRenderer.newInstance()); + const { background = DefaultProps.background } = props; + + useEffect(() => { + const renderer = getRenderer(); + renderer.setBackground(background); + }, [background, getRenderer]); + + useUnmount(() => { + if (renRef.current) { + renRef.current.delete(); + renRef.current = null; + } + }); + + return getRenderer; +} + +export default forwardRef(function View(props: Props, fwdRef) { + const OrderedUnmountContext = useOrderedUnmountContext(); + + const containerRef = useRef>(null); + + const getRWView = useRenderWindowView(containerRef.current); + const getRenderer = useRenderer(props); + // We need to attach the renderWindowView to the renderWindow + // before setting the view onto the interactor. + const getRenderWindow = useRenderWindow(getRWView, getRenderer); + const getInteractor = useInteractor(getRWView, containerRef.current, props); + + const updateViewSize = useCallback(() => { + const container = containerRef.current; + if (!container) return; + + const renderWindowView = getRWView(); + const renderWindow = getRenderWindow(); + const devicePixelRatio = window.devicePixelRatio || 1; + const { width, height } = container.getBoundingClientRect(); + const w = Math.floor(width * devicePixelRatio); + const h = Math.floor(height * devicePixelRatio); + renderWindowView.setSize(Math.max(w, 10), Math.max(h, 10)); + renderWindow.render(); + }, [getRWView, getRenderWindow]); + + const [renderRequested, setRenderRequested] = useState(false); + const { autoResetCamera = DefaultProps.autoResetCamera } = props; + + useEffect(() => { + if (renderRequested) { + if (autoResetCamera) { + getRenderer().resetCamera(); + } + getRenderWindow().render(); + setRenderRequested(false); + } + }, [renderRequested, autoResetCamera, getRenderer, getRenderWindow]); + + const view = useMemo(() => { + return { + getRenderer, + getRenderWindow, + getInteractor, + getAPISpecificRenderWindow: getRWView, + getCamera: () => getRenderer().getActiveCamera(), + /** + * Requests a vtk.js render. + * + This will batch render requests, triggering a single + * vtk.js render once after a react render. + */ + requestRender: () => { + setRenderRequested(true); + }, + /** + * Resets the camera. + */ + resetCamera: () => { + getRenderer().resetCamera(); + getRenderWindow().render(); + }, + }; + }, [getRWView, getRenderer, getRenderWindow, getInteractor]); + + // expose the view as a ref for imperative control + useImperativeHandle(fwdRef, () => view); + + useResizeObserver(containerRef.current, updateViewSize); + useMount(() => updateViewSize()); + + const { style = DefaultProps.style } = props; + const containerStyle = useMemo( + () => ({ + position: 'relative', + ...style, + }), + [style] + ); + + return ( + + +
+
+ {props.children} +
+ + + ); +}); diff --git a/src/core-ts/contexts.ts b/src/core-ts/contexts.ts new file mode 100644 index 0000000..449951f --- /dev/null +++ b/src/core-ts/contexts.ts @@ -0,0 +1,48 @@ +import { createContext, useContext } from 'react'; +import vtkDataSetAttributes from '@kitware/vtk.js/Common/DataModel/DataSetAttributes'; +import vtkFieldData from '@kitware/vtk.js/Common/DataModel/DataSetAttributes/FieldData'; +import vtkDataSet from '@kitware/vtk.js/Common/DataModel/DataSet'; +import { Nullable } from '@kitware/vtk.js/types'; +import { IRepresentation, IView, IDownstream, IDataset } from '../types'; + +export const FieldDataContext = + createContext vtkDataSetAttributes | vtkFieldData>>(null); + +export function useFieldData() { + const fd = useContext(FieldDataContext); + if (!fd) throw new Error('No field data context!'); + return fd as () => T; +} + +export const DatasetContext = createContext>>(null); + +export function useDataset() { + const ds = useContext(DatasetContext); + if (!ds) throw new Error('No dataset context!'); + return ds as IDataset; +} + +export const ViewContext = createContext>(null); + +export function useView() { + const view = useContext(ViewContext); + if (!view) throw new Error('No view context!'); + return view; +} + +export const RepresentationContext = + createContext>(null); + +export function useRepresentation() { + const rep = useContext(RepresentationContext); + if (!rep) throw new Error('No representation context!'); + return rep; +} +export const DownstreamContext = + createContext IDownstream>>(null); + +export function useDownstream() { + const ds = useContext(DownstreamContext); + if (!ds) throw new Error('No downstream context!'); + return ds; +} diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 0000000..9842cf4 --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1,12 @@ +declare module '@kitware/vtk.js/Rendering/Core/CubeAxesActor' { + import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor'; + export interface vtkCubeAxesActor extends vtkActor { + // TODO fill + getGridLines(): boolean; + } + export function newInstance(): vtkCubeAxesActor; + export const vtkCubeAxesActor: { + newInstance: typeof newInstance; + }; + export default vtkCubeAxesActor; +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..d0e87b3 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,11 @@ +import '@kitware/vtk.js/Rendering/Misc/RenderingAPIs'; +import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Volume'; +import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Geometry'; +import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Glyph'; + +export { default as Algorithm } from './core-ts/Algorithm'; +export { default as DataArray } from './core-ts/DataArray'; +export { default as GeometryRepresentation } from './core-ts/GeometryRepresentation'; +export { default as PointData } from './core-ts/PointData'; +export { default as PolyData } from './core-ts/PolyData'; +export { default as View } from './core-ts/View'; diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..dda3dc9 --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,69 @@ +import { vtkObject } from '@kitware/vtk.js/interfaces'; +import vtkAbstractMapper from '@kitware/vtk.js/Rendering/Core/AbstractMapper'; +import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor'; +import vtkCamera from '@kitware/vtk.js/Rendering/Core/Camera'; +import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; +import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow'; +import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; +import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; +import { + Bounds, + TypedArray, + vtkPipelineConnection, +} from '@kitware/vtk.js/types'; +import { NUMPY_DTYPES } from '../utils-ts/numpy'; + +export type NumpyEncodedArray = { + bvals: string; + dtype: keyof typeof NUMPY_DTYPES; + shape: number[]; +}; + +export type DataArrayValues = TypedArray | number[] | NumpyEncodedArray; + +export type TypedArrayConstructor = + | Uint8ArrayConstructor + | Uint16ArrayConstructor + | Uint32ArrayConstructor + | Int8ArrayConstructor + | Int16ArrayConstructor + | Int32ArrayConstructor + | Uint8ClampedArrayConstructor + | Float32ArrayConstructor + | Float64ArrayConstructor; + +export type VtkConstructor> = { + newInstance(initalValues?: P): T; +}; + +export interface IView { + getRenderer(): vtkRenderer; + getRenderWindow(): vtkRenderWindow; + getAPISpecificRenderWindow(): vtkOpenGLRenderWindow; + getInteractor(): vtkRenderWindowInteractor; + getCamera(): vtkCamera; + requestRender(): void; + resetCamera(boundsToUse?: Bounds): void; +} + +export interface IRepresentation< + A extends vtkActor = vtkActor, + M extends vtkAbstractMapper = vtkAbstractMapper +> { + dataAvailable(): void; + dataChanged(): void; + getActor(): A; + getMapper(): M; +} + +// There is no sufficient type that overlaps classes like +// vtkMapper and vtkAlgorithm. vtkMapper is technically a vtkAlgorithm... +export interface IDownstream { + setInputData(obj: T, port?: number): void; + setInputConnection(conn: vtkPipelineConnection, port?: number): void; +} + +export interface IDataset { + getDataSet(): T; + modified(): void; +} diff --git a/src/utils-ts/comparators.ts b/src/utils-ts/comparators.ts new file mode 100644 index 0000000..1e18456 --- /dev/null +++ b/src/utils-ts/comparators.ts @@ -0,0 +1,51 @@ +import { Vector2 } from '@kitware/vtk.js/types'; + +export function valueCompareFirst(cur: T, prev: T) { + return !!cur[0] && cur[0] !== prev[0]; +} + +export function shallowArrayCompareFirst( + cur: T, + prev: T +) { + const [a] = cur; + const [b] = prev; + if ((a && !b) || (!a && b)) return false; + if (a.length !== b.length) return false; + for (let i = 0; i < a.length; i++) { + if (a[i] !== b[i]) return false; + } + return true; +} + +/** + * Compares two objects. + */ +export function compareShallowObject( + cur: T | undefined, + prev: T | undefined +) { + if (!cur || typeof cur !== 'object') return false; + if (!prev || typeof prev !== 'object') return false; + if (cur === prev) return true; + + const keys1 = Object.keys(cur); + const keys2 = Object.keys(prev); + const keyset2 = new Set(keys2); + + return ( + keys1.length === keys2.length && + keys1.every( + (k) => keyset2.has(k) && cur[k as keyof T] === prev[k as keyof T] + ) + ); +} + +export function compareVector2( + cur: Vector2 | undefined, + prev: Vector2 | undefined +) { + if (cur === prev) return true; + if (!cur || !prev) return false; + return cur[0] === prev[0] && cur[1] === prev[1]; +} diff --git a/src/utils-ts/index.ts b/src/utils-ts/index.ts new file mode 100644 index 0000000..ace0148 --- /dev/null +++ b/src/utils-ts/index.ts @@ -0,0 +1,37 @@ +import { toArrayBuffer } from '@kitware/vtk.js/Common/Core/Base64'; +import { TYPED_ARRAYS } from '@kitware/vtk.js/macros'; +import { DataArrayValues, TypedArrayConstructor } from '../types'; +import { NUMPY_DTYPES } from './numpy'; + +export const TypedArrayLookup: Record = { + [TYPED_ARRAYS.Uint8Array]: Uint8Array, + [TYPED_ARRAYS.Uint16Array]: Uint16Array, + [TYPED_ARRAYS.Uint32Array]: Uint32Array, + [TYPED_ARRAYS.Int8Array]: Int8Array, + [TYPED_ARRAYS.Int16Array]: Int16Array, + [TYPED_ARRAYS.Int32Array]: Int32Array, + [TYPED_ARRAYS.Float32Array]: Float32Array, + [TYPED_ARRAYS.Float64Array]: Float64Array, +}; + +export function dataArraySize(v: DataArrayValues) { + if ('length' in v) return v.length; + return v.shape.reduce((size, dim) => size * dim, 1); +} + +export function toTypedArray( + values: DataArrayValues, + constructor: TypedArrayConstructor +) { + if (Array.isArray(values)) { + return constructor.from(values); + } + + if ('dtype' in values) { + const { bvals, dtype } = values; + const arrayBuffer = toArrayBuffer(bvals); + return new NUMPY_DTYPES[dtype](arrayBuffer); + } + + return values; +} diff --git a/src/utils-ts/numpy.ts b/src/utils-ts/numpy.ts new file mode 100644 index 0000000..8b297b6 --- /dev/null +++ b/src/utils-ts/numpy.ts @@ -0,0 +1,10 @@ +export const NUMPY_DTYPES = { + int32: Int32Array, + int16: Int16Array, + int8: Int8Array, + uint32: Uint32Array, + uint16: Uint16Array, + uint8: Uint8Array, + float32: Float32Array, + float64: Float64Array, +}; diff --git a/src/utils-ts/useBooleanAccumulator.ts b/src/utils-ts/useBooleanAccumulator.ts new file mode 100644 index 0000000..498a0a5 --- /dev/null +++ b/src/utils-ts/useBooleanAccumulator.ts @@ -0,0 +1,20 @@ +import { useCallback, useRef } from 'react'; + +export type BooleanAccumulator = (b: boolean) => void; + +/** + * Simple helper to accumulate a boolean result. + */ +export default function useBooleanAccumulator() { + const valueRef = useRef(false); + + const reset = useCallback(() => { + valueRef.current = false; + }, []); + + const accumulate = useCallback((b: boolean) => { + valueRef.current ||= b; + }, []); + + return [valueRef, accumulate, reset] as const; +} diff --git a/src/utils-ts/useComparableEffect.ts b/src/utils-ts/useComparableEffect.ts new file mode 100644 index 0000000..4eafd00 --- /dev/null +++ b/src/utils-ts/useComparableEffect.ts @@ -0,0 +1,23 @@ +import { DependencyList, EffectCallback, useEffect, useRef } from 'react'; + +type Comparator = (cur: T, prev: T) => boolean; + +/** + * useEffect, but with a custom dependency array comparator. + * + * If the comparator returns false, the effect is run. + */ +export default function useComparableEffect< + D extends DependencyList = DependencyList +>(callback: EffectCallback, deps: D, comparator: Comparator) { + const dependencies = useRef(); + if ( + dependencies.current === undefined || + !comparator(dependencies.current, deps) + ) { + dependencies.current = deps; + } + + // eslint-disable-next-line react-hooks/exhaustive-deps + useEffect(callback, dependencies.current); +} diff --git a/src/utils-ts/useGetterRef.ts b/src/utils-ts/useGetterRef.ts new file mode 100644 index 0000000..643bc7e --- /dev/null +++ b/src/utils-ts/useGetterRef.ts @@ -0,0 +1,14 @@ +import { useRef } from 'react'; + +export default function useGetterRef(initFunc: () => T) { + const ref = useRef(null); + const getterRef = useRef(() => { + if (ref.current === null) { + ref.current = initFunc(); + } + return ref.current; + }); + + // these values are referentially stable + return [ref, getterRef.current] as const; +} diff --git a/src/utils-ts/useMount.ts b/src/utils-ts/useMount.ts new file mode 100644 index 0000000..56a8e50 --- /dev/null +++ b/src/utils-ts/useMount.ts @@ -0,0 +1,8 @@ +import { EffectCallback, useEffect } from 'react'; + +export default function useMount(cb: EffectCallback) { + useEffect(() => { + cb(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); +} diff --git a/src/utils-ts/useOrderedUnmountEffect.tsx b/src/utils-ts/useOrderedUnmountEffect.tsx new file mode 100644 index 0000000..75a3d1e --- /dev/null +++ b/src/utils-ts/useOrderedUnmountEffect.tsx @@ -0,0 +1,126 @@ +import { Nullable } from '@kitware/vtk.js/types'; +import { + createContext, + DependencyList, + EffectCallback, + PropsWithChildren, + ReactElement, + useContext, + useEffect, + useRef, +} from 'react'; + +type Destructor = () => void; + +interface IOrderedUnmountContext { + callbacks: EffectCallback[]; + children: IOrderedUnmountContext[]; + Provider(props: PropsWithChildren): ReactElement; + addChildContext(child: IOrderedUnmountContext): void; + destroy(): void; + wrap(cb: Destructor | void): Destructor; +} + +const OrderedUnmountContext = + createContext>(null); + +// eslint-disable-next-line @typescript-eslint/no-empty-function +const noop = () => {}; + +/** + * This registers an Ordered Unmount Context. + * + * This must go before any effect (that has cleanup) in a component + * in order to work effectively! + * + * This context must be used in the following manner: + * // must be prior to any effects with cleanup that need to run + * // after children effects are cleaned up. + * const OrderedUnmountContext = useOrderedUnmountEffectContext(); + * ...other effects + * return ( + * + * ... + * + * ) + * + * If a component provides an object to descendants and expects descendants to + * clean up registrations on the object, then the component should create + * an ordered unmount context and the descendants that consume an injected + * object should clean up registrations inside an useOrderedUnmountEffect(). + */ +export function useOrderedUnmountContext() { + const parentContext = useContext(OrderedUnmountContext); + const context = useRef>(null); + + if (!context.current) { + context.current = { + callbacks: [], + children: [], + Provider: (props: PropsWithChildren) => { + return ( + + {props.children ?? null} + + ); + }, + addChildContext: (childContext: IOrderedUnmountContext) => { + if (!context.current) return; + context.current.children.push(childContext); + }, + destroy: () => { + if (!context.current) return; + const { callbacks, children } = context.current; + for (let i = 0; i < children.length; i++) { + children[i].destroy(); + } + for (let i = 0; i < callbacks.length; i++) { + callbacks[i](); + } + context.current.children.length = 0; + context.current.callbacks.length = 0; + }, + wrap: (cleanup: Destructor | void) => { + if (!context.current || !cleanup) return noop; + const { callbacks } = context.current; + callbacks.push(cleanup); + return () => { + const idx = callbacks.indexOf(cleanup); + // do not call if already removed from callbacks array + if (idx > -1) { + callbacks.splice(idx, 1); + cleanup(); + } + }; + }, + }; + + if (context.current && parentContext) + parentContext.addChildContext(context.current); + } + + // unmount + useEffect(() => { + const ctxt = context.current; + return () => { + if (ctxt) ctxt.destroy(); + }; + }, []); + + return context.current; +} + +export function useOrderedUnmountEffect( + callback: EffectCallback, + dependencies: DependencyList +) { + const context = useContext(OrderedUnmountContext); + + useEffect(() => { + if (context) { + return context.wrap(callback()); + } + return callback(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, dependencies); +} diff --git a/src/utils-ts/usePrevious.ts b/src/utils-ts/usePrevious.ts new file mode 100644 index 0000000..1188453 --- /dev/null +++ b/src/utils-ts/usePrevious.ts @@ -0,0 +1,11 @@ +import { useEffect, useRef } from 'react'; + +export function usePrevious(val: T) { + const ref = useRef(undefined); + + useEffect(() => { + ref.current = val; + }); + + return ref.current; +} diff --git a/src/utils-ts/useResizeObserver.ts b/src/utils-ts/useResizeObserver.ts new file mode 100644 index 0000000..4e1f063 --- /dev/null +++ b/src/utils-ts/useResizeObserver.ts @@ -0,0 +1,37 @@ +import { Nullable } from '@kitware/vtk.js/types'; +import { useEffect, useRef } from 'react'; +import useUnmount from './useUnmount'; + +export default function useResizeObserver( + el: Nullable, + callback: (entry: ResizeObserverEntry) => void +) { + const cbRef = useRef(callback); + cbRef.current = callback; + + const handleResize = (entry: ResizeObserverEntry) => cbRef.current(entry); + + const observer = useRef>(null); + if (!observer.current) { + observer.current = new ResizeObserver((entries) => { + if (entries.length === 1) { + handleResize(entries[0]); + } + }); + } + + useEffect(() => { + const obs = observer.current; + if (!obs || !el) return; + obs.observe(el); + return () => { + obs.unobserve(el); + }; + }, [el]); + + useUnmount(() => { + if (observer.current) { + observer.current.disconnect(); + } + }); +} diff --git a/src/utils-ts/useUnmount.ts b/src/utils-ts/useUnmount.ts new file mode 100644 index 0000000..b6e5a35 --- /dev/null +++ b/src/utils-ts/useUnmount.ts @@ -0,0 +1,11 @@ +import { useEffect, useRef } from 'react'; + +export default function useUnmount(func: () => void) { + const funcRef = useRef(func); + funcRef.current = func; + useEffect(() => { + return () => { + funcRef.current(); + }; + }, []); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..2bea2a2 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "es2017", + "module": "esnext", + "moduleResolution": "node", + "noEmitOnError": true, + "lib": ["es2017", "DOM"], + "strict": true, + "esModuleInterop": false, + "outDir": "dist/ts", + "rootDir": "./", + "jsx": "react-jsx", + "allowSyntheticDefaultImports": true + }, + "include": ["./src/**/*.ts", "./src/**/*.tsx"] + } + \ No newline at end of file diff --git a/usage/package-lock.json b/usage/package-lock.json index 0feae54..76261d0 100644 --- a/usage/package-lock.json +++ b/usage/package-lock.json @@ -24,17 +24,20 @@ "@babel/runtime": "^7.12.5" }, "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/plugin-transform-runtime": "^7.12.10", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", + "@babel/core": "^7.19.1", + "@babel/plugin-transform-runtime": "^7.19.1", + "@babel/preset-env": "^7.19.1", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", "@kitware/vtk.js": "^26.5.3", - "@rollup/plugin-babel": "^5.2.2", - "@rollup/plugin-commonjs": "17.0.0", - "@rollup/plugin-eslint": "^8.0.1", - "@rollup/plugin-node-resolve": "^11.1.0", - "babel-eslint": "^10.0.3", - "commitizen": "4.2.2", + "@rollup/plugin-babel": "^5.3.1", + "@rollup/plugin-commonjs": "22.0.2", + "@rollup/plugin-eslint": "^8.0.2", + "@rollup/plugin-node-resolve": "^14.1.0", + "@types/react": "^18.0.21", + "@typescript-eslint/eslint-plugin": "^5.40.1", + "@typescript-eslint/parser": "^5.40.1", + "commitizen": "4.2.5", "cross-env": "^7.0.2", "eslint": "^6.8.0", "eslint-config-prettier": "^6.7.0", @@ -42,20 +45,22 @@ "eslint-config-standard-react": "^9.2.0", "eslint-plugin-import": "^2.18.2", "eslint-plugin-node": "^11.0.0", - "eslint-plugin-prettier": "^3.1.1", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-react": "^7.17.0", - "eslint-plugin-standard": "^4.0.1", - "gh-pages": "^2.2.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-promise": "^6.0.1", + "eslint-plugin-react": "^7.31.10", + "eslint-plugin-react-hooks": "^4.6.0", + "gh-pages": "^4.0.0", "npm-run-all": "^4.1.5", - "prettier": "^2.0.4", - "react": "^16.13.1", - "react-dom": "^16.13.1", + "prettier": "^2.7.1", + "prettier-plugin-organize-imports": "^3.1.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", "rimraf": "^3.0.2", "rollup": "^2.37.1", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-terser": "^7.0.2", - "semantic-release": "17.3.1" + "semantic-release": "19.0.5", + "typescript": "^4.8.4" }, "peerDependencies": { "@kitware/vtk.js": "^26.5.3", @@ -2232,18 +2237,21 @@ "react-vtk-js": { "version": "file:..", "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-transform-runtime": "^7.12.10", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", + "@babel/core": "^7.19.1", + "@babel/plugin-transform-runtime": "^7.19.1", + "@babel/preset-env": "^7.19.1", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", "@babel/runtime": "^7.12.5", "@kitware/vtk.js": "^26.5.3", - "@rollup/plugin-babel": "^5.2.2", - "@rollup/plugin-commonjs": "17.0.0", - "@rollup/plugin-eslint": "^8.0.1", - "@rollup/plugin-node-resolve": "^11.1.0", - "babel-eslint": "^10.0.3", - "commitizen": "4.2.2", + "@rollup/plugin-babel": "^5.3.1", + "@rollup/plugin-commonjs": "22.0.2", + "@rollup/plugin-eslint": "^8.0.2", + "@rollup/plugin-node-resolve": "^14.1.0", + "@types/react": "^18.0.21", + "@typescript-eslint/eslint-plugin": "^5.40.1", + "@typescript-eslint/parser": "^5.40.1", + "commitizen": "4.2.5", "cross-env": "^7.0.2", "eslint": "^6.8.0", "eslint-config-prettier": "^6.7.0", @@ -2251,20 +2259,22 @@ "eslint-config-standard-react": "^9.2.0", "eslint-plugin-import": "^2.18.2", "eslint-plugin-node": "^11.0.0", - "eslint-plugin-prettier": "^3.1.1", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-react": "^7.17.0", - "eslint-plugin-standard": "^4.0.1", - "gh-pages": "^2.2.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-promise": "^6.0.1", + "eslint-plugin-react": "^7.31.10", + "eslint-plugin-react-hooks": "^4.6.0", + "gh-pages": "^4.0.0", "npm-run-all": "^4.1.5", - "prettier": "^2.0.4", - "react": "^16.13.1", - "react-dom": "^16.13.1", + "prettier": "^2.7.1", + "prettier-plugin-organize-imports": "^3.1.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", "rimraf": "^3.0.2", "rollup": "^2.37.1", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-terser": "^7.0.2", - "semantic-release": "17.3.1" + "semantic-release": "19.0.5", + "typescript": "^4.8.4" } }, "resolve": { From 0bd1637ed4cdc182b343a63c6f0309174cc6c3f3 Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 26 Oct 2022 16:36:52 -0400 Subject: [PATCH 003/110] fix(Algorithm): update viewer on algo update --- src/core-ts/Algorithm.tsx | 5 ++++- src/core-ts/GeometryRepresentation.tsx | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/core-ts/Algorithm.tsx b/src/core-ts/Algorithm.tsx index a296388..5825c61 100644 --- a/src/core-ts/Algorithm.tsx +++ b/src/core-ts/Algorithm.tsx @@ -3,6 +3,7 @@ import vtk from '@kitware/vtk.js/vtk'; import { PropsWithChildren, useCallback, useEffect } from 'react'; import { VtkConstructor } from '../types'; import useGetterRef from '../utils-ts/useGetterRef'; +import { usePrevious } from '../utils-ts/usePrevious'; import useUnmount from '../utils-ts/useUnmount'; import { DownstreamContext, @@ -28,6 +29,7 @@ interface Props extends PropsWithChildren { } export default function Algorithm(props: Props) { + const prev = usePrevious(props); const { vtkClass, state, port = 0 } = props; const createAlgo = useCallback(() => { @@ -48,7 +50,7 @@ export default function Algorithm(props: Props) { if (!algoRef.current) { algoRef.current = createAlgo(); algoChanged = true; - } else if (algoRef.current.getClassName() !== vtkClass) { + } else if (vtkClass !== prev?.vtkClass) { const curAlgo = algoRef.current; const newAlgo = createAlgo(); @@ -81,6 +83,7 @@ export default function Algorithm(props: Props) { } } }, [ + prev, vtkClass, state, port, diff --git a/src/core-ts/GeometryRepresentation.tsx b/src/core-ts/GeometryRepresentation.tsx index 50809eb..8f29278 100644 --- a/src/core-ts/GeometryRepresentation.tsx +++ b/src/core-ts/GeometryRepresentation.tsx @@ -359,6 +359,8 @@ export default forwardRef(function GeometryRepresentation( getActor, getMapper, dataChanged: () => { + // TODO when algorithm updates, need to update mapper? + getMapper().modified(); view.requestRender(); }, dataAvailable: () => { From a601550d1663491812cc2396672e4fd2d8d10be1 Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 26 Oct 2022 23:44:24 -0400 Subject: [PATCH 004/110] chore(usage): update vite and react plugin This brings in the automatic JSX runtime for react 17+. --- usage/package-lock.json | 794 +++++++++++++++++++++------------------- usage/package.json | 5 +- 2 files changed, 412 insertions(+), 387 deletions(-) diff --git a/usage/package-lock.json b/usage/package-lock.json index 76261d0..986a03c 100644 --- a/usage/package-lock.json +++ b/usage/package-lock.json @@ -13,8 +13,8 @@ "react-vtk-js": "file:.." }, "devDependencies": { - "@vitejs/plugin-react": "^1.0.7", - "vite": "^2.8.0" + "@vitejs/plugin-react": "^2.2.0", + "vite": "^3.2.0" } }, "..": { @@ -64,7 +64,7 @@ }, "peerDependencies": { "@kitware/vtk.js": "^26.5.3", - "react": "^16.0.0" + "react": "^18.0.0" } }, "node_modules/@ampproject/remapping": { @@ -93,30 +93,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", - "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -132,12 +132,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", + "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", "dev": true, "dependencies": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.19.4", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -172,12 +172,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.19.3", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", "semver": "^6.3.0" @@ -236,40 +236,40 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-simple-access": "^7.19.4", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -315,14 +315,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", "dev": true, "dependencies": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -343,9 +343,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", + "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -448,19 +448,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", + "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", + "@babel/generator": "^7.19.6", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/parser": "^7.19.6", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -469,9 +469,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", @@ -482,10 +482,26 @@ "node": ">=6.9.0" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", + "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz", + "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==", "cpu": [ "loong64" ], @@ -545,36 +561,25 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/@vitejs/plugin-react": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.3.2.tgz", - "integrity": "sha512-aurBNmMo0kz1O4qRoY+FM4epSA39y3ShWGuqfLRA/3z0oEJAdtoSfgA3aO98/PCCHAqMaduLxIxErWrVKIFzXA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.2.0.tgz", + "integrity": "sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==", "dev": true, "dependencies": { - "@babel/core": "^7.17.10", - "@babel/plugin-transform-react-jsx": "^7.17.3", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-jsx-self": "^7.16.7", - "@babel/plugin-transform-react-jsx-source": "^7.16.7", - "@rollup/pluginutils": "^4.2.1", - "react-refresh": "^0.13.0", - "resolve": "^1.22.0" + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-jsx": "^7.19.0", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.26.7", + "react-refresh": "^0.14.0" }, "engines": { - "node": ">=12.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0" } }, "node_modules/ansi-styles": { @@ -618,9 +623,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001439", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", - "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", + "version": "1.0.30001425", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001425.tgz", + "integrity": "sha512-/pzFv0OmNG6W0ym80P3NtapU0QEiDS3VuYAZMGoLLqiC7f6FJFe1MjpQDREGApeenD9wloeytmVDj+JLXPC6qw==", "dev": true, "funding": [ { @@ -692,9 +697,9 @@ "dev": true }, "node_modules/esbuild": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", - "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", + "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==", "dev": true, "hasInstallScript": true, "bin": { @@ -704,33 +709,34 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/linux-loong64": "0.14.54", - "esbuild-android-64": "0.14.54", - "esbuild-android-arm64": "0.14.54", - "esbuild-darwin-64": "0.14.54", - "esbuild-darwin-arm64": "0.14.54", - "esbuild-freebsd-64": "0.14.54", - "esbuild-freebsd-arm64": "0.14.54", - "esbuild-linux-32": "0.14.54", - "esbuild-linux-64": "0.14.54", - "esbuild-linux-arm": "0.14.54", - "esbuild-linux-arm64": "0.14.54", - "esbuild-linux-mips64le": "0.14.54", - "esbuild-linux-ppc64le": "0.14.54", - "esbuild-linux-riscv64": "0.14.54", - "esbuild-linux-s390x": "0.14.54", - "esbuild-netbsd-64": "0.14.54", - "esbuild-openbsd-64": "0.14.54", - "esbuild-sunos-64": "0.14.54", - "esbuild-windows-32": "0.14.54", - "esbuild-windows-64": "0.14.54", - "esbuild-windows-arm64": "0.14.54" + "@esbuild/android-arm": "0.15.12", + "@esbuild/linux-loong64": "0.15.12", + "esbuild-android-64": "0.15.12", + "esbuild-android-arm64": "0.15.12", + "esbuild-darwin-64": "0.15.12", + "esbuild-darwin-arm64": "0.15.12", + "esbuild-freebsd-64": "0.15.12", + "esbuild-freebsd-arm64": "0.15.12", + "esbuild-linux-32": "0.15.12", + "esbuild-linux-64": "0.15.12", + "esbuild-linux-arm": "0.15.12", + "esbuild-linux-arm64": "0.15.12", + "esbuild-linux-mips64le": "0.15.12", + "esbuild-linux-ppc64le": "0.15.12", + "esbuild-linux-riscv64": "0.15.12", + "esbuild-linux-s390x": "0.15.12", + "esbuild-netbsd-64": "0.15.12", + "esbuild-openbsd-64": "0.15.12", + "esbuild-sunos-64": "0.15.12", + "esbuild-windows-32": "0.15.12", + "esbuild-windows-64": "0.15.12", + "esbuild-windows-arm64": "0.15.12" } }, "node_modules/esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz", + "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==", "cpu": [ "x64" ], @@ -744,9 +750,9 @@ } }, "node_modules/esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz", + "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==", "cpu": [ "arm64" ], @@ -760,9 +766,9 @@ } }, "node_modules/esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz", + "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==", "cpu": [ "x64" ], @@ -776,9 +782,9 @@ } }, "node_modules/esbuild-darwin-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", - "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz", + "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==", "cpu": [ "arm64" ], @@ -792,9 +798,9 @@ } }, "node_modules/esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz", + "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==", "cpu": [ "x64" ], @@ -808,9 +814,9 @@ } }, "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz", + "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==", "cpu": [ "arm64" ], @@ -824,9 +830,9 @@ } }, "node_modules/esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz", + "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==", "cpu": [ "ia32" ], @@ -840,9 +846,9 @@ } }, "node_modules/esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz", + "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==", "cpu": [ "x64" ], @@ -856,9 +862,9 @@ } }, "node_modules/esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz", + "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==", "cpu": [ "arm" ], @@ -872,9 +878,9 @@ } }, "node_modules/esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz", + "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==", "cpu": [ "arm64" ], @@ -888,9 +894,9 @@ } }, "node_modules/esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz", + "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==", "cpu": [ "mips64el" ], @@ -904,9 +910,9 @@ } }, "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz", + "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==", "cpu": [ "ppc64" ], @@ -920,9 +926,9 @@ } }, "node_modules/esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz", + "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==", "cpu": [ "riscv64" ], @@ -936,9 +942,9 @@ } }, "node_modules/esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz", + "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==", "cpu": [ "s390x" ], @@ -952,9 +958,9 @@ } }, "node_modules/esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz", + "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==", "cpu": [ "x64" ], @@ -968,9 +974,9 @@ } }, "node_modules/esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz", + "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==", "cpu": [ "x64" ], @@ -984,9 +990,9 @@ } }, "node_modules/esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz", + "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==", "cpu": [ "x64" ], @@ -1000,9 +1006,9 @@ } }, "node_modules/esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz", + "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==", "cpu": [ "ia32" ], @@ -1016,9 +1022,9 @@ } }, "node_modules/esbuild-windows-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", - "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz", + "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==", "cpu": [ "x64" ], @@ -1032,9 +1038,9 @@ } }, "node_modules/esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz", + "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==", "cpu": [ "arm64" ], @@ -1187,6 +1193,18 @@ "loose-envify": "cli.js" } }, + "node_modules/magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1223,22 +1241,10 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "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/postcss": { - "version": "8.4.20", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz", - "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "dev": true, "funding": [ { @@ -1283,9 +1289,9 @@ } }, "node_modules/react-refresh": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.13.0.tgz", - "integrity": "sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -1313,9 +1319,9 @@ } }, "node_modules/rollup": { - "version": "2.77.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", - "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -1353,6 +1359,12 @@ "node": ">=0.10.0" } }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1413,21 +1425,21 @@ } }, "node_modules/vite": { - "version": "2.9.15", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.15.tgz", - "integrity": "sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.0.tgz", + "integrity": "sha512-Ovj7+cqIdM1I0LPCk2CWxzgADXMix3NLXpUT6g7P7zg/a9grk/TaC3qn9YMg7w7M0POIVCBOp1aBANJW+RH7oA==", "dev": true, "dependencies": { - "esbuild": "^0.14.27", - "postcss": "^8.4.13", - "resolve": "^1.22.0", - "rollup": ">=2.59.0 <2.78.0" + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": ">=12.2.0" + "node": "^14.18.0 || >=16.0.0" }, "optionalDependencies": { "fsevents": "~2.3.2" @@ -1435,7 +1447,9 @@ "peerDependencies": { "less": "*", "sass": "*", - "stylus": "*" + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" }, "peerDependenciesMeta": { "less": { @@ -1446,6 +1460,12 @@ }, "stylus": { "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true } } } @@ -1471,27 +1491,27 @@ } }, "@babel/compat-data": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", - "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", "dev": true }, "@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz", + "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", + "@babel/generator": "^7.19.6", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helpers": "^7.19.4", + "@babel/parser": "^7.19.6", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1500,12 +1520,12 @@ } }, "@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz", + "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==", "dev": true, "requires": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.19.4", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -1533,12 +1553,12 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", "dev": true, "requires": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.19.3", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", "semver": "^6.3.0" @@ -1579,34 +1599,34 @@ } }, "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz", + "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-simple-access": "^7.19.4", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/traverse": "^7.19.6", + "@babel/types": "^7.19.4" } }, "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", "dev": true }, "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", "dev": true, "requires": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.19.4" } }, "@babel/helper-split-export-declaration": { @@ -1637,14 +1657,14 @@ "dev": true }, "@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", "dev": true, "requires": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" } }, "@babel/highlight": { @@ -1659,9 +1679,9 @@ } }, "@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz", + "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==", "dev": true }, "@babel/plugin-syntax-jsx": { @@ -1725,27 +1745,27 @@ } }, "@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz", + "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", + "@babel/generator": "^7.19.6", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/parser": "^7.19.6", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", @@ -1753,10 +1773,17 @@ "to-fast-properties": "^2.0.0" } }, + "@esbuild/android-arm": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.12.tgz", + "integrity": "sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==", + "dev": true, + "optional": true + }, "@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.12.tgz", + "integrity": "sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==", "dev": true, "optional": true }, @@ -1798,30 +1825,19 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, - "@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, "@vitejs/plugin-react": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.3.2.tgz", - "integrity": "sha512-aurBNmMo0kz1O4qRoY+FM4epSA39y3ShWGuqfLRA/3z0oEJAdtoSfgA3aO98/PCCHAqMaduLxIxErWrVKIFzXA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.2.0.tgz", + "integrity": "sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==", "dev": true, "requires": { - "@babel/core": "^7.17.10", - "@babel/plugin-transform-react-jsx": "^7.17.3", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-jsx-self": "^7.16.7", - "@babel/plugin-transform-react-jsx-source": "^7.16.7", - "@rollup/pluginutils": "^4.2.1", - "react-refresh": "^0.13.0", - "resolve": "^1.22.0" + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-jsx": "^7.19.0", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.26.7", + "react-refresh": "^0.14.0" } }, "ansi-styles": { @@ -1846,9 +1862,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001439", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", - "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", + "version": "1.0.30001425", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001425.tgz", + "integrity": "sha512-/pzFv0OmNG6W0ym80P3NtapU0QEiDS3VuYAZMGoLLqiC7f6FJFe1MjpQDREGApeenD9wloeytmVDj+JLXPC6qw==", "dev": true }, "chalk": { @@ -1899,171 +1915,172 @@ "dev": true }, "esbuild": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", - "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.12.tgz", + "integrity": "sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==", "dev": true, "requires": { - "@esbuild/linux-loong64": "0.14.54", - "esbuild-android-64": "0.14.54", - "esbuild-android-arm64": "0.14.54", - "esbuild-darwin-64": "0.14.54", - "esbuild-darwin-arm64": "0.14.54", - "esbuild-freebsd-64": "0.14.54", - "esbuild-freebsd-arm64": "0.14.54", - "esbuild-linux-32": "0.14.54", - "esbuild-linux-64": "0.14.54", - "esbuild-linux-arm": "0.14.54", - "esbuild-linux-arm64": "0.14.54", - "esbuild-linux-mips64le": "0.14.54", - "esbuild-linux-ppc64le": "0.14.54", - "esbuild-linux-riscv64": "0.14.54", - "esbuild-linux-s390x": "0.14.54", - "esbuild-netbsd-64": "0.14.54", - "esbuild-openbsd-64": "0.14.54", - "esbuild-sunos-64": "0.14.54", - "esbuild-windows-32": "0.14.54", - "esbuild-windows-64": "0.14.54", - "esbuild-windows-arm64": "0.14.54" + "@esbuild/android-arm": "0.15.12", + "@esbuild/linux-loong64": "0.15.12", + "esbuild-android-64": "0.15.12", + "esbuild-android-arm64": "0.15.12", + "esbuild-darwin-64": "0.15.12", + "esbuild-darwin-arm64": "0.15.12", + "esbuild-freebsd-64": "0.15.12", + "esbuild-freebsd-arm64": "0.15.12", + "esbuild-linux-32": "0.15.12", + "esbuild-linux-64": "0.15.12", + "esbuild-linux-arm": "0.15.12", + "esbuild-linux-arm64": "0.15.12", + "esbuild-linux-mips64le": "0.15.12", + "esbuild-linux-ppc64le": "0.15.12", + "esbuild-linux-riscv64": "0.15.12", + "esbuild-linux-s390x": "0.15.12", + "esbuild-netbsd-64": "0.15.12", + "esbuild-openbsd-64": "0.15.12", + "esbuild-sunos-64": "0.15.12", + "esbuild-windows-32": "0.15.12", + "esbuild-windows-64": "0.15.12", + "esbuild-windows-arm64": "0.15.12" } }, "esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.12.tgz", + "integrity": "sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==", "dev": true, "optional": true }, "esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.12.tgz", + "integrity": "sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.12.tgz", + "integrity": "sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", - "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.12.tgz", + "integrity": "sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.12.tgz", + "integrity": "sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.12.tgz", + "integrity": "sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.12.tgz", + "integrity": "sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.12.tgz", + "integrity": "sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.12.tgz", + "integrity": "sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.12.tgz", + "integrity": "sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.12.tgz", + "integrity": "sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.12.tgz", + "integrity": "sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==", "dev": true, "optional": true }, "esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.12.tgz", + "integrity": "sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==", "dev": true, "optional": true }, "esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.12.tgz", + "integrity": "sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==", "dev": true, "optional": true }, "esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.12.tgz", + "integrity": "sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.12.tgz", + "integrity": "sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==", "dev": true, "optional": true }, "esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.12.tgz", + "integrity": "sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==", "dev": true, "optional": true }, "esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.12.tgz", + "integrity": "sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", - "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.12.tgz", + "integrity": "sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.12.tgz", + "integrity": "sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==", "dev": true, "optional": true }, @@ -2164,6 +2181,15 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2194,16 +2220,10 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, "postcss": { - "version": "8.4.20", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz", - "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "dev": true, "requires": { "nanoid": "^3.3.4", @@ -2229,9 +2249,9 @@ } }, "react-refresh": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.13.0.tgz", - "integrity": "sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true }, "react-vtk-js": { @@ -2242,7 +2262,7 @@ "@babel/preset-env": "^7.19.1", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.12.5", + "@babel/runtime": "^7.19.0", "@kitware/vtk.js": "^26.5.3", "@rollup/plugin-babel": "^5.3.1", "@rollup/plugin-commonjs": "22.0.2", @@ -2289,9 +2309,9 @@ } }, "rollup": { - "version": "2.77.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", - "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -2317,6 +2337,12 @@ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -2349,16 +2375,16 @@ } }, "vite": { - "version": "2.9.15", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.15.tgz", - "integrity": "sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.0.tgz", + "integrity": "sha512-Ovj7+cqIdM1I0LPCk2CWxzgADXMix3NLXpUT6g7P7zg/a9grk/TaC3qn9YMg7w7M0POIVCBOp1aBANJW+RH7oA==", "dev": true, "requires": { - "esbuild": "^0.14.27", + "esbuild": "^0.15.9", "fsevents": "~2.3.2", - "postcss": "^8.4.13", - "resolve": "^1.22.0", - "rollup": ">=2.59.0 <2.78.0" + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" } } } diff --git a/usage/package.json b/usage/package.json index 59e1669..5af547b 100644 --- a/usage/package.json +++ b/usage/package.json @@ -10,13 +10,12 @@ "preview": "vite preview" }, "dependencies": { - "fflate": "^0.7.4", "react": "^18.2.0", "react-dom": "^18.2.0", "react-vtk-js": "file:.." }, "devDependencies": { - "@vitejs/plugin-react": "^1.0.7", - "vite": "^2.8.0" + "@vitejs/plugin-react": "^2.2.0", + "vite": "^3.2.0" } } From ab47f69ee754ed202a3768b2944362adf5d06705 Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 26 Oct 2022 23:46:26 -0400 Subject: [PATCH 005/110] fix: do not bundle vtk.js The externals key is wrong, and so a lot of external dependencies were being brought into the build output (e.g. vtk.js, react/jsx-runtime, etc.) This fixes the geometry representation mapper.modified() hack, which was needed when testing the Algorithm component in `usage` because there were two different globalMTime variables: one in the macros.js in dist/node_modules/@kitware/vtk.js, and another one in the usage/node_modules/... dir. --- package.json | 2 +- rollup.config.js | 14 +++++++------- src/core-ts/GeometryRepresentation.tsx | 2 -- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index fba479e..ffda87a 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "deploy": "gh-pages -d usage/dist -f -r $GIT_PUBLISH_URL", "commit": "git cz", "semantic-release": "semantic-release", - "dev": "rollup ./src/index.js -c --watch" + "dev": "rollup -c --watch" }, "peerDependencies": { "@kitware/vtk.js": "^26.5.3", diff --git a/rollup.config.js b/rollup.config.js index 53933e1..0c44fec 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,9 +1,9 @@ -import commonjs from '@rollup/plugin-commonjs'; import { babel } from '@rollup/plugin-babel'; +import commonjs from '@rollup/plugin-commonjs'; import eslint from '@rollup/plugin-eslint'; -import { terser } from 'rollup-plugin-terser'; -import analyze from 'rollup-plugin-analyzer'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import analyze from 'rollup-plugin-analyzer'; +import { terser } from 'rollup-plugin-terser'; const plugins = [ !process.env.NOLINT && @@ -80,15 +80,15 @@ export default [ input: 'src/index.ts', output: { dir: 'dist/ts', - format: 'esm', + format: 'es', preserveModules: true, preserveModulesRoot: 'src', }, external: [ - '@babel/runtime', - '@kitware/vtk.js', - 'prop-types', + /^@babel\/runtime\/?/, + /^@kitware\/vtk\.js/, 'react', + 'react/jsx-runtime', 'regenerator-runtime', ], plugins: [ diff --git a/src/core-ts/GeometryRepresentation.tsx b/src/core-ts/GeometryRepresentation.tsx index 8f29278..50809eb 100644 --- a/src/core-ts/GeometryRepresentation.tsx +++ b/src/core-ts/GeometryRepresentation.tsx @@ -359,8 +359,6 @@ export default forwardRef(function GeometryRepresentation( getActor, getMapper, dataChanged: () => { - // TODO when algorithm updates, need to update mapper? - getMapper().modified(); view.requestRender(); }, dataAvailable: () => { From 7ff0eaa9826ad2740ebc93c0f2cf3205a367a0c7 Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 27 Oct 2022 09:54:23 -0400 Subject: [PATCH 006/110] refactor(View): split for readability --- src/core-ts/{View.tsx => View/index.tsx} | 167 ++++------------------- src/core-ts/View/useInteractor.ts | 35 +++++ src/core-ts/View/useRenderWindow.ts | 42 ++++++ src/core-ts/View/useRenderWindowView.ts | 26 ++++ src/core-ts/View/useRenderer.ts | 23 ++++ src/core-ts/View/useViewResize.ts | 27 ++++ 6 files changed, 178 insertions(+), 142 deletions(-) rename src/core-ts/{View.tsx => View/index.tsx} (55%) create mode 100644 src/core-ts/View/useInteractor.ts create mode 100644 src/core-ts/View/useRenderWindow.ts create mode 100644 src/core-ts/View/useRenderWindowView.ts create mode 100644 src/core-ts/View/useRenderer.ts create mode 100644 src/core-ts/View/useViewResize.ts diff --git a/src/core-ts/View.tsx b/src/core-ts/View/index.tsx similarity index 55% rename from src/core-ts/View.tsx rename to src/core-ts/View/index.tsx index 18b8933..92a9771 100644 --- a/src/core-ts/View.tsx +++ b/src/core-ts/View/index.tsx @@ -1,26 +1,22 @@ -import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; -import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow'; -import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; -import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; import { Nullable, Vector3 } from '@kitware/vtk.js/types'; import { CSSProperties, forwardRef, PropsWithChildren, - useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState, } from 'react'; -import { IView } from '../types'; -import useGetterRef from '../utils-ts/useGetterRef'; -import useMount from '../utils-ts/useMount'; -import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; -import useResizeObserver from '../utils-ts/useResizeObserver'; -import useUnmount from '../utils-ts/useUnmount'; -import { ViewContext } from './contexts'; +import { IView } from '../../types'; +import { useOrderedUnmountContext } from '../../utils-ts/useOrderedUnmountEffect'; +import { ViewContext } from '../contexts'; +import useInteractor from './useInteractor'; +import useRenderer from './useRenderer'; +import useRenderWindow from './useRenderWindow'; +import useRenderWindowView from './useRenderWindowView'; +import { useViewResize } from './useViewResize'; const RENDERER_STYLE: CSSProperties = { position: 'absolute', @@ -164,147 +160,37 @@ interface Props extends PropsWithChildren { const DefaultProps = { interactive: true, autoResetCamera: true, - background: [0.2, 0.3, 0.4], + background: [0.2, 0.3, 0.4] as Vector3, style: { width: '100%', height: '100%', } as CSSProperties, }; -function useRenderWindowView(container: Nullable) { - const [viewRef, getView] = useGetterRef(() => { - return vtkOpenGLRenderWindow.newInstance(); - }); - - useEffect(() => { - const view = getView(); - // FIXME setContainer API should allow null - view.setContainer(container as HTMLElement); - }, [container, getView]); - - useUnmount(() => { - if (viewRef.current) { - viewRef.current.delete(); - viewRef.current = null; - } - }); - - return getView; -} - -function useInteractor( - getRWView: () => vtkOpenGLRenderWindow, - container: Nullable, - props: Props -) { - const [interactorRef, getInteractor] = useGetterRef(() => { - return vtkRenderWindowInteractor.newInstance(); - }); - const { interactive = DefaultProps.interactive } = props; - - useEffect(() => { - if (!container || !interactive) return; - const interactor = getInteractor(); - const rwView = getRWView(); - - interactor.setView(rwView); - interactor.initialize(); - interactor.bindEvents(container); - }, [interactive, container, getRWView, getInteractor]); - - useUnmount(() => { - if (interactorRef.current) { - interactorRef.current.delete(); - interactorRef.current = null; - } - }); - - return getInteractor; -} - -function useRenderWindow( - getRWView: () => vtkOpenGLRenderWindow, - getRenderer: () => vtkRenderer -) { - const [rwRef, getRenderWindow] = useGetterRef(() => { - return vtkRenderWindow.newInstance(); - }); - - useEffect(() => { - const rwView = getRWView(); - const renderWindow = getRenderWindow(); - renderWindow.addView(rwView); - return () => { - renderWindow.removeView(rwView); - }; - }, [getRWView, getRenderWindow]); - - useEffect(() => { - const renderWindow = getRenderWindow(); - const renderer = getRenderer(); - renderWindow.addRenderer(renderer); - return () => { - renderWindow.removeRenderer(renderer); - }; - }, [getRenderer, getRenderWindow]); - - useUnmount(() => { - if (rwRef.current) { - rwRef.current.delete(); - rwRef.current = null; - } - }); - - return getRenderWindow; -} - -function useRenderer(props: Props) { - const [renRef, getRenderer] = useGetterRef(() => vtkRenderer.newInstance()); - const { background = DefaultProps.background } = props; - - useEffect(() => { - const renderer = getRenderer(); - renderer.setBackground(background); - }, [background, getRenderer]); - - useUnmount(() => { - if (renRef.current) { - renRef.current.delete(); - renRef.current = null; - } - }); - - return getRenderer; -} - export default forwardRef(function View(props: Props, fwdRef) { const OrderedUnmountContext = useOrderedUnmountContext(); + const { + background = DefaultProps.background, + interactive = DefaultProps.interactive, + autoResetCamera = DefaultProps.autoResetCamera, + } = props; + const containerRef = useRef>(null); const getRWView = useRenderWindowView(containerRef.current); - const getRenderer = useRenderer(props); + const getRenderer = useRenderer(background); // We need to attach the renderWindowView to the renderWindow // before setting the view onto the interactor. const getRenderWindow = useRenderWindow(getRWView, getRenderer); - const getInteractor = useInteractor(getRWView, containerRef.current, props); - - const updateViewSize = useCallback(() => { - const container = containerRef.current; - if (!container) return; - - const renderWindowView = getRWView(); - const renderWindow = getRenderWindow(); - const devicePixelRatio = window.devicePixelRatio || 1; - const { width, height } = container.getBoundingClientRect(); - const w = Math.floor(width * devicePixelRatio); - const h = Math.floor(height * devicePixelRatio); - renderWindowView.setSize(Math.max(w, 10), Math.max(h, 10)); - renderWindow.render(); - }, [getRWView, getRenderWindow]); + const getInteractor = useInteractor( + getRWView, + containerRef.current, + interactive + ); const [renderRequested, setRenderRequested] = useState(false); - const { autoResetCamera = DefaultProps.autoResetCamera } = props; + const requestRender = () => setRenderRequested(true); useEffect(() => { if (renderRequested) { @@ -329,15 +215,13 @@ export default forwardRef(function View(props: Props, fwdRef) { This will batch render requests, triggering a single * vtk.js render once after a react render. */ - requestRender: () => { - setRenderRequested(true); - }, + requestRender, /** * Resets the camera. */ resetCamera: () => { getRenderer().resetCamera(); - getRenderWindow().render(); + requestRender(); }, }; }, [getRWView, getRenderer, getRenderWindow, getInteractor]); @@ -345,8 +229,7 @@ export default forwardRef(function View(props: Props, fwdRef) { // expose the view as a ref for imperative control useImperativeHandle(fwdRef, () => view); - useResizeObserver(containerRef.current, updateViewSize); - useMount(() => updateViewSize()); + useViewResize(containerRef, view); const { style = DefaultProps.style } = props; const containerStyle = useMemo( diff --git a/src/core-ts/View/useInteractor.ts b/src/core-ts/View/useInteractor.ts new file mode 100644 index 0000000..0e5835c --- /dev/null +++ b/src/core-ts/View/useInteractor.ts @@ -0,0 +1,35 @@ +import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; +import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; +import { Nullable } from '@kitware/vtk.js/types'; +import { useEffect } from 'react'; +import useGetterRef from '../../utils-ts/useGetterRef'; +import useUnmount from '../../utils-ts/useUnmount'; + +export default function useInteractor( + getRWView: () => vtkOpenGLRenderWindow, + container: Nullable, + interactive: boolean +) { + const [interactorRef, getInteractor] = useGetterRef(() => { + return vtkRenderWindowInteractor.newInstance(); + }); + + useEffect(() => { + if (!container || !interactive) return; + const interactor = getInteractor(); + const rwView = getRWView(); + + interactor.setView(rwView); + interactor.initialize(); + interactor.bindEvents(container); + }, [interactive, container, getRWView, getInteractor]); + + useUnmount(() => { + if (interactorRef.current) { + interactorRef.current.delete(); + interactorRef.current = null; + } + }); + + return getInteractor; +} diff --git a/src/core-ts/View/useRenderWindow.ts b/src/core-ts/View/useRenderWindow.ts new file mode 100644 index 0000000..6f92ecf --- /dev/null +++ b/src/core-ts/View/useRenderWindow.ts @@ -0,0 +1,42 @@ +import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; +import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow'; +import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; +import { useEffect } from 'react'; +import useGetterRef from '../../utils-ts/useGetterRef'; +import useUnmount from '../../utils-ts/useUnmount'; + +export default function useRenderWindow( + getRWView: () => vtkOpenGLRenderWindow, + getRenderer: () => vtkRenderer +) { + const [rwRef, getRenderWindow] = useGetterRef(() => { + return vtkRenderWindow.newInstance(); + }); + + useEffect(() => { + const rwView = getRWView(); + const renderWindow = getRenderWindow(); + renderWindow.addView(rwView); + return () => { + renderWindow.removeView(rwView); + }; + }, [getRWView, getRenderWindow]); + + useEffect(() => { + const renderWindow = getRenderWindow(); + const renderer = getRenderer(); + renderWindow.addRenderer(renderer); + return () => { + renderWindow.removeRenderer(renderer); + }; + }, [getRenderer, getRenderWindow]); + + useUnmount(() => { + if (rwRef.current) { + rwRef.current.delete(); + rwRef.current = null; + } + }); + + return getRenderWindow; +} diff --git a/src/core-ts/View/useRenderWindowView.ts b/src/core-ts/View/useRenderWindowView.ts new file mode 100644 index 0000000..a6b0fb5 --- /dev/null +++ b/src/core-ts/View/useRenderWindowView.ts @@ -0,0 +1,26 @@ +import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; +import { Nullable } from '@kitware/vtk.js/types'; +import { useEffect } from 'react'; +import useGetterRef from '../../utils-ts/useGetterRef'; +import useUnmount from '../../utils-ts/useUnmount'; + +export default function useRenderWindowView(container: Nullable) { + const [viewRef, getView] = useGetterRef(() => { + return vtkOpenGLRenderWindow.newInstance(); + }); + + useEffect(() => { + const view = getView(); + // FIXME setContainer API should allow null + view.setContainer(container as HTMLElement); + }, [container, getView]); + + useUnmount(() => { + if (viewRef.current) { + viewRef.current.delete(); + viewRef.current = null; + } + }); + + return getView; +} diff --git a/src/core-ts/View/useRenderer.ts b/src/core-ts/View/useRenderer.ts new file mode 100644 index 0000000..4021608 --- /dev/null +++ b/src/core-ts/View/useRenderer.ts @@ -0,0 +1,23 @@ +import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; +import { Vector3, Vector4 } from '@kitware/vtk.js/types'; +import { useEffect } from 'react'; +import useGetterRef from '../../utils-ts/useGetterRef'; +import useUnmount from '../../utils-ts/useUnmount'; + +export default function useRenderer(background: Vector3 | Vector4) { + const [renRef, getRenderer] = useGetterRef(() => vtkRenderer.newInstance()); + + useEffect(() => { + const renderer = getRenderer(); + renderer.setBackground(background); + }, [background, getRenderer]); + + useUnmount(() => { + if (renRef.current) { + renRef.current.delete(); + renRef.current = null; + } + }); + + return getRenderer; +} diff --git a/src/core-ts/View/useViewResize.ts b/src/core-ts/View/useViewResize.ts new file mode 100644 index 0000000..1eb871f --- /dev/null +++ b/src/core-ts/View/useViewResize.ts @@ -0,0 +1,27 @@ +import { Nullable } from '@kitware/vtk.js/types'; +import { RefObject, useCallback } from 'react'; +import { IView } from '../../types'; +import useMount from '../../utils-ts/useMount'; +import useResizeObserver from '../../utils-ts/useResizeObserver'; + +export function useViewResize( + containerRef: RefObject>, + view: IView +) { + const updateViewSize = useCallback(() => { + const container = containerRef.current; + if (!container) return; + + const renderWindowView = view.getAPISpecificRenderWindow(); + const renderWindow = view.getRenderWindow(); + const devicePixelRatio = window.devicePixelRatio || 1; + const { width, height } = container.getBoundingClientRect(); + const w = Math.floor(width * devicePixelRatio); + const h = Math.floor(height * devicePixelRatio); + renderWindowView.setSize(Math.max(w, 10), Math.max(h, 10)); + renderWindow.render(); + }, [containerRef, view]); + + useResizeObserver(containerRef.current, updateViewSize); + useMount(() => updateViewSize()); +} From ccf755219128c519a250edcc109f5dc30f475545 Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 27 Oct 2022 10:30:52 -0400 Subject: [PATCH 007/110] feat(ts/View): add camera props --- src/core-ts/View/index.tsx | 32 +++++++++++++------------------- src/core-ts/View/useCamera.ts | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 19 deletions(-) create mode 100644 src/core-ts/View/useCamera.ts diff --git a/src/core-ts/View/index.tsx b/src/core-ts/View/index.tsx index 92a9771..da4f2cd 100644 --- a/src/core-ts/View/index.tsx +++ b/src/core-ts/View/index.tsx @@ -1,3 +1,4 @@ +import { ICameraInitialValues } from '@kitware/vtk.js/Rendering/Core/Camera'; import { Nullable, Vector3 } from '@kitware/vtk.js/types'; import { CSSProperties, @@ -12,6 +13,7 @@ import { import { IView } from '../../types'; import { useOrderedUnmountContext } from '../../utils-ts/useOrderedUnmountEffect'; import { ViewContext } from '../contexts'; +import useCamera from './useCamera'; import useInteractor from './useInteractor'; import useRenderer from './useRenderer'; import useRenderWindow from './useRenderWindow'; @@ -59,24 +61,9 @@ interface Props extends PropsWithChildren { interactive?: boolean; /** - * Initial camera position from an object in [0,0,0] + * Camera properties, such as position, focal point, etc. */ - cameraPosition?: Vector3; - - /** - * Initial camera focal point from an object in [0,0,0] - */ - cameraFocalPoint?: Vector3; - - /** - * Initial camera position from an object in [0,0,0] - */ - cameraViewUp?: Vector3; - - /** - * Use parallel projection (default: false) - */ - cameraParallelProjection?: boolean; + camera?: ICameraInitialValues; /** * Whether to automatically call resetCamera() (default: true) @@ -174,6 +161,7 @@ export default forwardRef(function View(props: Props, fwdRef) { background = DefaultProps.background, interactive = DefaultProps.interactive, autoResetCamera = DefaultProps.autoResetCamera, + camera: cameraProps, } = props; const containerRef = useRef>(null); @@ -189,6 +177,7 @@ export default forwardRef(function View(props: Props, fwdRef) { interactive ); + // handle renders const [renderRequested, setRenderRequested] = useState(false); const requestRender = () => setRenderRequested(true); @@ -202,13 +191,17 @@ export default forwardRef(function View(props: Props, fwdRef) { } }, [renderRequested, autoResetCamera, getRenderer, getRenderWindow]); + // camera + const getCamera = useCamera(getRenderer, requestRender, cameraProps); + + // view API const view = useMemo(() => { return { getRenderer, getRenderWindow, getInteractor, getAPISpecificRenderWindow: getRWView, - getCamera: () => getRenderer().getActiveCamera(), + getCamera, /** * Requests a vtk.js render. * @@ -224,11 +217,12 @@ export default forwardRef(function View(props: Props, fwdRef) { requestRender(); }, }; - }, [getRWView, getRenderer, getRenderWindow, getInteractor]); + }, [getRWView, getRenderer, getRenderWindow, getInteractor, getCamera]); // expose the view as a ref for imperative control useImperativeHandle(fwdRef, () => view); + // handle resizing useViewResize(containerRef, view); const { style = DefaultProps.style } = props; diff --git a/src/core-ts/View/useCamera.ts b/src/core-ts/View/useCamera.ts new file mode 100644 index 0000000..d7a80fc --- /dev/null +++ b/src/core-ts/View/useCamera.ts @@ -0,0 +1,34 @@ +import { ICameraInitialValues } from '@kitware/vtk.js/Rendering/Core/Camera'; +import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; +import { useCallback } from 'react'; +import { compareShallowObject } from '../../utils-ts/comparators'; +import useComparableEffect from '../../utils-ts/useComparableEffect'; + +export default function useCamera( + getRenderer: () => vtkRenderer, + requestRender: () => void, + cameraProps?: ICameraInitialValues +) { + const getCamera = useCallback( + () => getRenderer().getActiveCamera(), + [getRenderer] + ); + + useComparableEffect( + () => { + if (!cameraProps) return; + const camera = getCamera(); + const mtime = camera.getMTime(); + camera.set(cameraProps); + // camera.set doesn't return whether a change occurred, + // since setPosition/etc. don't return this flag. + if (mtime < camera.getMTime()) { + requestRender(); + } + }, + [cameraProps], + ([cur], [prev]) => compareShallowObject(cur, prev) + ); + + return getCamera; +} From e2c0f040f6c2b50fc976fd15eb06a0f318e00b1c Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 27 Oct 2022 17:44:48 -0400 Subject: [PATCH 008/110] feat(ts/View): add interactor style --- package-lock.json | 1164 ++++++++++--------- package.json | 5 +- rollup.config.js | 1 + src/core-ts/View/index.tsx | 58 +- src/core-ts/View/useInteractorStyle.ts | 149 +++ src/global.d.ts | 1478 ++++++++++++++++++++++++ 6 files changed, 2295 insertions(+), 560 deletions(-) create mode 100644 src/core-ts/View/useInteractorStyle.ts diff --git a/package-lock.json b/package-lock.json index 628de0b..38f5da0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,9 @@ "version": "0.0.1", "license": "BSD-3-Clause", "dependencies": { - "@babel/runtime": "^7.12.5" + "@babel/eslint-parser": "^7.19.1", + "@babel/runtime": "^7.19.0", + "deep-equal": "^2.0.5" }, "devDependencies": { "@babel/core": "^7.19.1", @@ -22,6 +24,7 @@ "@rollup/plugin-commonjs": "22.0.2", "@rollup/plugin-eslint": "^8.0.2", "@rollup/plugin-node-resolve": "^14.1.0", + "@types/deep-equal": "^1.0.1", "@types/react": "^18.0.21", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", @@ -59,7 +62,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -72,7 +74,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -84,7 +85,6 @@ "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -93,7 +93,6 @@ "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -119,11 +118,35 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/eslint-parser": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz", + "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-parser/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==", + "engines": { + "node": ">=10" + } + }, "node_modules/@babel/generator": { "version": "7.21.1", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", - "dev": true, "dependencies": { "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", @@ -138,7 +161,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -177,7 +199,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.20.0", "@babel/helper-validator-option": "^7.18.6", @@ -250,7 +271,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -271,7 +291,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, "dependencies": { "@babel/template": "^7.20.7", "@babel/types": "^7.21.0" @@ -284,7 +303,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -308,7 +326,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -320,7 +337,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -395,7 +411,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, "dependencies": { "@babel/types": "^7.20.2" }, @@ -419,7 +434,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -431,7 +445,6 @@ "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -440,7 +453,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -449,7 +461,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -473,7 +484,6 @@ "version": "7.20.6", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", - "dev": true, "dependencies": { "@babel/template": "^7.18.10", "@babel/traverse": "^7.20.5", @@ -487,7 +497,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -501,7 +510,6 @@ "version": "7.21.1", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -1777,7 +1785,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.20.7", @@ -1791,7 +1798,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.21.0", @@ -1812,7 +1818,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -2203,7 +2208,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2216,7 +2220,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -2225,7 +2228,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -2257,14 +2259,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -2312,6 +2312,14 @@ "node": ">=6.9.0" } }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3304,6 +3312,12 @@ "dev": true, "optional": true }, + "node_modules/@types/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha512-mMUu4nWHLBlHtxXY17Fg6+ucS/MnndyOWyOe7MmwkoMYxvfQU2ajtRaEvqSUv+aVkMqH/C0NCI8UoVfRNQ10yg==", + "dev": true + }, "node_modules/@types/eslint": { "version": "8.4.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", @@ -3907,7 +3921,6 @@ "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" }, @@ -3919,7 +3932,6 @@ "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" } @@ -3989,7 +4001,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -4004,7 +4015,6 @@ "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" } @@ -4013,7 +4023,6 @@ "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" }, @@ -4038,7 +4047,6 @@ "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" } @@ -4157,7 +4165,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, "engines": { "node": ">=4" } @@ -4180,6 +4187,17 @@ "node": ">= 4.0.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", @@ -4222,8 +4240,7 @@ "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 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -4295,7 +4312,6 @@ "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" @@ -4317,7 +4333,6 @@ "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -4396,7 +4411,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -4409,7 +4423,6 @@ "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" } @@ -4444,7 +4457,6 @@ "version": "1.0.30001439", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", - "dev": true, "funding": [ { "type": "opencollective", @@ -4473,7 +4485,6 @@ "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", @@ -4486,8 +4497,7 @@ "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "node_modules/chrome-trace-event": { "version": "1.0.3", @@ -4512,7 +4522,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "dependencies": { "restore-cursor": "^3.1.0" }, @@ -4551,7 +4560,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, "engines": { "node": ">= 10" } @@ -4580,7 +4588,6 @@ "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" } @@ -4588,8 +4595,7 @@ "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 + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/commander": { "version": "9.2.0", @@ -4685,8 +4691,7 @@ "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 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/config-chain": { "version": "1.1.13", @@ -4776,8 +4781,7 @@ "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/core-js-compat": { "version": "3.26.1", @@ -5000,7 +5004,6 @@ "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" }, @@ -5053,6 +5056,38 @@ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "node_modules/deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -5065,8 +5100,7 @@ "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 + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deepmerge": { "version": "4.2.2", @@ -5093,7 +5127,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -5230,7 +5263,6 @@ "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" }, @@ -5262,8 +5294,7 @@ "node_modules/electron-to-chromium": { "version": "1.4.284", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "node_modules/email-addresses": { "version": "3.1.0", @@ -5274,8 +5305,7 @@ "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/emojis-list": { "version": "3.0.0", @@ -5374,6 +5404,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -5411,7 +5465,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -5420,7 +5473,6 @@ "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" } @@ -5429,7 +5481,6 @@ "version": "6.8.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "ajv": "^6.10.0", @@ -5838,7 +5889,6 @@ "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" @@ -5851,7 +5901,6 @@ "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" } @@ -5860,7 +5909,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, "dependencies": { "eslint-visitor-keys": "^1.1.0" }, @@ -5872,7 +5920,6 @@ "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" } @@ -5881,7 +5928,6 @@ "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", @@ -5897,7 +5943,6 @@ "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" }, @@ -5912,7 +5957,6 @@ "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" }, @@ -5923,14 +5967,12 @@ "node_modules/eslint/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/eslint/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -5946,7 +5988,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, "bin": { "semver": "bin/semver" } @@ -5955,7 +5996,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -5970,7 +6010,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, "dependencies": { "flat-cache": "^2.0.1" }, @@ -5982,7 +6021,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, "dependencies": { "flatted": "^2.0.0", "rimraf": "2.6.3", @@ -5995,14 +6033,12 @@ "node_modules/eslint/node_modules/flatted": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "node_modules/eslint/node_modules/globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, "dependencies": { "type-fest": "^0.8.1" }, @@ -6017,7 +6053,6 @@ "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" } @@ -6026,7 +6061,6 @@ "version": "7.3.3", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", @@ -6050,7 +6084,6 @@ "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" @@ -6066,7 +6099,6 @@ "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" }, @@ -6077,14 +6109,12 @@ "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 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/eslint/node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -6097,7 +6127,6 @@ "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", @@ -6114,7 +6143,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, "engines": { "node": ">=4" } @@ -6123,7 +6151,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -6132,7 +6159,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true, "engines": { "node": ">=6.5.0" } @@ -6141,7 +6167,6 @@ "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -6153,7 +6178,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, "dependencies": { "shebang-regex": "^1.0.0" }, @@ -6165,7 +6189,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -6174,7 +6197,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, @@ -6186,7 +6208,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, "engines": { "node": ">=6" } @@ -6195,7 +6216,6 @@ "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" }, @@ -6207,7 +6227,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, "dependencies": { "prelude-ls": "~1.1.2" }, @@ -6219,7 +6238,6 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, "engines": { "node": ">=8" } @@ -6228,7 +6246,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -6240,7 +6257,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, "dependencies": { "acorn": "^7.1.1", "acorn-jsx": "^5.2.0", @@ -6254,7 +6270,6 @@ "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" @@ -6267,7 +6282,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -6279,7 +6293,6 @@ "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" }, @@ -6291,7 +6304,6 @@ "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" } @@ -6306,7 +6318,6 @@ "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" } @@ -6360,7 +6371,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -6373,8 +6383,7 @@ "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 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-diff": { "version": "1.2.0", @@ -6401,14 +6410,12 @@ "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 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "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 + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fastq": { "version": "1.15.0", @@ -6582,6 +6589,14 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -6629,8 +6644,7 @@ "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 + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", @@ -6649,8 +6663,7 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -6673,14 +6686,12 @@ "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 + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6689,7 +6700,6 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -6704,10 +6714,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -6825,7 +6834,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6845,7 +6853,6 @@ "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" }, @@ -6919,7 +6926,6 @@ "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" } @@ -6959,7 +6965,6 @@ "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" }, @@ -7013,7 +7018,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -7025,7 +7029,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7034,7 +7037,6 @@ "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" } @@ -7043,7 +7045,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -7055,7 +7056,6 @@ "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" }, @@ -7067,7 +7067,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -7145,7 +7144,6 @@ "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" }, @@ -7177,7 +7175,6 @@ "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" } @@ -7186,7 +7183,6 @@ "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" @@ -7202,7 +7198,6 @@ "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" } @@ -7223,7 +7218,6 @@ "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" } @@ -7241,7 +7235,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7250,8 +7243,7 @@ "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 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", @@ -7386,12 +7378,11 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -7433,6 +7424,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -7443,7 +7462,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -7455,7 +7473,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7486,7 +7503,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -7510,7 +7526,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7525,7 +7540,6 @@ "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" } @@ -7534,7 +7548,6 @@ "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" } @@ -7543,7 +7556,6 @@ "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" }, @@ -7560,6 +7572,14 @@ "node": ">=8" } }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -7591,7 +7611,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7660,7 +7679,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7672,11 +7690,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -7700,7 +7725,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7715,7 +7739,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -7738,6 +7761,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -7756,6 +7797,14 @@ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -7768,7 +7817,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-windows": { + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", @@ -7786,8 +7847,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/issue-parser": { "version": "6.0.0", @@ -7852,14 +7912,12 @@ "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 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "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" @@ -7872,7 +7930,6 @@ "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" }, @@ -7902,8 +7959,7 @@ "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 + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -7915,7 +7971,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -8095,8 +8150,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.capitalize": { "version": "4.2.1", @@ -8566,7 +8620,6 @@ "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" } @@ -8584,7 +8637,6 @@ "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" }, @@ -8595,8 +8647,7 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/minimist-options": { "version": "4.1.0", @@ -8616,7 +8667,6 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, "dependencies": { "minimist": "^1.2.6" }, @@ -8636,20 +8686,17 @@ "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/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "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 + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/natural-compare-lite": { "version": "1.4.0", @@ -8672,8 +8719,7 @@ "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node_modules/node-emoji": { "version": "1.11.0", @@ -8707,8 +8753,7 @@ "node_modules/node-releases": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -11426,7 +11471,21 @@ "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11435,7 +11494,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -11444,7 +11502,6 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -11523,7 +11580,6 @@ "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" } @@ -11532,7 +11588,6 @@ "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" }, @@ -11657,7 +11712,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -11766,7 +11820,6 @@ "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" }, @@ -11814,7 +11867,6 @@ "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" } @@ -11846,8 +11898,7 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -12061,7 +12112,6 @@ "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" } @@ -12087,7 +12137,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, "engines": { "node": ">=6" } @@ -12365,7 +12414,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -12520,7 +12568,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -12607,7 +12654,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -12639,7 +12685,6 @@ "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, "dependencies": { "tslib": "^1.9.0" }, @@ -12670,8 +12715,7 @@ "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/scheduler": { "version": "0.23.0", @@ -12825,7 +12869,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -12923,7 +12966,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -12936,8 +12978,7 @@ "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 + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/signale": { "version": "1.4.0", @@ -12966,7 +13007,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", @@ -12980,7 +13020,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, "engines": { "node": ">=4" } @@ -13093,8 +13132,18 @@ "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 + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/stream-browserify": { "version": "3.0.0", @@ -13143,7 +13192,6 @@ "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", @@ -13221,7 +13269,6 @@ "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" }, @@ -13263,7 +13310,6 @@ "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" }, @@ -13287,7 +13333,6 @@ "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" }, @@ -13345,7 +13390,6 @@ "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, "dependencies": { "ajv": "^6.10.2", "lodash": "^4.17.14", @@ -13360,7 +13404,6 @@ "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", @@ -13376,7 +13419,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, "engines": { "node": ">=6" } @@ -13384,14 +13426,12 @@ "node_modules/table/node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "node_modules/table/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, "engines": { "node": ">=4" } @@ -13399,14 +13439,12 @@ "node_modules/table/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 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/table/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -13420,7 +13458,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, @@ -13612,14 +13649,12 @@ "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 + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/through2": { "version": "4.0.2", @@ -13648,7 +13683,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -13660,7 +13694,6 @@ "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" } @@ -13815,8 +13848,7 @@ "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 + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/tsutils": { "version": "3.21.0", @@ -13849,7 +13881,6 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, "engines": { "node": ">=10" }, @@ -13969,7 +14000,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -13995,7 +14025,6 @@ "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" } @@ -14015,8 +14044,7 @@ "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", @@ -14187,7 +14215,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -14199,11 +14226,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14301,14 +14360,12 @@ "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 + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, "dependencies": { "mkdirp": "^0.5.1" }, @@ -14447,7 +14504,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -14457,7 +14513,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, "requires": { "@babel/highlight": "^7.18.6" } @@ -14465,14 +14520,12 @@ "@babel/compat-data": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz", - "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==", - "dev": true + "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==" }, "@babel/core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", - "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -14491,11 +14544,27 @@ "semver": "^6.3.0" } }, + "@babel/eslint-parser": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz", + "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==", + "requires": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "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==" + } + } + }, "@babel/generator": { "version": "7.21.1", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", - "dev": true, "requires": { "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", @@ -14507,7 +14576,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -14539,7 +14607,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dev": true, "requires": { "@babel/compat-data": "^7.20.0", "@babel/helper-validator-option": "^7.18.6", @@ -14590,8 +14657,7 @@ "@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-explode-assignable-expression": { "version": "7.18.6", @@ -14606,7 +14672,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, "requires": { "@babel/template": "^7.20.7", "@babel/types": "^7.21.0" @@ -14616,7 +14681,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -14634,7 +14698,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -14643,7 +14706,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -14700,7 +14762,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, "requires": { "@babel/types": "^7.20.2" } @@ -14718,7 +14779,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -14726,20 +14786,17 @@ "@babel/helper-string-parser": { "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==" }, "@babel/helper-wrap-function": { "version": "7.20.5", @@ -14757,7 +14814,6 @@ "version": "7.20.6", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", - "dev": true, "requires": { "@babel/template": "^7.18.10", "@babel/traverse": "^7.20.5", @@ -14768,7 +14824,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -14778,8 +14833,7 @@ "@babel/parser": { "version": "7.21.1", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", - "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", - "dev": true + "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -15626,7 +15680,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, "requires": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.20.7", @@ -15637,7 +15690,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", - "dev": true, "requires": { "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.21.0", @@ -15655,7 +15707,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", - "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -15963,7 +16014,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -15972,14 +16022,12 @@ "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/source-map": { "version": "0.3.2", @@ -16007,14 +16055,12 @@ "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, "requires": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -16054,6 +16100,14 @@ } } }, + "@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "requires": { + "eslint-scope": "5.1.1" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -16800,6 +16854,12 @@ "dev": true, "optional": true }, + "@types/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha512-mMUu4nWHLBlHtxXY17Fg6+ucS/MnndyOWyOe7MmwkoMYxvfQU2ajtRaEvqSUv+aVkMqH/C0NCI8UoVfRNQ10yg==", + "dev": true + }, "@types/eslint": { "version": "8.4.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", @@ -17273,14 +17333,12 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "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": {} }, "acorn-walk": { @@ -17332,7 +17390,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "requires": { "type-fest": "^0.21.3" } @@ -17340,14 +17397,12 @@ "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 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "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" } @@ -17369,7 +17424,6 @@ "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" } @@ -17460,8 +17514,7 @@ "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, "async": { "version": "2.6.4", @@ -17478,6 +17531,11 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, "babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", @@ -17511,8 +17569,7 @@ "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 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", @@ -17566,7 +17623,6 @@ "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" @@ -17585,7 +17641,6 @@ "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "dev": true, "requires": { "caniuse-lite": "^1.0.30001400", "electron-to-chromium": "^1.4.251", @@ -17625,7 +17680,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -17634,8 +17688,7 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase": { "version": "5.3.1", @@ -17657,8 +17710,7 @@ "caniuse-lite": { "version": "1.0.30001439", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", - "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", - "dev": true + "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==" }, "cardinal": { "version": "2.1.1", @@ -17674,7 +17726,6 @@ "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", @@ -17684,8 +17735,7 @@ "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "chrome-trace-event": { "version": "1.0.3", @@ -17704,7 +17754,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "requires": { "restore-cursor": "^3.1.0" } @@ -17728,8 +17777,7 @@ "cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" }, "cliui": { "version": "7.0.4", @@ -17752,7 +17800,6 @@ "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" } @@ -17760,8 +17807,7 @@ "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 + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "commander": { "version": "9.2.0", @@ -17840,8 +17886,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "config-chain": { "version": "1.1.13", @@ -17913,8 +17958,7 @@ "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "core-js-compat": { "version": "3.26.1", @@ -18077,7 +18121,6 @@ "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" } @@ -18112,6 +18155,37 @@ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "requires": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -18121,8 +18195,7 @@ "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 + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "deepmerge": { "version": "4.2.2", @@ -18143,7 +18216,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -18240,7 +18312,6 @@ "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" } @@ -18266,8 +18337,7 @@ "electron-to-chromium": { "version": "1.4.284", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "dev": true + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "email-addresses": { "version": "3.1.0", @@ -18278,8 +18348,7 @@ "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 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "emojis-list": { "version": "3.0.0", @@ -18360,6 +18429,29 @@ "unbox-primitive": "^1.0.2" } }, + "es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, "es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -18390,20 +18482,17 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "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 + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "eslint": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.10.0", @@ -18448,7 +18537,6 @@ "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", @@ -18460,7 +18548,6 @@ "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" } @@ -18469,7 +18556,6 @@ "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" } @@ -18477,14 +18563,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -18496,8 +18580,7 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, @@ -18505,7 +18588,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -18514,7 +18596,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, "requires": { "flat-cache": "^2.0.1" } @@ -18523,7 +18604,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, "requires": { "flatted": "^2.0.0", "rimraf": "2.6.3", @@ -18533,14 +18613,12 @@ "flatted": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, "requires": { "type-fest": "^0.8.1" } @@ -18548,14 +18626,12 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "inquirer": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, "requires": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", @@ -18576,7 +18652,6 @@ "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" @@ -18586,7 +18661,6 @@ "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" } @@ -18596,14 +18670,12 @@ "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 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -18613,7 +18685,6 @@ "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", @@ -18626,26 +18697,22 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -18654,7 +18721,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -18662,14 +18728,12 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" }, @@ -18677,8 +18741,7 @@ "ansi-regex": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" } } }, @@ -18686,7 +18749,6 @@ "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" } @@ -18695,7 +18757,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -18703,14 +18764,12 @@ "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -18969,7 +19028,6 @@ "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" @@ -18978,8 +19036,7 @@ "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" } } }, @@ -18987,7 +19044,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" } @@ -18995,14 +19051,12 @@ "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 + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" }, "espree": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, "requires": { "acorn": "^7.1.1", "acorn-jsx": "^5.2.0", @@ -19012,14 +19066,12 @@ "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 + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "requires": { "estraverse": "^5.1.0" } @@ -19028,7 +19080,6 @@ "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" } @@ -19036,8 +19087,7 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "estree-walker": { "version": "2.0.2", @@ -19048,8 +19098,7 @@ "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "events": { "version": "3.3.0", @@ -19088,7 +19137,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -19098,8 +19146,7 @@ "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 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-diff": { "version": "1.2.0", @@ -19123,14 +19170,12 @@ "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 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "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 + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fastq": { "version": "1.15.0", @@ -19265,6 +19310,14 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -19295,8 +19348,7 @@ "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 + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.2", @@ -19308,8 +19360,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { "version": "1.1.5", @@ -19326,20 +19377,17 @@ "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 + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-caller-file": { "version": "2.0.5", @@ -19348,10 +19396,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -19448,7 +19495,6 @@ "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", @@ -19462,7 +19508,6 @@ "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" } @@ -19522,8 +19567,7 @@ "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 + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globalthis": { "version": "1.0.3", @@ -19551,7 +19595,6 @@ "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" } @@ -19591,7 +19634,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -19599,20 +19641,17 @@ "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" }, "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 + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, "requires": { "get-intrinsic": "^1.1.1" } @@ -19620,14 +19659,12 @@ "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 + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -19684,7 +19721,6 @@ "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" } @@ -19698,14 +19734,12 @@ "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 + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, "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" @@ -19714,8 +19748,7 @@ "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 + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" } } }, @@ -19728,8 +19761,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "indent-string": { "version": "4.0.0", @@ -19741,7 +19773,6 @@ "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" @@ -19750,8 +19781,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.8", @@ -19858,12 +19888,11 @@ } }, "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "requires": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } @@ -19890,6 +19919,25 @@ "p-is-promise": "^3.0.0" } }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -19900,7 +19948,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "requires": { "has-bigints": "^1.0.1" } @@ -19909,7 +19956,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -19927,8 +19973,7 @@ "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-core-module": { "version": "2.11.0", @@ -19943,7 +19988,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -19951,20 +19995,17 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "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 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "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" } @@ -19975,6 +20016,11 @@ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" + }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -19997,7 +20043,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -20045,17 +20090,20 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" + }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -20070,7 +20118,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -20079,7 +20126,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -20093,6 +20139,18 @@ "text-extensions": "^1.0.0" } }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -20105,6 +20163,11 @@ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -20114,6 +20177,15 @@ "call-bind": "^1.0.2" } }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -20129,8 +20201,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "issue-parser": { "version": "6.0.0", @@ -20182,14 +20253,12 @@ "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 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "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" @@ -20198,8 +20267,7 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-parse-better-errors": { "version": "1.0.2", @@ -20223,8 +20291,7 @@ "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 + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "json-stringify-safe": { "version": "5.0.1", @@ -20235,8 +20302,7 @@ "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" }, "jsonfile": { "version": "4.0.0", @@ -20372,8 +20438,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.capitalize": { "version": "4.2.1", @@ -20725,8 +20790,7 @@ "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 + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "min-indent": { "version": "1.0.1", @@ -20738,7 +20802,6 @@ "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" } @@ -20746,8 +20809,7 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minimist-options": { "version": "4.1.0", @@ -20764,7 +20826,6 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, "requires": { "minimist": "^1.2.6" } @@ -20778,20 +20839,17 @@ "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==" }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "natural-compare-lite": { "version": "1.4.0", @@ -20814,8 +20872,7 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node-emoji": { "version": "1.11.0", @@ -20838,8 +20895,7 @@ "node-releases": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "dev": true + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, "normalize-package-data": { "version": "2.5.0", @@ -22742,20 +22798,26 @@ "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -22810,7 +22872,6 @@ "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" } @@ -22819,7 +22880,6 @@ "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" } @@ -22909,8 +22969,7 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" }, "p-each-series": { "version": "2.2.0", @@ -22983,7 +23042,6 @@ "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" } @@ -23015,8 +23073,7 @@ "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 + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { "version": "3.1.1", @@ -23039,8 +23096,7 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { "version": "2.3.1", @@ -23182,8 +23238,7 @@ "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "prop-types": { "version": "15.8.1", @@ -23205,8 +23260,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "q": { "version": "1.5.1", @@ -23423,7 +23477,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -23535,7 +23588,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -23592,8 +23644,7 @@ "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "run-parallel": { "version": "1.2.0", @@ -23608,7 +23659,6 @@ "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, "requires": { "tslib": "^1.9.0" } @@ -23633,8 +23683,7 @@ "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==" }, "scheduler": { "version": "0.23.0", @@ -23757,8 +23806,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "semver-diff": { "version": "3.1.1", @@ -23829,7 +23877,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -23839,8 +23886,7 @@ "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 + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "signale": { "version": "1.4.0", @@ -23863,7 +23909,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", @@ -23873,8 +23918,7 @@ "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" } } }, @@ -23978,8 +24022,15 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "requires": { + "internal-slot": "^1.0.4" + } }, "stream-browserify": { "version": "3.0.0", @@ -24027,7 +24078,6 @@ "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", @@ -24087,7 +24137,6 @@ "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" } @@ -24116,8 +24165,7 @@ "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 + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "strip-outer": { "version": "1.0.1", @@ -24132,7 +24180,6 @@ "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" } @@ -24174,7 +24221,6 @@ "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, "requires": { "ajv": "^6.10.2", "lodash": "^4.17.14", @@ -24186,7 +24232,6 @@ "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", @@ -24197,32 +24242,27 @@ "ansi-regex": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" }, "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 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -24233,7 +24273,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -24364,14 +24403,12 @@ "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 + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "through2": { "version": "4.0.2", @@ -24399,7 +24436,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -24407,8 +24443,7 @@ "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 + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "to-regex-range": { "version": "5.0.1", @@ -24515,8 +24550,7 @@ "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "tsutils": { "version": "3.21.0", @@ -24539,8 +24573,7 @@ "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" }, "typescript": { "version": "4.9.4", @@ -24620,7 +24653,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -24630,7 +24662,6 @@ "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" } @@ -24650,8 +24681,7 @@ "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "v8-compile-cache-lib": { "version": "3.0.1", @@ -24789,7 +24819,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -24798,11 +24827,34 @@ "is-symbol": "^1.0.3" } }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wordwrap": { "version": "1.0.0", @@ -24873,14 +24925,12 @@ "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 + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, "requires": { "mkdirp": "^0.5.1" } diff --git a/package.json b/package.json index ffda87a..28371c1 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,9 @@ "module": "dist/ts/index.js", "source": "src/index.ts", "dependencies": { - "@babel/runtime": "^7.12.5" + "@babel/eslint-parser": "^7.19.1", + "@babel/runtime": "^7.19.0", + "deep-equal": "^2.0.5" }, "scripts": { "prebuild": "npm run fix", @@ -42,6 +44,7 @@ "@rollup/plugin-commonjs": "22.0.2", "@rollup/plugin-eslint": "^8.0.2", "@rollup/plugin-node-resolve": "^14.1.0", + "@types/deep-equal": "^1.0.1", "@types/react": "^18.0.21", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", diff --git a/rollup.config.js b/rollup.config.js index 0c44fec..54ab87c 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -90,6 +90,7 @@ export default [ 'react', 'react/jsx-runtime', 'regenerator-runtime', + 'deep-equal', ], plugins: [ nodeResolve({ diff --git a/src/core-ts/View/index.tsx b/src/core-ts/View/index.tsx index da4f2cd..43c6f3c 100644 --- a/src/core-ts/View/index.tsx +++ b/src/core-ts/View/index.tsx @@ -15,6 +15,11 @@ import { useOrderedUnmountContext } from '../../utils-ts/useOrderedUnmountEffect import { ViewContext } from '../contexts'; import useCamera from './useCamera'; import useInteractor from './useInteractor'; +import { + ManipulatorSettings, + useInteractorStyle, + useInteractorStyleManipulatorSettings, +} from './useInteractorStyle'; import useRenderer from './useRenderer'; import useRenderWindow from './useRenderWindow'; import useRenderWindowView from './useRenderWindowView'; @@ -53,7 +58,7 @@ interface Props extends PropsWithChildren { * Configure the interactions * TODO fix */ - interactorSettings?: Record[]; + interactorSettings?: ManipulatorSettings[]; /** * Enable/Disable interaction @@ -152,6 +157,42 @@ const DefaultProps = { width: '100%', height: '100%', } as CSSProperties, + interactorSettings: [ + { + button: 1, + action: 'Rotate', + }, + { + button: 2, + action: 'Pan', + }, + { + button: 3, + action: 'Zoom', + scrollEnabled: true, + }, + { + button: 1, + action: 'Pan', + alt: true, + }, + { + button: 1, + action: 'Zoom', + control: true, + }, + { + button: 1, + action: 'Select', + shift: true, + }, + { + button: 1, + action: 'Roll', + alt: true, + shift: true, + }, + ] as ManipulatorSettings[], }; export default forwardRef(function View(props: Props, fwdRef) { @@ -161,6 +202,7 @@ export default forwardRef(function View(props: Props, fwdRef) { background = DefaultProps.background, interactive = DefaultProps.interactive, autoResetCamera = DefaultProps.autoResetCamera, + interactorSettings = DefaultProps.interactorSettings, camera: cameraProps, } = props; @@ -177,6 +219,10 @@ export default forwardRef(function View(props: Props, fwdRef) { interactive ); + const [getInteractorStyle, setInteractorStyle] = + useInteractorStyle(getInteractor); + useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); + // handle renders const [renderRequested, setRenderRequested] = useState(false); const requestRender = () => setRenderRequested(true); @@ -202,6 +248,7 @@ export default forwardRef(function View(props: Props, fwdRef) { getInteractor, getAPISpecificRenderWindow: getRWView, getCamera, + setInteractorStyle, /** * Requests a vtk.js render. * @@ -217,7 +264,14 @@ export default forwardRef(function View(props: Props, fwdRef) { requestRender(); }, }; - }, [getRWView, getRenderer, getRenderWindow, getInteractor, getCamera]); + }, [ + getRWView, + getRenderer, + getRenderWindow, + getInteractor, + getCamera, + setInteractorStyle, + ]); // expose the view as a ref for imperative control useImperativeHandle(fwdRef, () => view); diff --git a/src/core-ts/View/useInteractorStyle.ts b/src/core-ts/View/useInteractorStyle.ts new file mode 100644 index 0000000..52d56c7 --- /dev/null +++ b/src/core-ts/View/useInteractorStyle.ts @@ -0,0 +1,149 @@ +import vtkGestureCameraManipulator from '@kitware/vtk.js/Interaction/Manipulators/GestureCameraManipulator'; +import vtkMouseBoxSelectorManipulator, { + IMouseBoxSelectorManipulatorInitialValues, +} from '@kitware/vtk.js/Interaction/Manipulators/MouseBoxSelectorManipulator'; +import vtkMouseCameraTrackballMultiRotateManipulator, { + IMouseCameraTrackballMultiRotateManipulatorInitialValues, +} from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballMultiRotateManipulator'; +import vtkMouseCameraTrackballPanManipulator, { + IMouseCameraTrackballPanManipulatorInitialValues, +} from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballPanManipulator'; +import vtkMouseCameraTrackballRollManipulator, { + IMouseCameraTrackballRollManipulatorInitialValues, +} from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballRollManipulator'; +import vtkMouseCameraTrackballRotateManipulator, { + IMouseCameraTrackballRotateManipulatorInitialValues, +} from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballRotateManipulator'; +import vtkMouseCameraTrackballZoomManipulator, { + IMouseCameraTrackballZoomManipulatorInitialValues, +} from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballZoomManipulator'; +import vtkMouseCameraTrackballZoomToMouseManipulator, { + IMouseCameraTrackballZoomToMouseManipulatorInitialValues, +} from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballZoomToMouseManipulator'; +import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; +import vtkInteractorStyleManipulator from '@kitware/vtk.js/Interaction/Style/InteractorStyleManipulator'; +import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; +import { Nullable } from '@kitware/vtk.js/types'; +import deepEqual from 'deep-equal'; +import { useEffect, useState } from 'react'; +import useComparableEffect from '../../utils-ts/useComparableEffect'; +import useGetterRef from '../../utils-ts/useGetterRef'; +import useUnmount from '../../utils-ts/useUnmount'; + +interface PanSettings extends IMouseCameraTrackballPanManipulatorInitialValues { + action: 'Pan'; +} + +interface ZoomSettings + extends IMouseCameraTrackballZoomManipulatorInitialValues { + action: 'Zoom'; +} + +interface RollSettings + extends IMouseCameraTrackballRollManipulatorInitialValues { + action: 'Roll'; +} + +interface RotateSettings + extends IMouseCameraTrackballRotateManipulatorInitialValues { + action: 'Rotate'; +} + +interface MultiRotateSettings + extends IMouseCameraTrackballMultiRotateManipulatorInitialValues { + action: 'MultiRotate'; +} + +interface ZoomToMouseSettings + extends IMouseCameraTrackballZoomToMouseManipulatorInitialValues { + action: 'ZoomToMouse'; +} + +interface SelectSettings extends IMouseBoxSelectorManipulatorInitialValues { + action: 'Select'; +} + +export type ManipulatorSettings = + | PanSettings + | ZoomSettings + | RollSettings + | RotateSettings + | MultiRotateSettings + | ZoomToMouseSettings + | SelectSettings; + +const settingToManipulator = (setting: ManipulatorSettings) => { + switch (setting.action) { + case 'Pan': + return vtkMouseCameraTrackballPanManipulator.newInstance(setting); + case 'Zoom': + return vtkMouseCameraTrackballZoomManipulator.newInstance(setting); + case 'Roll': + return vtkMouseCameraTrackballRollManipulator.newInstance(setting); + case 'Rotate': + return vtkMouseCameraTrackballRotateManipulator.newInstance(setting); + case 'MultiRotate': + return vtkMouseCameraTrackballMultiRotateManipulator.newInstance(setting); + case 'ZoomToMouse': + return vtkMouseCameraTrackballZoomToMouseManipulator.newInstance(setting); + case 'Select': + return vtkMouseBoxSelectorManipulator.newInstance(setting); + } +}; + +export function useInteractorStyleManipulatorSettings( + getStyle: () => vtkInteractorStyle, + settings: ManipulatorSettings[] +) { + useComparableEffect( + () => { + if (getStyle().getClassName() !== 'vtkInteractorStyleManipulator') return; + const style = getStyle() as vtkInteractorStyleManipulator; + style.removeAllManipulators(); + // always add gestures + style.addGestureManipulator(vtkGestureCameraManipulator.newInstance()); + + settings.forEach((setting) => { + const manip = settingToManipulator(setting); + // TODO on box select change + style.addMouseManipulator(manip); + }); + }, + [settings], + ([cur], [prev]) => deepEqual(cur, prev) + ); +} + +export function useInteractorStyle( + getInteractor: () => vtkRenderWindowInteractor +) { + const [externalStyle, setExternalStyle] = + useState>(null); + + const [styleRef, getStyle] = useGetterRef(() => { + setExternalStyle(null); + return vtkInteractorStyleManipulator.newInstance(); + }); + + useEffect(() => { + getInteractor().setInteractorStyle(getStyle()); + }); + + useUnmount(() => { + if (styleRef.current && !externalStyle) { + styleRef.current.delete(); + styleRef.current = null; + } + }); + + const setStyle = (style: vtkInteractorStyle) => { + if (!externalStyle && styleRef.current) { + styleRef.current.delete(); + } + styleRef.current = style; + // should help retrigger effects dependent on the style + setExternalStyle(style); + }; + + return [getStyle, setStyle] as const; +} diff --git a/src/global.d.ts b/src/global.d.ts index 9842cf4..2ab80bd 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -10,3 +10,1481 @@ declare module '@kitware/vtk.js/Rendering/Core/CubeAxesActor' { }; export default vtkCubeAxesActor; } + +declare module '@kitware/vtk.js/Interaction/Style/InteractorStyle/Constants' { + // TODO correct? + export enum States { + IS_START = 0, + IS_NONE = 0, + IS_ROTATE = 1, + IS_PAN = 2, + IS_SPIN = 3, + IS_DOLLY = 4, + IS_CAMERA_POSE = 11, + IS_WINDOW_LEVEL = 1024, + IS_SLICE = 1025, + } +} + +declare module '@kitware/vtk.js/Interaction/Style/InteractorStyle' { + import { EventHandler, vtkSubscription } from '@kitware/vtk.js/interfaces'; + import vtkInteractorObserver from '@kitware/vtk.js/Rendering/Core/InteractorObserver'; + + export interface vtkInteractorStyle extends vtkInteractorObserver { + /** + * Start a Rotate event. + */ + startRotate(): void; + + /** + * Invoke a StartRotate event. + */ + invokeStartRotateEvent(...args: unknown[]): void; + + /** + * Registers a callback on a StartRotate event. + */ + onStartRotateEvent(cb: EventHandler, priority?: number): vtkSubscription; + + /** + * Ends a Rotate event. + */ + endRotate(): void; + + /** + * Invoke an EndRotate event. + */ + invokeEndRotateEvent(...args: unknown[]): void; + + /** + * Registers a callback on an EndRotate event. + */ + onEndRotateEvent(cb: EventHandler, priority?: number): vtkSubscription; + /** + * Start a Pan event. + */ + startPan(): void; + + /** + * Invoke a StartPan event. + */ + invokeStartPanEvent(...args: unknown[]): void; + + /** + * Registers a callback on a StartPan event. + */ + onStartPanEvent(cb: EventHandler, priority?: number): vtkSubscription; + + /** + * Ends a Pan event. + */ + endPan(): void; + + /** + * Invoke an EndPan event. + */ + invokeEndPanEvent(...args: unknown[]): void; + + /** + * Registers a callback on an EndPan event. + */ + onEndPanEvent(cb: EventHandler, priority?: number): vtkSubscription; + /** + * Start a Spin event. + */ + startSpin(): void; + + /** + * Invoke a StartSpin event. + */ + invokeStartSpinEvent(...args: unknown[]): void; + + /** + * Registers a callback on a StartSpin event. + */ + onStartSpinEvent(cb: EventHandler, priority?: number): vtkSubscription; + + /** + * Ends a Spin event. + */ + endSpin(): void; + + /** + * Invoke an EndSpin event. + */ + invokeEndSpinEvent(...args: unknown[]): void; + + /** + * Registers a callback on an EndSpin event. + */ + onEndSpinEvent(cb: EventHandler, priority?: number): vtkSubscription; + /** + * Start a Dolly event. + */ + startDolly(): void; + + /** + * Invoke a StartDolly event. + */ + invokeStartDollyEvent(...args: unknown[]): void; + + /** + * Registers a callback on a StartDolly event. + */ + onStartDollyEvent(cb: EventHandler, priority?: number): vtkSubscription; + + /** + * Ends a Dolly event. + */ + endDolly(): void; + + /** + * Invoke an EndDolly event. + */ + invokeEndDollyEvent(...args: unknown[]): void; + + /** + * Registers a callback on an EndDolly event. + */ + onEndDollyEvent(cb: EventHandler, priority?: number): vtkSubscription; + /** + * Start a CameraPose event. + */ + startCameraPose(): void; + + /** + * Invoke a StartCameraPose event. + */ + invokeStartCameraPoseEvent(...args: unknown[]): void; + + /** + * Registers a callback on a StartCameraPose event. + */ + onStartCameraPoseEvent( + cb: EventHandler, + priority?: number + ): vtkSubscription; + + /** + * Ends a CameraPose event. + */ + endCameraPose(): void; + + /** + * Invoke an EndCameraPose event. + */ + invokeEndCameraPoseEvent(...args: unknown[]): void; + + /** + * Registers a callback on an EndCameraPose event. + */ + onEndCameraPoseEvent(cb: EventHandler, priority?: number): vtkSubscription; + /** + * Start a WindowLevel event. + */ + startWindowLevel(): void; + + /** + * Invoke a StartWindowLevel event. + */ + invokeStartWindowLevelEvent(...args: unknown[]): void; + + /** + * Registers a callback on a StartWindowLevel event. + */ + onStartWindowLevelEvent( + cb: EventHandler, + priority?: number + ): vtkSubscription; + + /** + * Ends a WindowLevel event. + */ + endWindowLevel(): void; + + /** + * Invoke an EndWindowLevel event. + */ + invokeEndWindowLevelEvent(...args: unknown[]): void; + + /** + * Registers a callback on an EndWindowLevel event. + */ + onEndWindowLevelEvent(cb: EventHandler, priority?: number): vtkSubscription; + /** + * Start a Slice event. + */ + startSlice(): void; + + /** + * Invoke a StartSlice event. + */ + invokeStartSliceEvent(...args: unknown[]): void; + + /** + * Registers a callback on a StartSlice event. + */ + onStartSliceEvent(cb: EventHandler, priority?: number): vtkSubscription; + + /** + * Ends a Slice event. + */ + endSlice(): void; + + /** + * Invoke an EndSlice event. + */ + invokeEndSliceEvent(...args: unknown[]): void; + + /** + * Registers a callback on an EndSlice event. + */ + onEndSliceEvent(cb: EventHandler, priority?: number): vtkSubscription; + + /** + * Handles a keypress. + */ + handleKeyPress(callData: unknown): void; + } + + export interface IInteractorStyleInitialValues { + autoAdjustCameraClippingRange?: boolean; + } + + export function extend( + publicAPI: object, + model: object, + initialValues?: IInteractorStyleInitialValues + ): void; + + export const vtkInteractorStyle: { + extend: typeof extend; + }; + + export default vtkInteractorStyle; +} + +declare module '@kitware/vtk.js/Interaction/Style/InteractorStyleManipulator' { + import vtkCompositeGestureManipulator from '@kitware/vtk.js/Interaction/Manipulators/CompositeGestureManipulator'; + import vtkCompositeKeyboardManipulator from '@kitware/vtk.js/Interaction/Manipulators/CompositeKeyboardManipulator'; + import vtkCompositeMouseManipulator from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; + import vtkCompositeVRManipulator from '@kitware/vtk.js/Interaction/Manipulators/CompositeVRManipulator'; + import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; + import { + Device, + Input, + } from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor/Constants'; + import { Nullable, Vector3 } from '@kitware/vtk.js/types'; + + export interface vtkInteractorStyleManipulator extends vtkInteractorStyle { + /** + * Remove all manipulators. + */ + removeAllManipulators(): void; + + /** + * Remove mouse manipulators. + */ + removeAllMouseManipulators(): void; + + /** + * Remove keyboard manipulators. + */ + removeAllKeyboardManipulators(): void; + + /** + * Remove VR manipulators. + */ + removeAllVRManipulators(): void; + + /** + * Remove gesture manipulators. + */ + removeAllGestureManipulators(): void; + + /** + * Adds a mouse manipulator. + * @param manipulator the manipulator to add + * @returns whether the manipulator has been added + */ + addMouseManipulator(manipulator: vtkCompositeMouseManipulator): boolean; + + /** + * Adds a keyboard manipulator. + * @param manipulator the manipulator to add + * @returns whether the manipulator has been added + */ + addKeyboardManipulator( + manipulator: vtkCompositeKeyboardManipulator + ): boolean; + + /** + * Adds a VR manipulator. + * @param manipulator the manipulator to add + * @returns whether the manipulator has been added + */ + addVRManipulator(manipulator: vtkCompositeVRManipulator): boolean; + + /** + * Adds a gesture manipulator. + * @param manipulator the manipulator to add + * @returns whether the manipulator has been added + */ + addGestureManipulator(manipulator: vtkCompositeGestureManipulator): boolean; + + /** + * Removes a mouse manipulator. + * @param manipulator the manipulator to remove + */ + removeMouseManipulator(manipulator: vtkCompositeMouseManipulator): void; + + /** + * Removes a keyboard manipulator. + * @param manipulator the manipulator to remove + */ + removeKeyboardManipulator( + manipulator: vtkCompositeKeyboardManipulator + ): void; + + /** + * Removes a VR manipulator. + * @param manipulator the manipulator to remove + */ + removeVRManipulator(manipulator: vtkCompositeVRManipulator): void; + + /** + * Removes a gesture manipulator. + * @param manipulator the manipulator to remove + */ + removeGestureManipulator(manipulator: vtkCompositeGestureManipulator): void; + + /** + * Gets the number of mouse manipulators. + */ + getNumberOfMouseManipulators(): number; + + /** + * Gets the number of keyboard manipulators. + */ + getNumberOfKeyboardManipulators(): number; + + /** + * Gets the number of VR manipulators. + */ + getNumberOfVRManipulators(): number; + + /** + * Gets the number of gesture manipulators. + */ + getNumberOfGestureManipulators(): number; + + /** + * Resets/clears the current manipulator. + */ + resetCurrentManipulator(): void; + + /** + * Finds a mouse manipulator with a given control set. + * @param button which button + * @param shift shift enabled + * @param scroll scroll enabled + * @param alt alt enabled + */ + findMouseManipulator( + button: number, + shift: boolean, + scroll: boolean, + alt: boolean + ): Nullable; + + /** + * Finds a VR manipulator with a given device + input. + * @param device + * @param input + */ + findVRManipulator( + device: Device, + input: Input + ): Nullable; + + /** + * Handles a left button press event. + * @param callData event data + */ + handleLeftButtonPress(callData: unknown): void; + + /** + * Handles a middle button press event. + * @param callData event data + */ + handleMiddleButtonPress(callData: unknown): void; + + /** + * Handles a right button press event. + * @param callData event data + */ + handleRightButtonPress(callData: unknown): void; + + /** + * Handles a left button release event. + * @param callData event data + */ + handleLeftButtonRelease(callData: unknown): void; + + /** + * Handles a middle button release event. + * @param callData event data + */ + handleMiddleButtonRelease(callData: unknown): void; + + /** + * Handles a right button release event. + * @param callData event data + */ + handleRightButtonRelease(callData: unknown): void; + + /** + * Handles the start of a wheel event. + * @param callData event data + */ + handleStartMouseWheel(callData: unknown): void; + + /** + * Handles a wheel event. + * @param callData event data + */ + handleMouseWheel(callData: unknown): void; + + /** + * Handles the end of a wheel event. + * @param callData event data + */ + handleEndMouseWheel(callData: unknown): void; + + /** + * Handles a mouse move. + * @param callData event data + */ + handleMouseMove(callData: unknown): void; + + /** + * Handles a 3D button event. + * @param callData event data + */ + handleButton3D(ed: unknown): void; + + /** + * Handles a 3D move event. + * @param ed event data + */ + handleMove3D(ed: unknown): void; + + /** + * Handles a keypress. + * @param callData event data + */ + handleKeyPress(callData: unknown): void; + + /** + * Handles a keydown event. + * @param callData event data + */ + handleKeyDown(callData: unknown): void; + + /** + * Handles a keyup event. + * @param callData event data + */ + handleKeyUp(callData: unknown): void; + + /** + * Handles the start of a pinch gesture. + * @param callData event data + */ + handleStartPinch(callData: unknown): void; + + /** + * Handles the end of a pinch gesture. + * @param callData event data + */ + handleEndPinch(callData: unknown): void; + + /** + * Handles the start of a rotate gesture. + * @param callData event data + */ + handleStartRotate(callData: unknown): void; + + /** + * Handles the end of a rotate gesture. + * @param callData event data + */ + handleEndRotate(callData: unknown): void; + + /** + * Handles the start of a pan gesture. + * @param callData event data + */ + handleStartPan(callData: unknown): void; + + /** + * Handles the end of a pan gesture. + * @param callData event data + */ + handleEndPan(callData: unknown): void; + + /** + * Handles a pinch gesture. + * @param callData event data + */ + handlePinch(callData: unknown): void; + + /** + * Handles a rotate gesture. + * @param callData event data + */ + handleRotate(callData: unknown): void; + + /** + * Handles a pan gesture. + * @param callData event data + */ + handlePan(callData: unknown): void; + + /** + * Handles a button down event. + * @param button which button + * @param callData event data + */ + onButtonDown(button: number, callData: unknown): void; + + /** + * Handles a button up event. + * @param button which button + */ + onButtonUp(button: number): void; + + /** + * Sets the rotation factor. + * @param factor rotation factor + */ + setRotationFactor(factor: number): boolean; + + /** + * Gets the rotation factor. + */ + getRotationFactor(): number; + + getMouseManipulators(): vtkCompositeMouseManipulator[]; + getMouseManipulators(): vtkCompositeMouseManipulator[]; + getMouseManipulators(): vtkCompositeMouseManipulator[]; + getMouseManipulators(): vtkCompositeMouseManipulator[]; + } + + export interface IInteractorStyleManipulatorInitialValues { + centerOfRotation?: Vector3; + rotationFactor?: number; + } + + export function newInstance( + initialValues?: IInteractorStyleManipulatorInitialValues + ): vtkInteractorStyleManipulator; + + export function extend( + publicAPI: object, + model: object, + initialValues?: IInteractorStyleManipulatorInitialValues + ): void; + + export const vtkInteractorStyleManipulator: { + newInstance: typeof newInstance; + extend: typeof extend; + }; + + export default vtkInteractorStyleManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator' { + import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; + import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; + + export interface vtkCompositeMouseManipulator { + /** + * Starts an interaction event. + */ + startInteraction(): void; + + /** + * Ends an interaction event. + */ + endInteraction(): void; + + /** + * Handles a button down event. + * @param interactor the interactor + * @param renderer the renderer + * @param position the display position + */ + onButtonDown( + interactor: vtkRenderWindowInteractor, + renderer: vtkRenderer, + position: { x: number; y: number } + ): void; + + /** + * Handles a button up event. + * @param interactor the interactor + */ + onButtonUp(interactor: vtkRenderWindowInteractor): void; + + /** + * Handles a mouse move event. + * @param interactor the interactor + * @param renderer the renderer + * @param position the display position + */ + onMouseMove( + interactor: vtkRenderWindowInteractor, + renderer: vtkRenderer, + position: { x: number; y: number } + ): void; + + /** + * Handles a start scroll event. + * @param interactor the interactor + * @param renderer the renderer + * @param delta the scroll delta + */ + onStartScroll( + interactor: vtkRenderWindowInteractor, + renderer: vtkRenderer, + delta: number + ): void; + + /** + * Handles a scroll event. + * @param interactor the interactor + */ + onEndScroll(interactor: vtkRenderWindowInteractor): void; + + /** + * Is drag enabled. + */ + isDragEnabled(): boolean; + + /** + * Sets if drag is enabled. + * @param enabled + */ + setDragEnabled(enabled: boolean): boolean; + + /** + * Is scroll enabled. + */ + isScrollEnabled(): boolean; + + /** + * Sets if scroll is enabled. + * @param enabled + */ + setScrollEnabled(enabled: boolean): boolean; + + /** + * Sets the associated button. + * @param btn + */ + setButton(btn: number): boolean; + + /** + * Gets the associated button. + */ + getButton(): number; + + /** + * Sets if the shift key is required. + * @param shift + */ + setShift(shift: boolean): boolean; + + /** + * Gets flag if shift key is required. + */ + getShift(): boolean; + + /** + * Sets if the control key is required. + * @param ctrl + */ + setControl(ctrl: boolean): boolean; + + /** + * Gets flag if control key is required. + */ + getControl(): boolean; + + /** + * Sets if the alt key is required. + * @param alt + */ + setAlt(alt: boolean): boolean; + + /** + * Gets flag if alt key is required. + */ + getAlt(): boolean; + } + + export interface ICompositeMouseManipulatorInitialValues { + button?: number; + shift?: boolean; + control?: boolean; + alt?: boolean; + dragEnabled?: boolean; + scrollEnabled?: boolean; + } + + export function extend( + publicAPI: object, + model: object, + initialValues?: ICompositeMouseManipulatorInitialValues + ): void; + + export const vtkCompositeMouseManipulator: { + extend: typeof extend; + }; + + export default vtkCompositeMouseManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/CompositeKeyboardManipulator' { + import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; + import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; + + export interface vtkCompositeKeyboardManipulator { + /** + * Handles a keypress event. + * @param interactor the interactor + * @param renderer the renderer + * @param key the key + */ + onKeyPress( + interactor: vtkRenderWindowInteractor, + renderer: vtkRenderer, + key: KeyboardEvent['key'] + ): void; + + /** + * Handles a keydown event. + * @param interactor the interactor + * @param renderer the renderer + * @param key the key + */ + onKeyDown( + interactor: vtkRenderWindowInteractor, + renderer: vtkRenderer, + key: KeyboardEvent['key'] + ): void; + + /** + * Handles a keyup event. + * @param interactor the interactor + * @param renderer the renderer + * @param key the key + */ + onKeyUp( + interactor: vtkRenderWindowInteractor, + renderer: vtkRenderer, + key: KeyboardEvent['key'] + ): void; + } + + export function extend(publicAPI: object, model: object): void; + + export const vtkCompositeKeyboardManipulator: { + extend: typeof extend; + }; + + export default vtkCompositeKeyboardManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/CompositeGestureManipulator' { + import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; + import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; + import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; + import { Nullable } from '@kitware/vtk.js/types'; + + export interface vtkCompositeGestureManipulator { + /** + * Starts an interaction event. + */ + startInteraction(): void; + + /** + * Ends an interaction event. + */ + endInteraction(): void; + + /** + * Handles a start pinch gesture. + * @param interactor + * @param scale + */ + onStartPinch(interactor: vtkRenderWindowInteractor, scale: number): void; + + /** + * Handles a pinch gesture. + * @param interactor + * @param renderer + * @param scale + */ + onPinch( + interactor: vtkRenderWindowInteractor, + renderer: vtkRenderer, + scale: number + ): void; + + /** + * Handles an end pinch gesture. + * @param interactor + */ + onEndPinch(interactor: vtkRenderWindowInteractor): void; + + /** + * Handles a start rotate gesture. + * @param interactor + * @param rotation + */ + onStartRotate( + interactor: vtkRenderWindowInteractor, + rotation: number + ): void; + + /** + * Handles a rotate gesture. + * @param interactor + * @param renderer + * @param rotation + */ + onRotate( + interactor: vtkRenderWindowInteractor, + renderer: vtkRenderer, + rotation: number + ): void; + + /** + * Handles an end pinch gesture. + * @param interactor + */ + onEndRotate(interactor: vtkRenderWindowInteractor): void; + + /** + * Handles a start pan gesture. + * @param interactor + * @param translation + */ + onStartPan( + interactor: vtkRenderWindowInteractor, + translation: number + ): void; + + /** + * Handles a pan gesture. + * @param interactor + * @param renderer + * @param translation + */ + onPan( + interactor: vtkRenderWindowInteractor, + renderer: vtkRenderer, + translation: number + ): void; + + /** + * Handles an end pan gesture. + * @param interactor + */ + onEndPan(interactor: vtkRenderWindowInteractor): void; + + /** + * Is pinch enabled. + */ + isPinchEnabled(): boolean; + + /** + * Sets if pinch is enabled. + * @param pinch + */ + setPinchEnabled(pinch: boolean): boolean; + + /** + * Gets flag if pinch is enabled. + */ + getPinchEnabled(): boolean; + + /** + * Is pan enabled. + */ + isPanEnabled(): boolean; + + /** + * Sets if pan is enabled. + * @param pan + */ + setPanEnabled(pan: boolean): boolean; + + /** + * Gets flag if pan is enabled. + */ + getPanEnabled(): boolean; + + /** + * Is rotate enabled. + */ + isRotateEnabled(): boolean; + + /** + * Sets if rotate is enabled. + * @param rotate + */ + setRotateEnabled(rotate: boolean): boolean; + + /** + * Gets flag if rotate is enabled. + */ + getRotateEnabled(): boolean; + + /** + * Sets the interactor style. + * @param style vtkInteractorStyle + */ + setInteractorStyle(style: Nullable): boolean; + + /** + * Gets the interactor style. + */ + getInteractorStyle(): Nullable; + } + + export interface ICompositeGestureManipulatorInitialValues { + pinchEnabled?: boolean; + panEnabled?: boolean; + rotateEnabled?: boolean; + } + + export function extend( + publicAPI: object, + model: object, + initialValues?: ICompositeGestureManipulatorInitialValues + ): void; + + export const vtkCompositeGestureManipulator: { + extend: typeof extend; + }; + + export default vtkCompositeGestureManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/CompositeVRManipulator' { + import { States } from '@kitware/vtk.js/Interaction/Style/InteractorStyle/Constants'; + import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; + import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; + + import { + Device, + Input, + } from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor/Constants'; + + export interface vtkCompositeVRManipulator { + onButton3D( + interactor: vtkRenderWindowInteractor, + renderer: vtkRenderer, + state: States, + device: Device, + input: Input, + pressed: boolean + ): void; + + onMove3D( + interactor: vtkRenderWindowInteractor, + renderer: vtkRenderer, + state: States, + device: Device, + input: Input, + pressed: boolean + ): void; + } + + export interface ICompositeVRManipulatorInitialValues { + device?: Device; + input?: Input; + } + + export function extend( + publicAPI: object, + model: object, + initialValues?: ICompositeVRManipulatorInitialValues + ): void; + + export const vtkCompositeVRManipulator: { + extend: typeof extend; + }; + + export default vtkCompositeVRManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator' { + import vtkInteractorObserver from '@kitware/vtk.js/Rendering/Core/InteractorObserver'; + import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; + import { Vector2, Vector3 } from '@kitware/vtk.js/types'; + + export interface vtkCompositeCameraManipulator { + /** + * Computes the display center. + * @param observer + * @param renderer + */ + computeDisplayCenter( + observer: vtkInteractorObserver, + renderer: vtkRenderer + ): void; + + /** + * Sets the rotation factor. + * @param factor + */ + setRotationFactor(factor: number): boolean; + + /** + * Gets the rotation factor. + */ + getRotationFactor(): number; + + /** + * Sets the display center. + * @param center + */ + setDisplayCenter(center: Vector2): boolean; + setDisplayCenter(x: number, y: number): boolean; + + /** + * Gets the display center. + */ + getDisplayCenter(): Vector2; + + /** + * Sets the center. + * @param center + */ + setCenter(center: Vector3): boolean; + setCenter(x: number, y: number, z: number): boolean; + + /** + * Gets the center. + */ + getCenter(): Vector3; + } + + export interface ICompositeCameraManipulatorInitialValues { + center?: Vector3; + rotationFactor?: number; + displayCenter?: Vector2; + } + + export function extend( + publicAPI: object, + model: object, + initialValues?: ICompositeCameraManipulatorInitialValues + ): void; + + export const vtkCompositeCameraManipulator: { + extend: typeof extend; + }; + + export default vtkCompositeCameraManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballPanManipulator' { + import vtkCompositeCameraManipulator, { + ICompositeCameraManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator'; + import vtkCompositeMouseManipulator, { + ICompositeMouseManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; + import { vtkObject } from '@kitware/vtk.js/interfaces'; + + export interface vtkMouseCameraTrackballPanManipulator + extends vtkObject, + vtkCompositeCameraManipulator, + vtkCompositeMouseManipulator {} + + export interface IMouseCameraTrackballPanManipulatorInitialValues + extends ICompositeCameraManipulatorInitialValues, + ICompositeMouseManipulatorInitialValues {} + + export function newInstance( + initialValues?: IMouseCameraTrackballPanManipulatorInitialValues + ): vtkMouseCameraTrackballPanManipulator; + + export function extend( + publicAPI: object, + model: object, + initialValues?: IMouseCameraTrackballPanManipulatorInitialValues + ): void; + + export const vtkMouseCameraTrackballPanManipulator: { + newInstance: typeof newInstance; + extend: typeof extend; + }; + + export default vtkMouseCameraTrackballPanManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballRollManipulator' { + import vtkCompositeCameraManipulator, { + ICompositeCameraManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator'; + import vtkCompositeMouseManipulator, { + ICompositeMouseManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; + import { vtkObject } from '@kitware/vtk.js/interfaces'; + + export interface vtkMouseCameraTrackballRollManipulator + extends vtkObject, + vtkCompositeCameraManipulator, + vtkCompositeMouseManipulator {} + + export interface IMouseCameraTrackballRollManipulatorInitialValues + extends ICompositeCameraManipulatorInitialValues, + ICompositeMouseManipulatorInitialValues {} + + export function newInstance( + initialValues?: IMouseCameraTrackballRollManipulatorInitialValues + ): vtkMouseCameraTrackballRollManipulator; + + export function extend( + publicAPI: object, + model: object, + initialValues?: IMouseCameraTrackballRollManipulatorInitialValues + ): void; + + export const vtkMouseCameraTrackballRollManipulator: { + newInstance: typeof newInstance; + extend: typeof extend; + }; + + export default vtkMouseCameraTrackballRollManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballRotateManipulator' { + import vtkCompositeCameraManipulator, { + ICompositeCameraManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator'; + import vtkCompositeMouseManipulator, { + ICompositeMouseManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; + import { vtkObject } from '@kitware/vtk.js/interfaces'; + import { Vector3 } from '@kitware/vtk.js/types'; + + export interface vtkMouseCameraTrackballRotateManipulator + extends vtkObject, + vtkCompositeCameraManipulator, + vtkCompositeMouseManipulator { + /** + * Sets whether to use a given world-up vector. + * @param use boolean + */ + setUseWorldUpVec(use: boolean): boolean; + + /** + * Sets the world-up vector. + * @param vec the world-up vector + */ + setWorldUpVec(vec: Vector3): boolean; + setWorldUpVec(x: number, y: number, z: number): boolean; + + /** + * Gets the world-up vector. + */ + getWorldUpVec(): Vector3; + + /** + * Gets whether to use the focal point as the center of rotation. + */ + getUseFocalPointAsCenterOfRotation(): boolean; + + /** + * Sets using the focal point as the center of rotation. + * @param useFocalPoint + */ + setUseFocalPointAsCenterOfRotation(useFocalPoint: boolean): boolean; + } + + export interface IMouseCameraTrackballRotateManipulatorInitialValues + extends ICompositeCameraManipulatorInitialValues, + ICompositeMouseManipulatorInitialValues { + useWorldUpVec?: boolean; + worldUpVec?: Vector3; + useFocalPointAsCenterOfRotation?: boolean; + } + + export function newInstance( + initialValues?: IMouseCameraTrackballRotateManipulatorInitialValues + ): vtkMouseCameraTrackballRotateManipulator; + + export function extend( + publicAPI: object, + model: object, + initialValues?: IMouseCameraTrackballRotateManipulatorInitialValues + ): void; + + export const vtkMouseCameraTrackballRotateManipulator: { + newInstance: typeof newInstance; + extend: typeof extend; + }; + + export default vtkMouseCameraTrackballRotateManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballMultiRotateManipulator' { + import vtkCompositeCameraManipulator, { + ICompositeCameraManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator'; + import vtkCompositeMouseManipulator, { + ICompositeMouseManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; + import { vtkObject } from '@kitware/vtk.js/interfaces'; + export interface vtkMouseCameraTrackballMultiRotateManipulator + extends vtkObject, + vtkCompositeCameraManipulator, + vtkCompositeMouseManipulator {} + + export interface IMouseCameraTrackballMultiRotateManipulatorInitialValues + extends ICompositeCameraManipulatorInitialValues, + ICompositeMouseManipulatorInitialValues {} + + export function newInstance( + initialValues?: IMouseCameraTrackballMultiRotateManipulatorInitialValues + ): vtkMouseCameraTrackballMultiRotateManipulator; + + export function extend( + publicAPI: object, + model: object, + initialValues?: IMouseCameraTrackballMultiRotateManipulatorInitialValues + ): void; + + export const vtkMouseCameraTrackballMultiRotateManipulator: { + newInstance: typeof newInstance; + extend: typeof extend; + }; + + export default vtkMouseCameraTrackballMultiRotateManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballZoomManipulator' { + import vtkCompositeCameraManipulator, { + ICompositeCameraManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator'; + import vtkCompositeMouseManipulator, { + ICompositeMouseManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; + import { vtkObject } from '@kitware/vtk.js/interfaces'; + export interface vtkMouseCameraTrackballZoomManipulator + extends vtkObject, + vtkCompositeCameraManipulator, + vtkCompositeMouseManipulator { + /** + * Sets whether to flip the zoom direction. + * @param flip + */ + setFlipDirection(flip: boolean): boolean; + + /** + * Gets the flip direction. + */ + getFlipDirection(): boolean; + } + + export interface IMouseCameraTrackballZoomManipulatorInitialValues + extends ICompositeCameraManipulatorInitialValues, + ICompositeMouseManipulatorInitialValues { + flipDirection?: boolean; + } + + export function newInstance( + initialValues?: IMouseCameraTrackballZoomManipulatorInitialValues + ): vtkMouseCameraTrackballZoomManipulator; + + export function extend( + publicAPI: object, + model: object, + initialValues?: IMouseCameraTrackballZoomManipulatorInitialValues + ): void; + + export const vtkMouseCameraTrackballZoomManipulator: { + newInstance: typeof newInstance; + extend: typeof extend; + }; + + export default vtkMouseCameraTrackballZoomManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballZoomToMouseManipulator' { + import vtkMouseCameraTrackballZoomManipulator, { + IMouseCameraTrackballZoomManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballZoomManipulator'; + + export type vtkMouseCameraTrackballZoomToMouseManipulator = + vtkMouseCameraTrackballZoomManipulator; + + export type IMouseCameraTrackballZoomToMouseManipulatorInitialValues = + IMouseCameraTrackballZoomManipulatorInitialValues; + + export function newInstance( + initialValues?: IMouseCameraTrackballZoomToMouseManipulatorInitialValues + ): vtkMouseCameraTrackballZoomToMouseManipulator; + + export function extend( + publicAPI: object, + model: object, + initialValues?: IMouseCameraTrackballZoomToMouseManipulatorInitialValues + ): void; + + export const vtkMouseCameraTrackballZoomToMouseManipulator: { + newInstance: typeof newInstance; + extend: typeof extend; + }; + + export default vtkMouseCameraTrackballZoomToMouseManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/MouseBoxSelectorManipulator' { + import vtkCompositeMouseManipulator, { + ICompositeMouseManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; + import { + EventHandler, + vtkObject, + vtkSubscription, + } from '@kitware/vtk.js/interfaces'; + import { Nullable } from '@kitware/vtk.js/types'; + + export interface vtkMouseBoxSelectorManipulator + extends vtkObject, + vtkCompositeMouseManipulator { + /** + * Invokes a box select change event. + */ + invokeBoxSelectChange(data: unknown): void; + + /** + * Registers a callback when a box select change event occurs. + * @param cb EventHandler + */ + onBoxSelectChange(cb: EventHandler): vtkSubscription; + + /** + * Invokes a box select input event. + */ + invokeBoxSelectInput(data: unknown): void; + + /** + * Registers a callback when a box select input event occurs. + * @param cb EventHandler + */ + onBoxSelectInput(cb: EventHandler): vtkSubscription; + + /** + * Sets whether to render the selection. + * @param render + */ + setRenderSelection(render: boolean): boolean; + + /** + * Get whether to render the selection. + */ + getRenderSelection(): boolean; + + /** + * Sets the selection box style. + * @param style + */ + setSelectionStyle(style: Record): boolean; + + /** + * Gets the selection box style. + */ + getSelectionStyle(): Record; + + /** + * Sets the box container. + * @param container + */ + setContainer(container: Element): boolean; + + /** + * Gets the box container. + */ + getContainer(): Nullable; + } + + export interface IMouseBoxSelectorManipulatorInitialValues + extends ICompositeMouseManipulatorInitialValues { + renderSelection?: boolean; + selectionStyle?: Record; + container?: Element; + } + + export function newInstance( + initialValues?: IMouseBoxSelectorManipulatorInitialValues + ): vtkMouseBoxSelectorManipulator; + + export function extend( + publicAPI: object, + model: object, + initialValues?: IMouseBoxSelectorManipulatorInitialValues + ): void; + + export const vtkMouseBoxSelectorManipulator: { + newInstance: typeof newInstance; + extend: typeof extend; + }; + + export default vtkMouseBoxSelectorManipulator; +} + +declare module '@kitware/vtk.js/Interaction/Manipulators/GestureCameraManipulator' { + import vtkCompositeCameraManipulator, { + ICompositeCameraManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator'; + import vtkCompositeGestureManipulator, { + ICompositeGestureManipulatorInitialValues, + } from '@kitware/vtk.js/Interaction/Manipulators/CompositeGestureManipulator'; + import { vtkObject } from '@kitware/vtk.js/interfaces'; + export interface vtkGestureCameraManipulator + extends vtkObject, + vtkCompositeCameraManipulator, + vtkCompositeGestureManipulator {} + + export interface IGestureCameraManipulatorInitialValues + extends ICompositeCameraManipulatorInitialValues, + ICompositeGestureManipulatorInitialValues { + flipDirection?: boolean; + } + + export function newInstance( + initialValues?: IGestureCameraManipulatorInitialValues + ): vtkGestureCameraManipulator; + + export function extend( + publicAPI: object, + model: object, + initialValues?: IGestureCameraManipulatorInitialValues + ): void; + + export const vtkGestureCameraManipulator: { + newInstance: typeof newInstance; + extend: typeof extend; + }; + + export default vtkGestureCameraManipulator; +} From a373b8ff84d970954454741d7510f6c900faabab Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 27 Oct 2022 17:56:59 -0400 Subject: [PATCH 009/110] fix(ts/View): set camera props in correct order --- src/core-ts/View/useCamera.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/core-ts/View/useCamera.ts b/src/core-ts/View/useCamera.ts index d7a80fc..fe917e3 100644 --- a/src/core-ts/View/useCamera.ts +++ b/src/core-ts/View/useCamera.ts @@ -1,5 +1,6 @@ import { ICameraInitialValues } from '@kitware/vtk.js/Rendering/Core/Camera'; import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; +import { Vector3 } from '@kitware/vtk.js/types'; import { useCallback } from 'react'; import { compareShallowObject } from '../../utils-ts/comparators'; import useComparableEffect from '../../utils-ts/useComparableEffect'; @@ -19,7 +20,20 @@ export default function useCamera( if (!cameraProps) return; const camera = getCamera(); const mtime = camera.getMTime(); + camera.set(cameraProps); + + // force-set focal point and direction of projection, + // as setting the position changes the focal point and dop + if (cameraProps.directionOfProjection) { + camera.setDirectionOfProjection( + ...(cameraProps.directionOfProjection as Vector3) + ); + } + if (cameraProps.focalPoint) { + camera.setFocalPoint(...(cameraProps.focalPoint as Vector3)); + } + // camera.set doesn't return whether a change occurred, // since setPosition/etc. don't return this flag. if (mtime < camera.getMTime()) { From 73ca10c28918e88a9e8944e90979a011c599002b Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 27 Oct 2022 18:13:09 -0400 Subject: [PATCH 010/110] fix(ts): add default props to previous props This avoids an infinite useEffect/setState loop via the modified flag. --- src/core-ts/DataArray.ts | 18 ++++++++---------- src/core-ts/PolyData.tsx | 15 +++++++++++---- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/core-ts/DataArray.ts b/src/core-ts/DataArray.ts index 1f59bfa..8a81010 100644 --- a/src/core-ts/DataArray.ts +++ b/src/core-ts/DataArray.ts @@ -1,16 +1,14 @@ import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray'; -import { useEffect } from 'react'; -import { usePrevious } from '../utils-ts/usePrevious'; +import { vtkRange } from '@kitware/vtk.js/interfaces'; import { TYPED_ARRAYS } from '@kitware/vtk.js/macros'; -import { useDataset, useFieldData } from './contexts'; -import { toTypedArray, TypedArrayLookup } from '../utils-ts'; +import { useEffect } from 'react'; import { DataArrayValues } from '../types'; -import { vtkRange } from '@kitware/vtk.js/interfaces'; -import useUnmount from '../utils-ts/useUnmount'; -import { useOrderedUnmountEffect } from '../utils-ts/useOrderedUnmountEffect'; +import { toTypedArray, TypedArrayLookup } from '../utils-ts'; import useGetterRef from '../utils-ts/useGetterRef'; - -// ----- +import { useOrderedUnmountEffect } from '../utils-ts/useOrderedUnmountEffect'; +import { usePrevious } from '../utils-ts/usePrevious'; +import useUnmount from '../utils-ts/useUnmount'; +import { useDataset, useFieldData } from './contexts'; interface Props { /** @@ -52,7 +50,7 @@ const DefaultProps = { }; export default function DataArray(props: Props) { - const prev = usePrevious(props); + const prev = usePrevious({ ...DefaultProps, ...props }); const [daRef, getDataArray] = useGetterRef(() => vtkDataArray.newInstance({ diff --git a/src/core-ts/PolyData.tsx b/src/core-ts/PolyData.tsx index 95b70bc..3270cdf 100644 --- a/src/core-ts/PolyData.tsx +++ b/src/core-ts/PolyData.tsx @@ -85,17 +85,22 @@ interface Props extends PropsWithChildren { connectivity?: string; } +const DefaultProps = { + port: 0, + points: [], + connectivity: 'manual', +}; + export default forwardRef(function PolyData(props: Props, fwdRef) { const { - port = 0, - points = [], - connectivity = 'manual', + port = DefaultProps.port, + points = DefaultProps.points, + connectivity = DefaultProps.connectivity, verts, lines, polys, strips, } = props; - const prev = usePrevious(props); const [pdRef, getPolyData] = useGetterRef(() => vtkPolyData.newInstance()); @@ -126,6 +131,8 @@ export default forwardRef(function PolyData(props: Props, fwdRef) { useImperativeHandle(fwdRef, () => dataset); + const prev = usePrevious({ ...DefaultProps, ...props }); + // update polydata useEffect(() => { const polyData = getPolyData(); From b111a3adb27a8e507c07731a524434711397a9b9 Mon Sep 17 00:00:00 2001 From: Forrest Date: Fri, 11 Nov 2022 12:39:32 -0500 Subject: [PATCH 011/110] refactor: create reusable modules --- src/core-ts/GeometryRepresentation.tsx | 200 +++++------------- .../modules/useColorTransferFunction.ts | 42 ++++ src/core-ts/modules/useMapper.ts | 35 +++ src/core-ts/modules/useProp.ts | 69 ++++++ src/types/index.ts | 4 +- 5 files changed, 198 insertions(+), 152 deletions(-) create mode 100644 src/core-ts/modules/useColorTransferFunction.ts create mode 100644 src/core-ts/modules/useMapper.ts create mode 100644 src/core-ts/modules/useProp.ts diff --git a/src/core-ts/GeometryRepresentation.tsx b/src/core-ts/GeometryRepresentation.tsx index 50809eb..c7dd7b4 100644 --- a/src/core-ts/GeometryRepresentation.tsx +++ b/src/core-ts/GeometryRepresentation.tsx @@ -1,8 +1,6 @@ import vtkActor, { IActorInitialValues, } from '@kitware/vtk.js/Rendering/Core/Actor'; -import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; -import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'; import vtkMapper, { IMapperInitialValues, } from '@kitware/vtk.js/Rendering/Core/Mapper'; @@ -16,19 +14,15 @@ import { useMemo, useState, } from 'react'; -import { IRepresentation, IView } from '../types'; -import { compareShallowObject, compareVector2 } from '../utils-ts/comparators'; -import useBooleanAccumulator, { - BooleanAccumulator, -} from '../utils-ts/useBooleanAccumulator'; +import { IRepresentation } from '../types'; +import { compareShallowObject } from '../utils-ts/comparators'; +import useBooleanAccumulator from '../utils-ts/useBooleanAccumulator'; import useComparableEffect from '../utils-ts/useComparableEffect'; -import useGetterRef from '../utils-ts/useGetterRef'; -import { - useOrderedUnmountContext, - useOrderedUnmountEffect, -} from '../utils-ts/useOrderedUnmountEffect'; -import useUnmount from '../utils-ts/useUnmount'; +import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; import { DownstreamContext, RepresentationContext, useView } from './contexts'; +import useColorTransferFunction from './modules/useColorTransferFunction'; +import useMapper from './modules/useMapper'; +import useProp from './modules/useProp'; interface Props extends PropsWithChildren { /** @@ -178,124 +172,67 @@ function useCubeAxes( } */ -function useLookupTable(props: Props, trackModified: BooleanAccumulator) { - const [lutRef, getLUT] = useGetterRef(() => - vtkColorTransferFunction.newInstance() - ); +export default forwardRef(function GeometryRepresentation( + props: Props, + fwdRef +) { + const OrderedUnmountContext = useOrderedUnmountContext(); + + /* const { - colorDataRange: range = DefaultProps.colorDataRange, - colorMapPreset: presetName = DefaultProps.colorMapPreset, + // showCubeAxes = false, + // showScalarBar = false, + // scalarBarTitle = '', } = props; + */ + const view = useView(); + const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); + const [dataAvailable, setDataAvailable] = useState(false); - useComparableEffect( - () => { - if (!presetName || !range) return; - const lut = getLUT(); - const preset = vtkColorMaps.getPresetByName(presetName); - lut.applyColorMap(preset); - lut.setMappingRange(range[0], range[1]); - lut.updateRange(); - trackModified(true); - }, - [presetName, range] as const, - ([curPreset, curRange], [oldPreset, oldRange]) => - curPreset === oldPreset && compareVector2(curRange, oldRange) - ); + // --- LUT --- // - useUnmount(() => { - if (lutRef.current) { - lutRef.current.delete(); - lutRef.current = null; - } - }); + const getLookupTable = useColorTransferFunction( + props.colorMapPreset ?? DefaultProps.colorMapPreset, + props.colorDataRange ?? DefaultProps.colorDataRange, + trackModified + ); - return getLUT; -} + // --- mapper --- // -function useMapper( - getLookupTable: () => vtkColorTransferFunction, - props: Props, - trackModified: BooleanAccumulator -) { - const [mapperRef, getMapper] = useGetterRef(() => - vtkMapper.newInstance({ - lookupTable: getLookupTable(), - useLookupTableScalarRange: true, - } as IMapperInitialValues) + const getMapper = useMapper( + () => + vtkMapper.newInstance({ + lookupTable: getLookupTable(), + useLookupTableScalarRange: true, + } as IMapperInitialValues), + props.mapper, + trackModified ); - const { mapper: mapperProps } = props; useEffect(() => { getMapper().setLookupTable(getLookupTable()); }, [getMapper, getLookupTable]); - useComparableEffect( - () => { - if (!mapperProps) return; - trackModified(getMapper().set(mapperProps)); - }, - [mapperProps], - ([cur], [prev]) => compareShallowObject(cur, prev) - ); + // --- actor --- // - useUnmount(() => { - if (mapperRef.current) { - mapperRef.current.delete(); - mapperRef.current = null; - } + const actorProps = { + ...props.actor, + visibility: dataAvailable && (props.actor?.visibility ?? true), + }; + const getActor = useProp({ + constructor: () => vtkActor.newInstance({ visibility: false }), + view, + id: props.id, + props: actorProps, + trackModified, }); - return getMapper; -} - -function useActor( - view: IView, - getMapper: () => vtkMapper, - dataAvailable: boolean, - props: Props, - trackModified: BooleanAccumulator -) { - const [actorRef, getActor] = useGetterRef(() => - vtkActor.newInstance({ visibility: false }) - ); - const { id, actor: actorProps, property: propertyProps } = props; - - useEffect(() => { - getActor().set({ representationID: id }); - }, [id, getActor]); - useEffect(() => { getActor().setMapper(getMapper()); }, [getActor, getMapper]); - // add to renderer - useOrderedUnmountEffect(() => { - const actor = getActor(); - const renderer = view.getRenderer(); - renderer.addActor(actor); - return () => { - renderer.removeActor(actor); - }; - }, [view, getActor]); - - // set actor props - useComparableEffect( - () => { - if (!actorProps) return; - trackModified(getActor().set(actorProps)); - }, - [actorProps], - ([cur], [prev]) => compareShallowObject(cur, prev) - ); - - // handle visibility as a special case - const { visibility = true } = actorProps ?? {}; - useEffect(() => { - const visible = dataAvailable && visibility; - trackModified(getActor().setVisibility(visible)); - }, [dataAvailable, visibility, getActor, trackModified]); - // set actor property props + const { property: propertyProps } = props; useComparableEffect( () => { if (!propertyProps) return; @@ -305,48 +242,11 @@ function useActor( ([cur], [prev]) => compareShallowObject(cur, prev) ); - // cleanup on unmount - useUnmount(() => { - if (actorRef.current) { - actorRef.current.delete(); - actorRef.current = null; - } - }); - - return getActor; -} - -export default forwardRef(function GeometryRepresentation( - props: Props, - fwdRef -) { - const OrderedUnmountContext = useOrderedUnmountContext(); - - /* - const { - // showCubeAxes = false, - // showScalarBar = false, - // scalarBarTitle = '', - } = props; - */ - const view = useView(); - const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); - - const [dataAvailable, setDataAvailable] = useState(false); - - const getLookupTable = useLookupTable(props, trackModified); - const getMapper = useMapper(getLookupTable, props, trackModified); - const getActor = useActor( - view, - getMapper, - dataAvailable, - props, - trackModified - ); - // const scalarBarActor = useScalarBarActor(view, false, lookupTable); // const cubeAxes = useCubeAxes(view, false, mapper); + // --- // + useEffect(() => { if (view && modifiedRef.current) { view.requestRender(); diff --git a/src/core-ts/modules/useColorTransferFunction.ts b/src/core-ts/modules/useColorTransferFunction.ts new file mode 100644 index 0000000..8b742aa --- /dev/null +++ b/src/core-ts/modules/useColorTransferFunction.ts @@ -0,0 +1,42 @@ +import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; +import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'; +import { Vector2 } from '@kitware/vtk.js/types'; +import { compareVector2 } from '../../utils-ts/comparators'; +import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; +import useComparableEffect from '../../utils-ts/useComparableEffect'; +import useGetterRef from '../../utils-ts/useGetterRef'; +import useUnmount from '../../utils-ts/useUnmount'; + +export default function useColorTransferFunction( + presetName: string, + range: Vector2, + trackModified: BooleanAccumulator +) { + const [lutRef, getLUT] = useGetterRef(() => + vtkColorTransferFunction.newInstance() + ); + + useComparableEffect( + () => { + if (!presetName || !range) return; + const lut = getLUT(); + const preset = vtkColorMaps.getPresetByName(presetName); + lut.applyColorMap(preset); + lut.setMappingRange(range[0], range[1]); + lut.updateRange(); + trackModified(true); + }, + [presetName, range] as const, + ([curPreset, curRange], [oldPreset, oldRange]) => + curPreset === oldPreset && compareVector2(curRange, oldRange) + ); + + useUnmount(() => { + if (lutRef.current) { + lutRef.current.delete(); + lutRef.current = null; + } + }); + + return getLUT; +} diff --git a/src/core-ts/modules/useMapper.ts b/src/core-ts/modules/useMapper.ts new file mode 100644 index 0000000..76f22da --- /dev/null +++ b/src/core-ts/modules/useMapper.ts @@ -0,0 +1,35 @@ +import vtkAbstractMapper from '@kitware/vtk.js/Rendering/Core/AbstractMapper'; +import { compareShallowObject } from '../../utils-ts/comparators'; +import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; +import useComparableEffect from '../../utils-ts/useComparableEffect'; +import useGetterRef from '../../utils-ts/useGetterRef'; +import useUnmount from '../../utils-ts/useUnmount'; + +/** + * Returns a mapper getter. + */ +export default function useMapper( + constructor: () => M, + props: I | undefined, + trackModified: BooleanAccumulator +) { + const [mapperRef, getMapper] = useGetterRef(constructor); + + useComparableEffect( + () => { + if (!props) return; + trackModified(getMapper().set(props)); + }, + [props], + ([cur], [prev]) => compareShallowObject(cur, prev) + ); + + useUnmount(() => { + if (mapperRef.current) { + mapperRef.current.delete(); + mapperRef.current = null; + } + }); + + return getMapper; +} diff --git a/src/core-ts/modules/useProp.ts b/src/core-ts/modules/useProp.ts new file mode 100644 index 0000000..8b276ce --- /dev/null +++ b/src/core-ts/modules/useProp.ts @@ -0,0 +1,69 @@ +import vtkProp, { + IPropInitialValues, +} from '@kitware/vtk.js/Rendering/Core/Prop'; +import { useEffect } from 'react'; +import { IView } from '../../types'; +import { compareShallowObject } from '../../utils-ts/comparators'; +import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; +import useComparableEffect from '../../utils-ts/useComparableEffect'; +import useGetterRef from '../../utils-ts/useGetterRef'; +import { useOrderedUnmountEffect } from '../../utils-ts/useOrderedUnmountEffect'; +import useUnmount from '../../utils-ts/useUnmount'; + +/** + * Params to useProp. + */ +type Params = { + constructor: () => T; + view: IView; + id: string | undefined; + props: A | undefined; + trackModified: BooleanAccumulator; +}; + +/** + * Returns a vtkProp getter. + * + * Must be used in an ordered unmount context for + * proper unmount order. + */ +export default function useProp< + T extends vtkProp, + A extends IPropInitialValues +>({ constructor, view, id, props, trackModified }: Params) { + const [actorRef, getActor] = useGetterRef(constructor); + + useEffect(() => { + getActor().set({ representationID: id }); + }, [id, getActor]); + + // add to renderer + useOrderedUnmountEffect(() => { + const actor = getActor(); + const renderer = view.getRenderer(); + renderer.addActor(actor); + return () => { + renderer.removeActor(actor); + }; + }, [view, getActor]); + + // set actor props + useComparableEffect( + () => { + if (!props) return; + trackModified(getActor().set(props)); + }, + [props], + ([cur], [prev]) => compareShallowObject(cur, prev) + ); + + // cleanup on unmount + useUnmount(() => { + if (actorRef.current) { + actorRef.current.delete(); + actorRef.current = null; + } + }); + + return getActor; +} diff --git a/src/types/index.ts b/src/types/index.ts index dda3dc9..348e96d 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,7 +1,7 @@ import { vtkObject } from '@kitware/vtk.js/interfaces'; import vtkAbstractMapper from '@kitware/vtk.js/Rendering/Core/AbstractMapper'; -import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor'; import vtkCamera from '@kitware/vtk.js/Rendering/Core/Camera'; +import vtkProp from '@kitware/vtk.js/Rendering/Core/Prop'; import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow'; import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; @@ -47,7 +47,7 @@ export interface IView { } export interface IRepresentation< - A extends vtkActor = vtkActor, + A extends vtkProp = vtkProp, M extends vtkAbstractMapper = vtkAbstractMapper > { dataAvailable(): void; From bca7d71af8aca407468c20811143ee7d04f34059 Mon Sep 17 00:00:00 2001 From: Forrest Date: Fri, 11 Nov 2022 12:41:56 -0500 Subject: [PATCH 012/110] style: import order --- src/core-ts/contexts.ts | 6 +++--- src/index.ts | 3 ++- usage/src/Geometry/PolyDataViewer.jsx | 8 +++----- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/core-ts/contexts.ts b/src/core-ts/contexts.ts index 449951f..d1a84a3 100644 --- a/src/core-ts/contexts.ts +++ b/src/core-ts/contexts.ts @@ -1,9 +1,9 @@ -import { createContext, useContext } from 'react'; +import vtkDataSet from '@kitware/vtk.js/Common/DataModel/DataSet'; import vtkDataSetAttributes from '@kitware/vtk.js/Common/DataModel/DataSetAttributes'; import vtkFieldData from '@kitware/vtk.js/Common/DataModel/DataSetAttributes/FieldData'; -import vtkDataSet from '@kitware/vtk.js/Common/DataModel/DataSet'; import { Nullable } from '@kitware/vtk.js/types'; -import { IRepresentation, IView, IDownstream, IDataset } from '../types'; +import { createContext, useContext } from 'react'; +import { IDataset, IDownstream, IRepresentation, IView } from '../types'; export const FieldDataContext = createContext vtkDataSetAttributes | vtkFieldData>>(null); diff --git a/src/index.ts b/src/index.ts index d0e87b3..e64fdc0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,12 @@ import '@kitware/vtk.js/Rendering/Misc/RenderingAPIs'; -import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Volume'; import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Geometry'; import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Glyph'; +import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Volume'; export { default as Algorithm } from './core-ts/Algorithm'; export { default as DataArray } from './core-ts/DataArray'; export { default as GeometryRepresentation } from './core-ts/GeometryRepresentation'; export { default as PointData } from './core-ts/PointData'; export { default as PolyData } from './core-ts/PolyData'; +export { default as SliceRepresentation } from './core-ts/SliceRepresentation'; export { default as View } from './core-ts/View'; diff --git a/usage/src/Geometry/PolyDataViewer.jsx b/usage/src/Geometry/PolyDataViewer.jsx index 8fd8868..fac601a 100644 --- a/usage/src/Geometry/PolyDataViewer.jsx +++ b/usage/src/Geometry/PolyDataViewer.jsx @@ -1,15 +1,13 @@ -import React from 'react'; - import { - View, - GeometryRepresentation, Geometry2DRepresentation, + GeometryRepresentation, PolyData, + View, } from 'react-vtk-js'; +import { Coordinate } from '@kitware/vtk.js/Rendering/Core/Coordinate/Constants'; import { Representation } from '@kitware/vtk.js/Rendering/Core/Property/Constants'; import { DisplayLocation } from '@kitware/vtk.js/Rendering/Core/Property2D/Constants'; -import { Coordinate } from '@kitware/vtk.js/Rendering/Core/Coordinate/Constants'; // React complains about unique key prop but I don't see why function Example(props) { From 4fb11ddf462242331580e4708011befc8513013d Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 15 Nov 2022 11:57:32 -0500 Subject: [PATCH 013/110] fix(InteractorStyle): setStyle must be memoized --- src/core-ts/View/useInteractorStyle.ts | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/core-ts/View/useInteractorStyle.ts b/src/core-ts/View/useInteractorStyle.ts index 52d56c7..4256939 100644 --- a/src/core-ts/View/useInteractorStyle.ts +++ b/src/core-ts/View/useInteractorStyle.ts @@ -25,7 +25,7 @@ import vtkInteractorStyleManipulator from '@kitware/vtk.js/Interaction/Style/Int import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; import { Nullable } from '@kitware/vtk.js/types'; import deepEqual from 'deep-equal'; -import { useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import useComparableEffect from '../../utils-ts/useComparableEffect'; import useGetterRef from '../../utils-ts/useGetterRef'; import useUnmount from '../../utils-ts/useUnmount'; @@ -136,14 +136,17 @@ export function useInteractorStyle( } }); - const setStyle = (style: vtkInteractorStyle) => { - if (!externalStyle && styleRef.current) { - styleRef.current.delete(); - } - styleRef.current = style; - // should help retrigger effects dependent on the style - setExternalStyle(style); - }; + const setStyle = useCallback( + (style: vtkInteractorStyle) => { + if (!externalStyle && styleRef.current) { + styleRef.current.delete(); + } + styleRef.current = style; + // should help retrigger effects dependent on the style + setExternalStyle(style); + }, + [externalStyle, styleRef] + ); return [getStyle, setStyle] as const; } From 1fde03cfd75b412f91ddfd55db6879ca544ab0d1 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 15 Nov 2022 12:02:55 -0500 Subject: [PATCH 014/110] feat(ShareDataSet): initial implementation --- src/core-ts/GeometryRepresentation.tsx | 6 +- src/core-ts/ShareDataSet.tsx | 218 +++++++++++++++++++++++++ src/core-ts/contexts.ts | 16 +- src/index.ts | 5 + src/types/index.ts | 21 ++- 5 files changed, 253 insertions(+), 13 deletions(-) create mode 100644 src/core-ts/ShareDataSet.tsx diff --git a/src/core-ts/GeometryRepresentation.tsx b/src/core-ts/GeometryRepresentation.tsx index c7dd7b4..780fc8d 100644 --- a/src/core-ts/GeometryRepresentation.tsx +++ b/src/core-ts/GeometryRepresentation.tsx @@ -254,10 +254,8 @@ export default forwardRef(function GeometryRepresentation( } }); - const representation = useMemo>( + const representation = useMemo( () => ({ - getActor, - getMapper, dataChanged: () => { view.requestRender(); }, @@ -266,7 +264,7 @@ export default forwardRef(function GeometryRepresentation( representation.dataChanged(); }, }), - [view, getActor, getMapper] + [view] ); useImperativeHandle(fwdRef, () => representation); diff --git a/src/core-ts/ShareDataSet.tsx b/src/core-ts/ShareDataSet.tsx new file mode 100644 index 0000000..75fb894 --- /dev/null +++ b/src/core-ts/ShareDataSet.tsx @@ -0,0 +1,218 @@ +/** + * + * + * + * + * + * + * + */ + +import { vtkObject } from '@kitware/vtk.js/interfaces'; +import { + PropsWithChildren, + useCallback, + useEffect, + useMemo, + useRef, +} from 'react'; +import { + DataCallback, + IDownstream, + IRepresentation, + IShareDataset, +} from '../types'; +import useUnmount from '../utils-ts/useUnmount'; +import { + DownstreamContext, + RepresentationContext, + ShareDataSetContext, + useDownstream, + useRepresentation, + useShareDataSet, +} from './contexts'; + +const DATA_AVAILABLE_EVENT = 'dataAvailable'; +const DATA_CHANGED_EVENT = 'dataChanged'; + +interface DataEventDetails { + name: string; +} + +export function ShareDataSetRoot(props: PropsWithChildren) { + const datasets = useRef>(new Map()); + const eventTarget = useRef(new EventTarget()); + // Used to notify UseDataSet components that register + // after the DATA_AVAILABLE_EVENT occurs. + const dataAvailable = useRef(new Set()); + + useUnmount(() => { + datasets.current.clear(); + dataAvailable.current.clear(); + }); + + type RegistrarOptions = { + immediate: boolean | ((name: string) => boolean); + }; + + const createDataEventRegistrar = useCallback( + (event: string, options?: RegistrarOptions) => { + return function addListener(name: string, callback: DataCallback) { + const invoke = () => { + callback(datasets.current.get(name) ?? null); + }; + + const handler = (ev: Event) => { + if (!(ev instanceof CustomEvent)) return; + if (name === ev.detail?.name) { + invoke(); + } + }; + + let immediate = false; + if (typeof options?.immediate === 'boolean') { + immediate = options.immediate; + } else if (options?.immediate instanceof Function) { + immediate = options?.immediate(name); + } + + if (immediate) { + invoke(); + } + + eventTarget.current.addEventListener(event, handler); + return () => { + eventTarget.current.removeEventListener(event, handler); + }; + }; + }, + [] + ); + + const share = useMemo( + () => ({ + register(name: string, dataset: unknown) { + datasets.current.set(name, dataset); + }, + unregister(name: string) { + datasets.current.delete(name); + dataAvailable.current.delete(name); + }, + + dispatchDataAvailable(name: string) { + dataAvailable.current.add(name); + eventTarget.current.dispatchEvent( + new CustomEvent(DATA_AVAILABLE_EVENT, { + detail: { name }, + }) + ); + }, + dispatchDataChanged(name: string) { + eventTarget.current.dispatchEvent( + new CustomEvent(DATA_CHANGED_EVENT, { + detail: { name }, + }) + ); + }, + + onDataChanged: createDataEventRegistrar(DATA_CHANGED_EVENT), + onDataAvailable: createDataEventRegistrar(DATA_AVAILABLE_EVENT, { + immediate(name) { + return dataAvailable.current.has(name); + }, + }), + }), + [createDataEventRegistrar] + ); + + return ( + + {props.children} + + ); +} + +interface RegisterDataSetProps extends PropsWithChildren { + id: string; +} + +export function RegisterDataSet(props: RegisterDataSetProps) { + const share = useShareDataSet(); + const { id } = props; + + // --- handle registrations --- // + + useEffect( + () => () => { + share.unregister(id); + }, + [id, share] + ); + + useUnmount(() => { + share.unregister(id); + }); + + // --- // + + const api = useMemo( + () => ({ + setInputData(obj) { + share.register(id, obj); + }, + setInputConnection(conn) { + api.setInputData(conn()); + }, + }), + [id, share] + ); + + const getAPI = useCallback(() => api, [api]); + const mockRepresentation = useMemo( + () => ({ + dataChanged() { + share.dispatchDataChanged(id); + }, + dataAvailable() { + share.dispatchDataAvailable(id); + }, + }), + [id, share] + ); + + return ( + + + {props.children} + + + ); +} + +interface UseDataSetProps extends PropsWithChildren { + id: string; + port?: number; +} + +export function UseDataSet(props: UseDataSetProps) { + const { id, port = 0 } = props; + const share = useShareDataSet(); + // TODO if useDataSet is input to an algorithm, should representation be null? + const representation = useRepresentation(); + const getDownstream = useDownstream(); + + useEffect(() => { + return share.onDataAvailable(id, (ds) => { + getDownstream().setInputData(ds as vtkObject, port); + representation.dataAvailable(); + }); + }, [id, port, representation, getDownstream, share]); + + useEffect(() => { + return share.onDataChanged(id, () => { + representation.dataChanged(); + }); + }, [id, representation, share]); + + return null; +} diff --git a/src/core-ts/contexts.ts b/src/core-ts/contexts.ts index d1a84a3..5b5211c 100644 --- a/src/core-ts/contexts.ts +++ b/src/core-ts/contexts.ts @@ -3,7 +3,13 @@ import vtkDataSetAttributes from '@kitware/vtk.js/Common/DataModel/DataSetAttrib import vtkFieldData from '@kitware/vtk.js/Common/DataModel/DataSetAttributes/FieldData'; import { Nullable } from '@kitware/vtk.js/types'; import { createContext, useContext } from 'react'; -import { IDataset, IDownstream, IRepresentation, IView } from '../types'; +import { + IDataset, + IDownstream, + IRepresentation, + IShareDataset, + IView, +} from '../types'; export const FieldDataContext = createContext vtkDataSetAttributes | vtkFieldData>>(null); @@ -46,3 +52,11 @@ export function useDownstream() { if (!ds) throw new Error('No downstream context!'); return ds; } + +export const ShareDataSetContext = createContext>(null); + +export function useShareDataSet() { + const share = useContext(ShareDataSetContext); + if (!share) throw new Error('No ShareDataSet context!'); + return share; +} diff --git a/src/index.ts b/src/index.ts index e64fdc0..c873193 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,5 +8,10 @@ export { default as DataArray } from './core-ts/DataArray'; export { default as GeometryRepresentation } from './core-ts/GeometryRepresentation'; export { default as PointData } from './core-ts/PointData'; export { default as PolyData } from './core-ts/PolyData'; +export { + RegisterDataSet, + ShareDataSetRoot, + UseDataSet, +} from './core-ts/ShareDataSet'; export { default as SliceRepresentation } from './core-ts/SliceRepresentation'; export { default as View } from './core-ts/View'; diff --git a/src/types/index.ts b/src/types/index.ts index 348e96d..ce6a3ee 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,7 +1,5 @@ import { vtkObject } from '@kitware/vtk.js/interfaces'; -import vtkAbstractMapper from '@kitware/vtk.js/Rendering/Core/AbstractMapper'; import vtkCamera from '@kitware/vtk.js/Rendering/Core/Camera'; -import vtkProp from '@kitware/vtk.js/Rendering/Core/Prop'; import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow'; import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; @@ -46,14 +44,9 @@ export interface IView { resetCamera(boundsToUse?: Bounds): void; } -export interface IRepresentation< - A extends vtkProp = vtkProp, - M extends vtkAbstractMapper = vtkAbstractMapper -> { +export interface IRepresentation { dataAvailable(): void; dataChanged(): void; - getActor(): A; - getMapper(): M; } // There is no sufficient type that overlaps classes like @@ -67,3 +60,15 @@ export interface IDataset { getDataSet(): T; modified(): void; } + +export type StopEventListener = () => void; +export type DataCallback = (ds: T | null) => void; + +export interface IShareDataset { + register(name: string, dataset: unknown): void; + unregister(name: string): void; + dispatchDataAvailable(name: string): void; + dispatchDataChanged(name: string): void; + onDataAvailable(name: string, callback: DataCallback): StopEventListener; + onDataChanged(name: string, callback: DataCallback): StopEventListener; +} From d2a4bb2c645a7db4a3c5c5fcc050f94ec7181935 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 15 Nov 2022 12:13:55 -0500 Subject: [PATCH 015/110] refactor: move View modules to modules dir --- src/core-ts/{View/index.tsx => View.tsx} | 20 +++++++++---------- src/core-ts/{View => modules}/useCamera.ts | 0 .../{View => modules}/useInteractor.ts | 0 .../{View => modules}/useInteractorStyle.ts | 0 .../{View => modules}/useRenderWindow.ts | 0 .../{View => modules}/useRenderWindowView.ts | 0 src/core-ts/{View => modules}/useRenderer.ts | 0 .../{View => modules}/useViewResize.ts | 0 8 files changed, 10 insertions(+), 10 deletions(-) rename src/core-ts/{View/index.tsx => View.tsx} (92%) rename src/core-ts/{View => modules}/useCamera.ts (100%) rename src/core-ts/{View => modules}/useInteractor.ts (100%) rename src/core-ts/{View => modules}/useInteractorStyle.ts (100%) rename src/core-ts/{View => modules}/useRenderWindow.ts (100%) rename src/core-ts/{View => modules}/useRenderWindowView.ts (100%) rename src/core-ts/{View => modules}/useRenderer.ts (100%) rename src/core-ts/{View => modules}/useViewResize.ts (100%) diff --git a/src/core-ts/View/index.tsx b/src/core-ts/View.tsx similarity index 92% rename from src/core-ts/View/index.tsx rename to src/core-ts/View.tsx index 43c6f3c..045f171 100644 --- a/src/core-ts/View/index.tsx +++ b/src/core-ts/View.tsx @@ -10,20 +10,20 @@ import { useRef, useState, } from 'react'; -import { IView } from '../../types'; -import { useOrderedUnmountContext } from '../../utils-ts/useOrderedUnmountEffect'; -import { ViewContext } from '../contexts'; -import useCamera from './useCamera'; -import useInteractor from './useInteractor'; +import { IView } from '../types'; +import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; +import { ViewContext } from './contexts'; +import useCamera from './modules/useCamera'; +import useInteractor from './modules/useInteractor'; import { ManipulatorSettings, useInteractorStyle, useInteractorStyleManipulatorSettings, -} from './useInteractorStyle'; -import useRenderer from './useRenderer'; -import useRenderWindow from './useRenderWindow'; -import useRenderWindowView from './useRenderWindowView'; -import { useViewResize } from './useViewResize'; +} from './modules/useInteractorStyle'; +import useRenderer from './modules/useRenderer'; +import useRenderWindow from './modules/useRenderWindow'; +import useRenderWindowView from './modules/useRenderWindowView'; +import { useViewResize } from './modules/useViewResize'; const RENDERER_STYLE: CSSProperties = { position: 'absolute', diff --git a/src/core-ts/View/useCamera.ts b/src/core-ts/modules/useCamera.ts similarity index 100% rename from src/core-ts/View/useCamera.ts rename to src/core-ts/modules/useCamera.ts diff --git a/src/core-ts/View/useInteractor.ts b/src/core-ts/modules/useInteractor.ts similarity index 100% rename from src/core-ts/View/useInteractor.ts rename to src/core-ts/modules/useInteractor.ts diff --git a/src/core-ts/View/useInteractorStyle.ts b/src/core-ts/modules/useInteractorStyle.ts similarity index 100% rename from src/core-ts/View/useInteractorStyle.ts rename to src/core-ts/modules/useInteractorStyle.ts diff --git a/src/core-ts/View/useRenderWindow.ts b/src/core-ts/modules/useRenderWindow.ts similarity index 100% rename from src/core-ts/View/useRenderWindow.ts rename to src/core-ts/modules/useRenderWindow.ts diff --git a/src/core-ts/View/useRenderWindowView.ts b/src/core-ts/modules/useRenderWindowView.ts similarity index 100% rename from src/core-ts/View/useRenderWindowView.ts rename to src/core-ts/modules/useRenderWindowView.ts diff --git a/src/core-ts/View/useRenderer.ts b/src/core-ts/modules/useRenderer.ts similarity index 100% rename from src/core-ts/View/useRenderer.ts rename to src/core-ts/modules/useRenderer.ts diff --git a/src/core-ts/View/useViewResize.ts b/src/core-ts/modules/useViewResize.ts similarity index 100% rename from src/core-ts/View/useViewResize.ts rename to src/core-ts/modules/useViewResize.ts From cdabc9d45c7a839acd191ba89f3785f31c9fd202 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 15 Nov 2022 12:15:33 -0500 Subject: [PATCH 016/110] fix(useProp): skip warning --- src/core-ts/modules/useProp.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core-ts/modules/useProp.ts b/src/core-ts/modules/useProp.ts index 8b276ce..62c2b11 100644 --- a/src/core-ts/modules/useProp.ts +++ b/src/core-ts/modules/useProp.ts @@ -34,7 +34,7 @@ export default function useProp< const [actorRef, getActor] = useGetterRef(constructor); useEffect(() => { - getActor().set({ representationID: id }); + getActor().set({ representationID: id }, true /* noWarning */); }, [id, getActor]); // add to renderer From fa0d605d26b511717c6f30a69f56b8b078eb39b8 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 15 Nov 2022 12:38:05 -0500 Subject: [PATCH 017/110] refactor(PolyData): remove id and re-sort deps --- src/core-ts/PolyData.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/core-ts/PolyData.tsx b/src/core-ts/PolyData.tsx index 3270cdf..2ea7951 100644 --- a/src/core-ts/PolyData.tsx +++ b/src/core-ts/PolyData.tsx @@ -20,11 +20,6 @@ import useUnmount from '../utils-ts/useUnmount'; import { DatasetContext, useDownstream, useRepresentation } from './contexts'; interface Props extends PropsWithChildren { - /** - * The ID used to identify this component. - */ - id?: string; - /** * downstream connection port */ @@ -126,7 +121,7 @@ export default forwardRef(function PolyData(props: Props, fwdRef) { } }, }), - [getPolyData, getDownstream, representation, port] + [representation, port, getPolyData, getDownstream] ); useImperativeHandle(fwdRef, () => dataset); From 673354f2285d0d11abec5647a78001c4f0b09abc Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 15 Nov 2022 12:48:51 -0500 Subject: [PATCH 018/110] refactor: make IDownstream an object Leaving IDownstream as a function is confusing and inconsistent. --- src/core-ts/Algorithm.tsx | 21 +++++++++++++++------ src/core-ts/GeometryRepresentation.tsx | 12 ++++++++++-- src/core-ts/PolyData.tsx | 5 ++--- src/core-ts/ShareDataSet.tsx | 13 ++++++------- src/core-ts/contexts.ts | 3 +-- 5 files changed, 34 insertions(+), 20 deletions(-) diff --git a/src/core-ts/Algorithm.tsx b/src/core-ts/Algorithm.tsx index 5825c61..ca3953d 100644 --- a/src/core-ts/Algorithm.tsx +++ b/src/core-ts/Algorithm.tsx @@ -1,7 +1,7 @@ import { vtkAlgorithm, vtkObject } from '@kitware/vtk.js/interfaces'; import vtk from '@kitware/vtk.js/vtk'; -import { PropsWithChildren, useCallback, useEffect } from 'react'; -import { VtkConstructor } from '../types'; +import { PropsWithChildren, useCallback, useEffect, useMemo } from 'react'; +import { IDownstream, VtkConstructor } from '../types'; import useGetterRef from '../utils-ts/useGetterRef'; import { usePrevious } from '../utils-ts/usePrevious'; import useUnmount from '../utils-ts/useUnmount'; @@ -42,7 +42,7 @@ export default function Algorithm(props: Props) { const [algoRef, getAlgorithm] = useGetterRef(() => createAlgo()); const representation = useRepresentation(); - const getDownstream = useDownstream(); + const downstream = useDownstream(); useEffect(() => { let algoChanged = false; @@ -76,7 +76,7 @@ export default function Algorithm(props: Props) { } if (algoChanged) { - getDownstream().setInputConnection(algoRef.current.getOutputPort(), port); + downstream.setInputConnection(algoRef.current.getOutputPort(), port); // if a source algo, then it already produces data if (algoRef.current.getNumberOfInputPorts() === 0) { representation.dataAvailable(); @@ -90,7 +90,7 @@ export default function Algorithm(props: Props) { createAlgo, algoRef, representation, - getDownstream, + downstream, ]); useUnmount(() => { @@ -100,8 +100,17 @@ export default function Algorithm(props: Props) { } }); + const fwdDownstream = useMemo( + () => ({ + setInputData: (...args) => getAlgorithm().setInputData(...args), + setInputConnection: (...args) => + getAlgorithm().setInputConnection(...args), + }), + [getAlgorithm] + ); + return ( - + {props.children} ); diff --git a/src/core-ts/GeometryRepresentation.tsx b/src/core-ts/GeometryRepresentation.tsx index 780fc8d..c8acb3d 100644 --- a/src/core-ts/GeometryRepresentation.tsx +++ b/src/core-ts/GeometryRepresentation.tsx @@ -14,7 +14,7 @@ import { useMemo, useState, } from 'react'; -import { IRepresentation } from '../types'; +import { IDownstream, IRepresentation } from '../types'; import { compareShallowObject } from '../utils-ts/comparators'; import useBooleanAccumulator from '../utils-ts/useBooleanAccumulator'; import useComparableEffect from '../utils-ts/useComparableEffect'; @@ -267,12 +267,20 @@ export default forwardRef(function GeometryRepresentation( [view] ); + const downstream = useMemo( + () => ({ + setInputData: (...args) => getMapper().setInputData(...args), + setInputConnection: (...args) => getMapper().setInputConnection(...args), + }), + [getMapper] + ); + useImperativeHandle(fwdRef, () => representation); return ( - + {props.children} diff --git a/src/core-ts/PolyData.tsx b/src/core-ts/PolyData.tsx index 2ea7951..b782938 100644 --- a/src/core-ts/PolyData.tsx +++ b/src/core-ts/PolyData.tsx @@ -102,7 +102,7 @@ export default forwardRef(function PolyData(props: Props, fwdRef) { const OrderedUnmountContext = useOrderedUnmountContext(); const representation = useRepresentation(); - const getDownstream = useDownstream(); + const downstream = useDownstream(); // dataset API const dataset = useMemo>( @@ -112,7 +112,6 @@ export default forwardRef(function PolyData(props: Props, fwdRef) { const pd = getPolyData(); pd.modified(); - const downstream = getDownstream(); downstream.setInputData(pd, port); // Let the representation know that we have data @@ -121,7 +120,7 @@ export default forwardRef(function PolyData(props: Props, fwdRef) { } }, }), - [representation, port, getPolyData, getDownstream] + [port, representation, downstream, getPolyData] ); useImperativeHandle(fwdRef, () => dataset); diff --git a/src/core-ts/ShareDataSet.tsx b/src/core-ts/ShareDataSet.tsx index 75fb894..2ba3c48 100644 --- a/src/core-ts/ShareDataSet.tsx +++ b/src/core-ts/ShareDataSet.tsx @@ -155,19 +155,18 @@ export function RegisterDataSet(props: RegisterDataSetProps) { // --- // - const api = useMemo( + const downstream = useMemo( () => ({ setInputData(obj) { share.register(id, obj); }, setInputConnection(conn) { - api.setInputData(conn()); + downstream.setInputData(conn()); }, }), [id, share] ); - const getAPI = useCallback(() => api, [api]); const mockRepresentation = useMemo( () => ({ dataChanged() { @@ -182,7 +181,7 @@ export function RegisterDataSet(props: RegisterDataSetProps) { return ( - + {props.children} @@ -199,14 +198,14 @@ export function UseDataSet(props: UseDataSetProps) { const share = useShareDataSet(); // TODO if useDataSet is input to an algorithm, should representation be null? const representation = useRepresentation(); - const getDownstream = useDownstream(); + const downstream = useDownstream(); useEffect(() => { return share.onDataAvailable(id, (ds) => { - getDownstream().setInputData(ds as vtkObject, port); + downstream.setInputData(ds as vtkObject, port); representation.dataAvailable(); }); - }, [id, port, representation, getDownstream, share]); + }, [id, port, representation, downstream, share]); useEffect(() => { return share.onDataChanged(id, () => { diff --git a/src/core-ts/contexts.ts b/src/core-ts/contexts.ts index 5b5211c..1be28e7 100644 --- a/src/core-ts/contexts.ts +++ b/src/core-ts/contexts.ts @@ -44,8 +44,7 @@ export function useRepresentation() { if (!rep) throw new Error('No representation context!'); return rep; } -export const DownstreamContext = - createContext IDownstream>>(null); +export const DownstreamContext = createContext>(null); export function useDownstream() { const ds = useContext(DownstreamContext); From 71e4cea2b2b0ce0d7a18c2599b34b790979e0c34 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 15 Nov 2022 13:07:51 -0500 Subject: [PATCH 019/110] fix(DataArray): register array before model update --- src/core-ts/DataArray.ts | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/core-ts/DataArray.ts b/src/core-ts/DataArray.ts index 8a81010..9bbda2a 100644 --- a/src/core-ts/DataArray.ts +++ b/src/core-ts/DataArray.ts @@ -72,6 +72,25 @@ export default function DataArray(props: Props) { range, } = props; + // register array with the dataset must happen before dataset.modified() + // cleanup should happend before the polydata is deleted + useOrderedUnmountEffect(() => { + const array = getDataArray(); + const ds = dataset.getDataSet(); + const fieldData = getFieldData(); + + const register = fieldData[registration as keyof typeof fieldData] as ( + da: vtkDataArray + ) => void; + register(array); + + ds.modified(); + + return () => { + fieldData.removeArray(array.getName()); + }; + }, [registration, dataset, getDataArray, getFieldData]); + useEffect(() => { const array = getDataArray(); @@ -93,25 +112,6 @@ export default function DataArray(props: Props) { if (modified) dataset.modified(); }); - // register array with the dataset - // cleanup should happend before the polydata is deleted - useOrderedUnmountEffect(() => { - const array = getDataArray(); - const ds = dataset.getDataSet(); - const fieldData = getFieldData(); - - const register = fieldData[registration as keyof typeof fieldData] as ( - da: vtkDataArray - ) => void; - register(array); - - ds.modified(); - - return () => { - fieldData.removeArray(array.getName()); - }; - }, [registration, dataset, getDataArray, getFieldData]); - useUnmount(() => { if (daRef.current) { daRef.current.delete(); From c22805fcda2f612c6117df169b40ee36423c2984 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 15 Nov 2022 14:35:54 -0500 Subject: [PATCH 020/110] feat(View): autoCenterOfRotation --- src/core-ts/View.tsx | 59 ++++++++++++++++++++++++++++++-------------- src/types/index.ts | 3 +++ 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/src/core-ts/View.tsx b/src/core-ts/View.tsx index 045f171..a3796f1 100644 --- a/src/core-ts/View.tsx +++ b/src/core-ts/View.tsx @@ -1,9 +1,11 @@ +import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; import { ICameraInitialValues } from '@kitware/vtk.js/Rendering/Core/Camera'; -import { Nullable, Vector3 } from '@kitware/vtk.js/types'; +import { Bounds, Nullable, Vector3 } from '@kitware/vtk.js/types'; import { CSSProperties, forwardRef, PropsWithChildren, + useCallback, useEffect, useImperativeHandle, useMemo, @@ -84,18 +86,11 @@ interface Props extends PropsWithChildren { autoResetCamera?: boolean; /** - * Property use to trigger a render when changing. - - * TODO remove because the recommended way is to use a ref - */ - // triggerRender?: number; - - /** - * Property use to trigger a resetCamera when changing. + * Whether to automatically re-set the interactor style's center of rotation. (default: true) * - * TODO remove because the recommended way is to use a ref + * This is a convenience property for interactor styles that support setCenterOfRotation(). */ - // triggerResetCamera?: number; + autoCenterOfRotation?: boolean; /** * List of picking listeners to bind. By default it is disabled (empty array). @@ -152,6 +147,7 @@ interface Props extends PropsWithChildren { const DefaultProps = { interactive: true, autoResetCamera: true, + autoCenterOfRotation: true, background: [0.2, 0.3, 0.4] as Vector3, style: { width: '100%', @@ -202,6 +198,7 @@ export default forwardRef(function View(props: Props, fwdRef) { background = DefaultProps.background, interactive = DefaultProps.interactive, autoResetCamera = DefaultProps.autoResetCamera, + autoCenterOfRotation = DefaultProps.autoCenterOfRotation, interactorSettings = DefaultProps.interactorSettings, camera: cameraProps, } = props; @@ -223,24 +220,45 @@ export default forwardRef(function View(props: Props, fwdRef) { useInteractorStyle(getInteractor); useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); - // handle renders + // --- rendering state --- // + const [renderRequested, setRenderRequested] = useState(false); const requestRender = () => setRenderRequested(true); + // --- camera --- // + + const getCamera = useCamera(getRenderer, requestRender, cameraProps); + + const resetCamera = useCallback( + (boundsToUse?: Bounds) => { + getRenderer().resetCamera(boundsToUse); + if ( + autoCenterOfRotation && + 'setCenterOfRotation' in getInteractorStyle() + ) { + const style = getInteractorStyle() as vtkInteractorStyle & { + setCenterOfRotation(center: Vector3): boolean; + }; + style.setCenterOfRotation(getCamera().getFocalPoint()); + } + }, + [autoCenterOfRotation, getRenderer, getInteractorStyle, getCamera] + ); + + // --- handle renders --- // + useEffect(() => { if (renderRequested) { if (autoResetCamera) { - getRenderer().resetCamera(); + resetCamera(); } getRenderWindow().render(); setRenderRequested(false); } - }, [renderRequested, autoResetCamera, getRenderer, getRenderWindow]); + }, [renderRequested, autoResetCamera, resetCamera, getRenderWindow]); - // camera - const getCamera = useCamera(getRenderer, requestRender, cameraProps); + // --- view API --- // - // view API const view = useMemo(() => { return { getRenderer, @@ -248,6 +266,7 @@ export default forwardRef(function View(props: Props, fwdRef) { getInteractor, getAPISpecificRenderWindow: getRWView, getCamera, + getInteractorStyle, setInteractorStyle, /** * Requests a vtk.js render. @@ -259,8 +278,8 @@ export default forwardRef(function View(props: Props, fwdRef) { /** * Resets the camera. */ - resetCamera: () => { - getRenderer().resetCamera(); + resetCamera: (boundsToUse?: Bounds) => { + resetCamera(boundsToUse); requestRender(); }, }; @@ -270,7 +289,9 @@ export default forwardRef(function View(props: Props, fwdRef) { getRenderWindow, getInteractor, getCamera, + getInteractorStyle, setInteractorStyle, + resetCamera, ]); // expose the view as a ref for imperative control diff --git a/src/types/index.ts b/src/types/index.ts index ce6a3ee..5d97172 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,4 @@ +import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; import { vtkObject } from '@kitware/vtk.js/interfaces'; import vtkCamera from '@kitware/vtk.js/Rendering/Core/Camera'; import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; @@ -39,6 +40,8 @@ export interface IView { getRenderWindow(): vtkRenderWindow; getAPISpecificRenderWindow(): vtkOpenGLRenderWindow; getInteractor(): vtkRenderWindowInteractor; + getInteractorStyle(): vtkInteractorStyle; + setInteractorStyle(style: vtkInteractorStyle): void; getCamera(): vtkCamera; requestRender(): void; resetCamera(boundsToUse?: Bounds): void; From 9a9103431ffd0f7625228baed89dbae21b137186 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 15 Nov 2022 14:38:51 -0500 Subject: [PATCH 021/110] feat: add ImageData and SliceRepresentation --- src/core-ts/ImageData.tsx | 111 ++++++++++++++ src/core-ts/SliceRepresentation.tsx | 226 ++++++++++++++++++++++++++++ src/index.ts | 1 + src/utils-ts/comparators.ts | 37 ++++- 4 files changed, 374 insertions(+), 1 deletion(-) create mode 100644 src/core-ts/ImageData.tsx create mode 100644 src/core-ts/SliceRepresentation.tsx diff --git a/src/core-ts/ImageData.tsx b/src/core-ts/ImageData.tsx new file mode 100644 index 0000000..ca9d7e9 --- /dev/null +++ b/src/core-ts/ImageData.tsx @@ -0,0 +1,111 @@ +import vtkImageData from '@kitware/vtk.js/Common/DataModel/ImageData'; +import { Matrix3x3, Vector3 } from '@kitware/vtk.js/types'; +import { + forwardRef, + PropsWithChildren, + useEffect, + useImperativeHandle, + useMemo, +} from 'react'; +import { IDataset } from '../types'; +import useGetterRef from '../utils-ts/useGetterRef'; +import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; +import useUnmount from '../utils-ts/useUnmount'; +import { DatasetContext, useDownstream, useRepresentation } from './contexts'; + +interface Props extends PropsWithChildren { + /** + * downstream connection port + */ + port?: number; + + /** + * Image dimensions along x, y, z + */ + dimensions?: Vector3; + + /** + * Image spacing + */ + spacing?: Vector3; + + /** + * Image origin + */ + origin?: Vector3; + + /** + * Image orientation. Matrix is a 6-tuple, column-major ordering. + */ + direction?: Matrix3x3; +} + +const DefaultProps = { + port: 0, + dimensions: [1, 1, 1] as Vector3, + spacing: [1, 1, 1] as Vector3, + origin: [0, 0, 0] as Vector3, + direction: [1, 0, 0, 0, 1, 0, 0, 0, 1] as Matrix3x3, +}; + +export default forwardRef(function PolyData(props: Props, fwdRef) { + const { + port = DefaultProps.port, + dimensions = DefaultProps.dimensions, + spacing = DefaultProps.spacing, + origin = DefaultProps.origin, + direction = DefaultProps.direction, + } = props; + + const [imRef, getImageData] = useGetterRef(() => vtkImageData.newInstance()); + + const OrderedUnmountContext = useOrderedUnmountContext(); + + const representation = useRepresentation(); + const downstream = useDownstream(); + + // dataset API + const dataset = useMemo>( + () => ({ + getDataSet: getImageData, + modified: () => { + const im = getImageData(); + im.modified(); + + downstream.setInputData(im, port); + + // Let the representation know that we have data + if (im.getPointData().getScalars().getData()) { + representation.dataAvailable(); + } + }, + }), + [port, representation, downstream, getImageData] + ); + + useImperativeHandle(fwdRef, () => dataset); + + // --- update image data model --- // + + useEffect(() => { + const imageData = getImageData(); + if (imageData.set({ dimensions, spacing, origin, direction })) { + dataset.modified(); + } + }, [dimensions, spacing, origin, direction, dataset, getImageData]); + + useUnmount(() => { + if (imRef.current) { + imRef.current.delete(); + imRef.current = null; + } + }); + + return ( + + + {props.children} + + + ); +}); diff --git a/src/core-ts/SliceRepresentation.tsx b/src/core-ts/SliceRepresentation.tsx new file mode 100644 index 0000000..08b1c92 --- /dev/null +++ b/src/core-ts/SliceRepresentation.tsx @@ -0,0 +1,226 @@ +import vtkImageMapper, { + IImageMapperInitialValues, +} from '@kitware/vtk.js/Rendering/Core/ImageMapper'; +import { IImagePropertyInitialValues } from '@kitware/vtk.js/Rendering/Core/ImageProperty'; +import vtkImageSlice, { + IImageSliceInitialValues, +} from '@kitware/vtk.js/Rendering/Core/ImageSlice'; +import { Vector2 } from '@kitware/vtk.js/types'; +import { + forwardRef, + PropsWithChildren, + useEffect, + useImperativeHandle, + useMemo, + useState, +} from 'react'; +import { IDownstream, IRepresentation } from '../types'; +import { compareShallowObject } from '../utils-ts/comparators'; +import useBooleanAccumulator from '../utils-ts/useBooleanAccumulator'; +import useComparableEffect from '../utils-ts/useComparableEffect'; +import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; +import { DownstreamContext, RepresentationContext, useView } from './contexts'; +import useColorTransferFunction from './modules/useColorTransferFunction'; +import useMapper from './modules/useMapper'; +import useProp from './modules/useProp'; + +interface Props extends PropsWithChildren { + /** + * The ID used to identify this component. + */ + id?: string; + + /** + * Properties to set to the mapper + */ + mapper?: IImageMapperInitialValues; + + /** + * Properties to set to the slice/actor + */ + actor?: IImageSliceInitialValues; + + /** + * Properties to set to the volume.property + */ + property?: IImagePropertyInitialValues; + + /** + * Preset name for the lookup table color map + */ + colorMapPreset?: string; + + /** + * Data range use for the colorMap + */ + colorDataRange?: 'auto' | Vector2; + + /** + * index of the slice along i + */ + iSlice?: number; + + /** + * index of the slice along j + */ + jSlice?: number; + + /** + * index of the slice along k + */ + kSlice?: number; + + /** + * index of the slice along x + */ + xSlice?: number; + + /** + * index of the slice along y + */ + ySlice?: number; + + /** + * index of the slice along z + */ + zSlice?: number; +} + +const DefaultProps = { + colorMapPreset: 'Grayscale', + colorDataRange: 'auto' as const, +}; + +export default forwardRef(function SliceRepresentation(props: Props, fwdRef) { + const OrderedUnmountContext = useOrderedUnmountContext(); + + const view = useView(); + const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); + const [dataAvailable, setDataAvailable] = useState(false); + + const rangeFromProps = props.colorDataRange ?? DefaultProps.colorDataRange; + const colorDataRange = + rangeFromProps === 'auto' ? ([0, 1] as Vector2) : rangeFromProps; + + // --- LUT --- // + + const getLookupTable = useColorTransferFunction( + props.colorMapPreset ?? DefaultProps.colorMapPreset, + colorDataRange, + trackModified + ); + + // --- PWF --- // + + // --- mapper --- // + + const getMapper = useMapper( + () => vtkImageMapper.newInstance(), + props.mapper, + trackModified + ); + + // --- actor --- // + + const actorProps = { + ...props.actor, + visibility: dataAvailable && (props.actor?.visibility ?? true), + }; + const getActor = useProp({ + constructor: () => vtkImageSlice.newInstance(), + view, + id: props.id, + props: actorProps, + trackModified, + }); + + useEffect(() => { + getActor().setMapper(getMapper()); + }, [getActor, getMapper]); + + useEffect(() => { + getActor().getProperty().setRGBTransferFunction(0, getLookupTable()); + getActor().getProperty().setInterpolationTypeToLinear(); + }, [getActor, getLookupTable]); + + // set actor property props + const { property: propertyProps } = props; + useComparableEffect( + () => { + if (!propertyProps) return; + trackModified(getActor().getProperty().set(propertyProps)); + }, + [propertyProps], + ([cur], [prev]) => compareShallowObject(cur, prev) + ); + + // --- Slice changes --- // + + const { iSlice, jSlice, kSlice, xSlice, ySlice, zSlice } = props; + + useEffect(() => { + if (iSlice != null) trackModified(getMapper().setISlice(iSlice)); + }, [iSlice, getMapper, trackModified]); + + useEffect(() => { + if (jSlice != null) trackModified(getMapper().setISlice(jSlice)); + }, [jSlice, getMapper, trackModified]); + + useEffect(() => { + if (kSlice != null) trackModified(getMapper().setISlice(kSlice)); + }, [kSlice, getMapper, trackModified]); + + useEffect(() => { + if (xSlice != null) trackModified(getMapper().setISlice(xSlice)); + }, [xSlice, getMapper, trackModified]); + + useEffect(() => { + if (ySlice != null) trackModified(getMapper().setISlice(ySlice)); + }, [ySlice, getMapper, trackModified]); + + useEffect(() => { + if (zSlice != null) trackModified(getMapper().setISlice(zSlice)); + }, [zSlice, getMapper, trackModified]); + + // --- // + + useEffect(() => { + if (view && modifiedRef.current) { + view.requestRender(); + resetModified(); + } + }); + + const representation = useMemo( + () => ({ + dataChanged: () => { + view.requestRender(); + }, + dataAvailable: () => { + setDataAvailable(true); + representation.dataChanged(); + }, + }), + [view] + ); + + const downstream = useMemo( + () => ({ + setInputData: (...args) => getMapper().setInputData(...args), + setInputConnection: (...args) => getMapper().setInputConnection(...args), + }), + [getMapper] + ); + + useImperativeHandle(fwdRef, () => representation); + + return ( + + + + {props.children} + + + + ); +}); diff --git a/src/index.ts b/src/index.ts index c873193..f71766f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,6 +6,7 @@ import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Volume'; export { default as Algorithm } from './core-ts/Algorithm'; export { default as DataArray } from './core-ts/DataArray'; export { default as GeometryRepresentation } from './core-ts/GeometryRepresentation'; +export { default as ImageData } from './core-ts/ImageData'; export { default as PointData } from './core-ts/PointData'; export { default as PolyData } from './core-ts/PolyData'; export { diff --git a/src/utils-ts/comparators.ts b/src/utils-ts/comparators.ts index 1e18456..32eecf3 100644 --- a/src/utils-ts/comparators.ts +++ b/src/utils-ts/comparators.ts @@ -1,4 +1,4 @@ -import { Vector2 } from '@kitware/vtk.js/types'; +import { Vector2, Vector3 } from '@kitware/vtk.js/types'; export function valueCompareFirst(cur: T, prev: T) { return !!cur[0] && cur[0] !== prev[0]; @@ -20,6 +20,8 @@ export function shallowArrayCompareFirst( /** * Compares two objects. + * + * If any object is undefined, then the comparison fails. */ export function compareShallowObject( cur: T | undefined, @@ -41,6 +43,9 @@ export function compareShallowObject( ); } +/** + * Compares 2D vectors. + */ export function compareVector2( cur: Vector2 | undefined, prev: Vector2 | undefined @@ -49,3 +54,33 @@ export function compareVector2( if (!cur || !prev) return false; return cur[0] === prev[0] && cur[1] === prev[1]; } + +/** + * Compares 3D vectors. + * + * If any vector is undefined, then the comparison fails. + */ +export function compareVector3( + cur: Vector3 | undefined, + prev: Vector3 | undefined +) { + if (cur === prev) return true; + if (!cur || !prev) return false; + return cur[0] === prev[0] && cur[1] === prev[1] && cur[2] === prev[2]; +} + +/** + * Compares arrays shallowly. + */ +export function compareShallowArray( + cur: unknown[] | undefined, + prev: unknown[] | undefined +) { + if (cur === prev) return true; + if (!cur || !prev) return false; + if (cur.length !== prev.length) return false; + for (let i = 0; i < cur.length; i++) { + if (cur[i] !== prev[i]) return false; + } + return true; +} From d570bb6ea76201435c964f389cd84d02abb6d7cd Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 15 Nov 2022 15:32:38 -0500 Subject: [PATCH 022/110] feat: add Geometry2DRepresentation --- src/core-ts/Geometry2DRepresentation.tsx | 186 +++++++++++++++++++++++ src/core-ts/modules/useCoordinate.ts | 36 +++++ src/index.ts | 1 + 3 files changed, 223 insertions(+) create mode 100644 src/core-ts/Geometry2DRepresentation.tsx create mode 100644 src/core-ts/modules/useCoordinate.ts diff --git a/src/core-ts/Geometry2DRepresentation.tsx b/src/core-ts/Geometry2DRepresentation.tsx new file mode 100644 index 0000000..50e51d4 --- /dev/null +++ b/src/core-ts/Geometry2DRepresentation.tsx @@ -0,0 +1,186 @@ +import vtkActor2D, { + IActor2DInitialValues, +} from '@kitware/vtk.js/Rendering/Core/Actor2D'; +import { ICoordinateInitialValues } from '@kitware/vtk.js/Rendering/Core/Coordinate'; +import { Coordinate } from '@kitware/vtk.js/Rendering/Core/Coordinate/Constants'; +import vtkMapper2D, { + IMapper2DInitialValues, +} from '@kitware/vtk.js/Rendering/Core/Mapper2D'; +import { IProperty2DInitialValues } from '@kitware/vtk.js/Rendering/Core/Property2D'; +import { Vector2 } from '@kitware/vtk.js/types'; +import { + forwardRef, + PropsWithChildren, + useEffect, + useImperativeHandle, + useMemo, + useState, +} from 'react'; +import { IDownstream, IRepresentation } from '../types'; +import { compareShallowObject } from '../utils-ts/comparators'; +import useBooleanAccumulator from '../utils-ts/useBooleanAccumulator'; +import useComparableEffect from '../utils-ts/useComparableEffect'; +import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; +import { DownstreamContext, RepresentationContext, useView } from './contexts'; +import useColorTransferFunction from './modules/useColorTransferFunction'; +import useCoordinate from './modules/useCoordinate'; +import useMapper from './modules/useMapper'; +import useProp from './modules/useProp'; + +interface Props extends PropsWithChildren { + /** + * The ID used to identify this component. + */ + id?: string; + + /** + * Properties to set to the actor + */ + actor?: IActor2DInitialValues; + + /** + * Properties to set to the actor + */ + mapper?: IMapper2DInitialValues; + + /** + * Properties to set to the actor.property + */ + property?: IProperty2DInitialValues; + + /** + * Preset name for the lookup table color map + */ + colorMapPreset?: string; + + /** + * Data range use for the colorMap + */ + colorDataRange?: [number, number]; + + /** + * The coordinate system in which the input dataset resides. + */ + transformCoordinate?: ICoordinateInitialValues; +} + +const DefaultProps = { + colorMapPreset: 'erdc_rainbow_bright', + colorDataRange: [0, 1] as Vector2, + transformCoordinate: { + coordinateSystem: Coordinate.DISPLAY, + }, +}; + +export default forwardRef(function Geometry2DRepresentation( + props: Props, + fwdRef +) { + const OrderedUnmountContext = useOrderedUnmountContext(); + + const view = useView(); + const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); + const [dataAvailable, setDataAvailable] = useState(false); + + // --- LUT --- // + + const getLookupTable = useColorTransferFunction( + props.colorMapPreset ?? DefaultProps.colorMapPreset, + props.colorDataRange ?? DefaultProps.colorDataRange, + trackModified + ); + + // --- coordinate --- // + + const { transformCoordinate = DefaultProps.transformCoordinate } = props; + const getCoordinate = useCoordinate(transformCoordinate, trackModified); + + // --- mapper --- // + + const getMapper = useMapper( + () => + vtkMapper2D.newInstance({ + lookupTable: getLookupTable(), + useLookupTableScalarRange: false, + scalarVisibility: false, + transformCoordinate: getCoordinate(), + } as IMapper2DInitialValues), + props.mapper, + trackModified + ); + + // --- actor --- // + + const actorProps = { + ...props.actor, + visibility: dataAvailable && (props.actor?.visibility ?? true), + }; + const getActor = useProp({ + constructor: () => vtkActor2D.newInstance({ visibility: false }), + view, + id: props.id, + props: actorProps, + trackModified, + }); + + useEffect(() => { + // TODO type hack; upgrade vtk.js + const actor = getActor() as vtkActor2D & { + setMapper(mapper: vtkMapper2D): boolean; + }; + actor.setMapper(getMapper()); + }, [getActor, getMapper]); + + // set actor property props + const { property: propertyProps } = props; + useComparableEffect( + () => { + if (!propertyProps) return; + trackModified(getActor().getProperty().set(propertyProps)); + }, + [propertyProps], + ([cur], [prev]) => compareShallowObject(cur, prev) + ); + + // --- // + + useEffect(() => { + if (view && modifiedRef.current) { + view.requestRender(); + resetModified(); + } + }); + + const representation = useMemo( + () => ({ + dataChanged: () => { + view.requestRender(); + }, + dataAvailable: () => { + setDataAvailable(true); + representation.dataChanged(); + }, + }), + [view] + ); + + const downstream = useMemo( + () => ({ + setInputData: (...args) => getMapper().setInputData(...args), + setInputConnection: (...args) => getMapper().setInputConnection(...args), + }), + [getMapper] + ); + + useImperativeHandle(fwdRef, () => representation); + + return ( + + + + {props.children} + + + + ); +}); diff --git a/src/core-ts/modules/useCoordinate.ts b/src/core-ts/modules/useCoordinate.ts new file mode 100644 index 0000000..033295f --- /dev/null +++ b/src/core-ts/modules/useCoordinate.ts @@ -0,0 +1,36 @@ +import vtkCoordinate, { + ICoordinateInitialValues, +} from '@kitware/vtk.js/Rendering/Core/Coordinate'; +import { compareShallowObject } from '../../utils-ts/comparators'; +import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; +import useComparableEffect from '../../utils-ts/useComparableEffect'; +import useGetterRef from '../../utils-ts/useGetterRef'; +import useUnmount from '../../utils-ts/useUnmount'; + +export default function useCoordinate( + props: ICoordinateInitialValues, + trackModified: BooleanAccumulator +) { + const [ref, getCoordinate] = useGetterRef(() => + vtkCoordinate.newInstance(props) + ); + + useComparableEffect( + () => { + if (!props) return; + getCoordinate().set(props); + trackModified(true); + }, + [props], + ([cur], [prev]) => compareShallowObject(cur, prev) + ); + + useUnmount(() => { + if (ref.current) { + ref.current.delete(); + ref.current = null; + } + }); + + return getCoordinate; +} diff --git a/src/index.ts b/src/index.ts index f71766f..288189f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Volume'; export { default as Algorithm } from './core-ts/Algorithm'; export { default as DataArray } from './core-ts/DataArray'; +export { default as Geometry2DRepresentation } from './core-ts/Geometry2DRepresentation'; export { default as GeometryRepresentation } from './core-ts/GeometryRepresentation'; export { default as ImageData } from './core-ts/ImageData'; export { default as PointData } from './core-ts/PointData'; From 6afe6bb609df90194ee9393b99c6911be44ad518 Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 16 Nov 2022 13:34:22 -0500 Subject: [PATCH 023/110] refactor: use deletion registry for obj tracking The deletion registry manages the lifetime and tracking of registered objects. --- src/core-ts/Algorithm.tsx | 11 +- src/core-ts/DataArray.ts | 19 +- src/core-ts/Geometry2DRepresentation.tsx | 33 +- src/core-ts/GeometryRepresentation.tsx | 123 +------ src/core-ts/ImageData.tsx | 20 +- src/core-ts/OpenGLRenderWindow.tsx | 88 +++++ src/core-ts/PolyData.tsx | 20 +- src/core-ts/RenderWindow.tsx | 190 ++++++++++ src/core-ts/Renderer.tsx | 163 +++++++++ src/core-ts/SliceRepresentation.tsx | 33 +- src/core-ts/View.tsx | 338 +++--------------- src/core-ts/contexts.ts | 46 +-- src/core-ts/modules/useCamera.ts | 9 +- .../modules/useColorTransferFunction.ts | 11 +- src/core-ts/modules/useCoordinate.ts | 11 +- src/core-ts/modules/useInteractor.ts | 30 +- src/core-ts/modules/useInteractorStyle.ts | 9 +- src/core-ts/modules/useMapper.ts | 9 +- src/core-ts/modules/useProp.ts | 28 +- src/core-ts/modules/useRenderWindow.ts | 42 --- src/core-ts/modules/useRenderWindowView.ts | 26 -- src/core-ts/modules/useRenderer.ts | 23 -- src/index.ts | 1 + src/types/index.ts | 17 + src/utils-ts/DeletionRegistry.ts | 77 ++++ src/utils-ts/index.ts | 26 ++ src/utils-ts/useOrderedUnmountEffect.tsx | 126 ------- 27 files changed, 792 insertions(+), 737 deletions(-) create mode 100644 src/core-ts/OpenGLRenderWindow.tsx create mode 100644 src/core-ts/RenderWindow.tsx create mode 100644 src/core-ts/Renderer.tsx delete mode 100644 src/core-ts/modules/useRenderWindow.ts delete mode 100644 src/core-ts/modules/useRenderWindowView.ts delete mode 100644 src/core-ts/modules/useRenderer.ts create mode 100644 src/utils-ts/DeletionRegistry.ts delete mode 100644 src/utils-ts/useOrderedUnmountEffect.tsx diff --git a/src/core-ts/Algorithm.tsx b/src/core-ts/Algorithm.tsx index ca3953d..99e6a0d 100644 --- a/src/core-ts/Algorithm.tsx +++ b/src/core-ts/Algorithm.tsx @@ -2,6 +2,7 @@ import { vtkAlgorithm, vtkObject } from '@kitware/vtk.js/interfaces'; import vtk from '@kitware/vtk.js/vtk'; import { PropsWithChildren, useCallback, useEffect, useMemo } from 'react'; import { IDownstream, VtkConstructor } from '../types'; +import deletionRegistry from '../utils-ts/DeletionRegistry'; import useGetterRef from '../utils-ts/useGetterRef'; import { usePrevious } from '../utils-ts/usePrevious'; import useUnmount from '../utils-ts/useUnmount'; @@ -39,7 +40,11 @@ export default function Algorithm(props: Props) { return vtkClass.newInstance(state) as vtkAlgorithm & vtkObject; }, [vtkClass, state]); - const [algoRef, getAlgorithm] = useGetterRef(() => createAlgo()); + const [algoRef, getAlgorithm] = useGetterRef(() => { + const algo = createAlgo(); + deletionRegistry.register(algo, () => algo.delete()); + return algo; + }); const representation = useRepresentation(); const downstream = useDownstream(); @@ -66,7 +71,7 @@ export default function Algorithm(props: Props) { } algoRef.current = newAlgo; - curAlgo.delete(); + deletionRegistry.markForDeletion(curAlgo); algoChanged = true; } else if (state) { const modified = algoRef.current.set(state); @@ -95,7 +100,7 @@ export default function Algorithm(props: Props) { useUnmount(() => { if (algoRef.current) { - algoRef.current.delete(); + deletionRegistry.markForDeletion(algoRef.current); algoRef.current = null; } }); diff --git a/src/core-ts/DataArray.ts b/src/core-ts/DataArray.ts index 9bbda2a..94c1064 100644 --- a/src/core-ts/DataArray.ts +++ b/src/core-ts/DataArray.ts @@ -4,8 +4,8 @@ import { TYPED_ARRAYS } from '@kitware/vtk.js/macros'; import { useEffect } from 'react'; import { DataArrayValues } from '../types'; import { toTypedArray, TypedArrayLookup } from '../utils-ts'; +import deletionRegistry from '../utils-ts/DeletionRegistry'; import useGetterRef from '../utils-ts/useGetterRef'; -import { useOrderedUnmountEffect } from '../utils-ts/useOrderedUnmountEffect'; import { usePrevious } from '../utils-ts/usePrevious'; import useUnmount from '../utils-ts/useUnmount'; import { useDataset, useFieldData } from './contexts'; @@ -52,12 +52,14 @@ const DefaultProps = { export default function DataArray(props: Props) { const prev = usePrevious({ ...DefaultProps, ...props }); - const [daRef, getDataArray] = useGetterRef(() => - vtkDataArray.newInstance({ + const [daRef, getDataArray] = useGetterRef(() => { + const da = vtkDataArray.newInstance({ name: 'scalars', empty: true, - }) - ); + }); + deletionRegistry.register(da, () => da.delete()); + return da; + }); const getFieldData = useFieldData(); const dataset = useDataset(); @@ -74,9 +76,11 @@ export default function DataArray(props: Props) { // register array with the dataset must happen before dataset.modified() // cleanup should happend before the polydata is deleted - useOrderedUnmountEffect(() => { + useEffect(() => { const array = getDataArray(); const ds = dataset.getDataSet(); + deletionRegistry.incRefCount(ds); + const fieldData = getFieldData(); const register = fieldData[registration as keyof typeof fieldData] as ( @@ -88,6 +92,7 @@ export default function DataArray(props: Props) { return () => { fieldData.removeArray(array.getName()); + deletionRegistry.decRefCount(ds); }; }, [registration, dataset, getDataArray, getFieldData]); @@ -114,7 +119,7 @@ export default function DataArray(props: Props) { useUnmount(() => { if (daRef.current) { - daRef.current.delete(); + deletionRegistry.markForDeletion(daRef.current); daRef.current = null; } }); diff --git a/src/core-ts/Geometry2DRepresentation.tsx b/src/core-ts/Geometry2DRepresentation.tsx index 50e51d4..b50ef10 100644 --- a/src/core-ts/Geometry2DRepresentation.tsx +++ b/src/core-ts/Geometry2DRepresentation.tsx @@ -20,8 +20,11 @@ import { IDownstream, IRepresentation } from '../types'; import { compareShallowObject } from '../utils-ts/comparators'; import useBooleanAccumulator from '../utils-ts/useBooleanAccumulator'; import useComparableEffect from '../utils-ts/useComparableEffect'; -import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; -import { DownstreamContext, RepresentationContext, useView } from './contexts'; +import { + DownstreamContext, + RepresentationContext, + useRendererContext, +} from './contexts'; import useColorTransferFunction from './modules/useColorTransferFunction'; import useCoordinate from './modules/useCoordinate'; import useMapper from './modules/useMapper'; @@ -76,9 +79,6 @@ export default forwardRef(function Geometry2DRepresentation( props: Props, fwdRef ) { - const OrderedUnmountContext = useOrderedUnmountContext(); - - const view = useView(); const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); const [dataAvailable, setDataAvailable] = useState(false); @@ -117,7 +117,6 @@ export default forwardRef(function Geometry2DRepresentation( }; const getActor = useProp({ constructor: () => vtkActor2D.newInstance({ visibility: false }), - view, id: props.id, props: actorProps, trackModified, @@ -144,9 +143,11 @@ export default forwardRef(function Geometry2DRepresentation( // --- // + const renderer = useRendererContext(); + useEffect(() => { - if (view && modifiedRef.current) { - view.requestRender(); + if (modifiedRef.current) { + renderer.requestRender(); resetModified(); } }); @@ -154,14 +155,14 @@ export default forwardRef(function Geometry2DRepresentation( const representation = useMemo( () => ({ dataChanged: () => { - view.requestRender(); + renderer.requestRender(); }, dataAvailable: () => { setDataAvailable(true); representation.dataChanged(); }, }), - [view] + [renderer] ); const downstream = useMemo( @@ -175,12 +176,10 @@ export default forwardRef(function Geometry2DRepresentation( useImperativeHandle(fwdRef, () => representation); return ( - - - - {props.children} - - - + + + {props.children} + + ); }); diff --git a/src/core-ts/GeometryRepresentation.tsx b/src/core-ts/GeometryRepresentation.tsx index c8acb3d..62219fe 100644 --- a/src/core-ts/GeometryRepresentation.tsx +++ b/src/core-ts/GeometryRepresentation.tsx @@ -18,8 +18,11 @@ import { IDownstream, IRepresentation } from '../types'; import { compareShallowObject } from '../utils-ts/comparators'; import useBooleanAccumulator from '../utils-ts/useBooleanAccumulator'; import useComparableEffect from '../utils-ts/useComparableEffect'; -import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; -import { DownstreamContext, RepresentationContext, useView } from './contexts'; +import { + DownstreamContext, + RepresentationContext, + useRendererContext, +} from './contexts'; import useColorTransferFunction from './modules/useColorTransferFunction'; import useMapper from './modules/useMapper'; import useProp from './modules/useProp'; @@ -92,100 +95,10 @@ const DefaultProps = { colorDataRange: [0, 1] as Vector2, }; -/* -function useScalarBarActor( - view: IView, - visible: boolean, - lookupTable: Nullable -) { - const scalarBarActor = useRef>(null); - - useEffect(() => { - if (!lookupTable) return; - - scalarBarActor.current = vtkScalarBarActor.newInstance(); - // TODO fixable? - scalarBarActor.current.setScalarsToColors( - lookupTable as unknown as vtkScalarsToColors - ); - scalarBarActor.current.setVisibility(false); - - view.getRenderer().addActor(scalarBarActor.current); - - return () => { - if (scalarBarActor.current) { - view.getRenderer().removeActor(scalarBarActor.current); - scalarBarActor.current.delete(); - scalarBarActor.current = null; - } - }; - }, [view, visible, lookupTable]); - - return scalarBarActor.current; -} - -/* -function useCubeAxes( - view: View, - visible: boolean, - mapper: Nullable -) { - const axes = useRef>(null); - - useEffect(() => { - axes.current = vtkCubeAxesActor.newInstance({ - visibility: false, - dataBounds: [-1, 1, -1, 1, -1, 1], - }); - - axes.current - .getActors() - .forEach(({ setVisibility }) => setVisibility(false)); - - view.getRenderer().addActor(axes.current); - - return () => { - if (axes.current) { - view.getRenderer().removeActor(axes.current); - axes.current.delete(); - axes.current = null; - } - }; - }, []); - - const updateCubeAxes = useCallback(() => { - if (!axes.current || !mapper) return; - - if (mapper.getInputData()) { - const bounds = mapper.getInputData().getBounds(); - if (bounds[0] < bounds[1]) { - axes.current.setDataBounds(bounds); - view.requestRender(); - } - } - }, [mapper, view]); - - useVTKModifiedEffect(mapper, updateCubeAxes); - useVTKModifiedEffect(mapper?.getInputData(), updateCubeAxes); - - return axes.current; -} -*/ - export default forwardRef(function GeometryRepresentation( props: Props, fwdRef ) { - const OrderedUnmountContext = useOrderedUnmountContext(); - - /* - const { - // showCubeAxes = false, - // showScalarBar = false, - // scalarBarTitle = '', - } = props; - */ - const view = useView(); const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); const [dataAvailable, setDataAvailable] = useState(false); @@ -221,7 +134,6 @@ export default forwardRef(function GeometryRepresentation( }; const getActor = useProp({ constructor: () => vtkActor.newInstance({ visibility: false }), - view, id: props.id, props: actorProps, trackModified, @@ -242,14 +154,13 @@ export default forwardRef(function GeometryRepresentation( ([cur], [prev]) => compareShallowObject(cur, prev) ); - // const scalarBarActor = useScalarBarActor(view, false, lookupTable); - // const cubeAxes = useCubeAxes(view, false, mapper); - // --- // + const renderer = useRendererContext(); + useEffect(() => { - if (view && modifiedRef.current) { - view.requestRender(); + if (modifiedRef.current) { + renderer.requestRender(); resetModified(); } }); @@ -257,14 +168,14 @@ export default forwardRef(function GeometryRepresentation( const representation = useMemo( () => ({ dataChanged: () => { - view.requestRender(); + renderer.requestRender(); }, dataAvailable: () => { setDataAvailable(true); representation.dataChanged(); }, }), - [view] + [renderer] ); const downstream = useMemo( @@ -278,12 +189,10 @@ export default forwardRef(function GeometryRepresentation( useImperativeHandle(fwdRef, () => representation); return ( - - - - {props.children} - - - + + + {props.children} + + ); }); diff --git a/src/core-ts/ImageData.tsx b/src/core-ts/ImageData.tsx index ca9d7e9..fb88bce 100644 --- a/src/core-ts/ImageData.tsx +++ b/src/core-ts/ImageData.tsx @@ -8,8 +8,8 @@ import { useMemo, } from 'react'; import { IDataset } from '../types'; +import deletionRegistry from '../utils-ts/DeletionRegistry'; import useGetterRef from '../utils-ts/useGetterRef'; -import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; import useUnmount from '../utils-ts/useUnmount'; import { DatasetContext, useDownstream, useRepresentation } from './contexts'; @@ -57,9 +57,11 @@ export default forwardRef(function PolyData(props: Props, fwdRef) { direction = DefaultProps.direction, } = props; - const [imRef, getImageData] = useGetterRef(() => vtkImageData.newInstance()); - - const OrderedUnmountContext = useOrderedUnmountContext(); + const [imRef, getImageData] = useGetterRef(() => { + const im = vtkImageData.newInstance(); + deletionRegistry.register(im, () => im.delete()); + return im; + }); const representation = useRepresentation(); const downstream = useDownstream(); @@ -96,16 +98,14 @@ export default forwardRef(function PolyData(props: Props, fwdRef) { useUnmount(() => { if (imRef.current) { - imRef.current.delete(); + deletionRegistry.markForDeletion(imRef.current); imRef.current = null; } }); return ( - - - {props.children} - - + + {props.children} + ); }); diff --git a/src/core-ts/OpenGLRenderWindow.tsx b/src/core-ts/OpenGLRenderWindow.tsx new file mode 100644 index 0000000..570432f --- /dev/null +++ b/src/core-ts/OpenGLRenderWindow.tsx @@ -0,0 +1,88 @@ +import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; +import { + createContext, + CSSProperties, + forwardRef, + HTMLProps, + PropsWithChildren, + useEffect, + useImperativeHandle, + useMemo, + useRef, +} from 'react'; +import deletionRegistry from '../utils-ts/DeletionRegistry'; +import useGetterRef from '../utils-ts/useGetterRef'; +import useUnmount from '../utils-ts/useUnmount'; + +const RENDERER_STYLE: CSSProperties = { + position: 'absolute', + width: '100%', + height: '100%', + overflow: 'hidden', +}; + +export interface IOpenGLRenderWindow { + get(): vtkOpenGLRenderWindow; + getContainer(): HTMLElement | null; +} + +export const OpenGLRenderWindowContext = + createContext(null); + +export interface Props extends PropsWithChildren, HTMLProps {} + +export default forwardRef(function OpenGLRenderWindow(props: Props, fwdRef) { + const containerRef = useRef(null); + + const [viewRef, getRWView] = useGetterRef(() => { + const view = vtkOpenGLRenderWindow.newInstance(); + deletionRegistry.register(view, () => view.delete()); + return view; + }); + + useEffect(() => { + const view = getRWView(); + view.setContainer(containerRef.current as HTMLElement); + return () => { + // FIXME setContainer API should allow null + view.setContainer(null as unknown as HTMLElement); + }; + }, [getRWView]); + + useUnmount(() => { + if (viewRef.current) { + deletionRegistry.markForDeletion(viewRef.current); + viewRef.current = null; + } + }); + + const api = useMemo( + () => ({ + get: getRWView, + getContainer: () => containerRef.current, + }), + [getRWView] + ); + + useImperativeHandle(fwdRef, () => api); + + const { children, style, ...containerProps } = props; + const containerStyle = useMemo( + () => ({ + position: 'relative', + width: '100%', + height: '100%', + ...style, + }), + [style] + ); + + return ( +
+
+ + {children} + +
+ ); +}); diff --git a/src/core-ts/PolyData.tsx b/src/core-ts/PolyData.tsx index b782938..e2f80d6 100644 --- a/src/core-ts/PolyData.tsx +++ b/src/core-ts/PolyData.tsx @@ -13,8 +13,8 @@ import { TypedArrayConstructor, } from '../types'; import { dataArraySize, toTypedArray } from '../utils-ts'; +import deletionRegistry from '../utils-ts/DeletionRegistry'; import useGetterRef from '../utils-ts/useGetterRef'; -import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; import { usePrevious } from '../utils-ts/usePrevious'; import useUnmount from '../utils-ts/useUnmount'; import { DatasetContext, useDownstream, useRepresentation } from './contexts'; @@ -97,9 +97,11 @@ export default forwardRef(function PolyData(props: Props, fwdRef) { strips, } = props; - const [pdRef, getPolyData] = useGetterRef(() => vtkPolyData.newInstance()); - - const OrderedUnmountContext = useOrderedUnmountContext(); + const [pdRef, getPolyData] = useGetterRef(() => { + const pd = vtkPolyData.newInstance(); + deletionRegistry.register(pd, () => pd.delete()); + return pd; + }); const representation = useRepresentation(); const downstream = useDownstream(); @@ -215,16 +217,14 @@ export default forwardRef(function PolyData(props: Props, fwdRef) { useUnmount(() => { if (pdRef.current) { - pdRef.current.delete(); + deletionRegistry.markForDeletion(pdRef.current); pdRef.current = null; } }); return ( - - - {props.children} - - + + {props.children} + ); }); diff --git a/src/core-ts/RenderWindow.tsx b/src/core-ts/RenderWindow.tsx new file mode 100644 index 0000000..2404666 --- /dev/null +++ b/src/core-ts/RenderWindow.tsx @@ -0,0 +1,190 @@ +import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow'; +import { + forwardRef, + PropsWithChildren, + useCallback, + useContext, + useEffect, + useImperativeHandle, + useMemo, + useState, +} from 'react'; +import { IRenderWindow } from '../types'; +import deletionRegistry from '../utils-ts/DeletionRegistry'; +import useGetterRef from '../utils-ts/useGetterRef'; +import useMount from '../utils-ts/useMount'; +import useResizeObserver from '../utils-ts/useResizeObserver'; +import useUnmount from '../utils-ts/useUnmount'; +import { RenderWindowContext } from './contexts'; +import useInteractor from './modules/useInteractor'; +import { + ManipulatorSettings, + useInteractorStyle, + useInteractorStyleManipulatorSettings, +} from './modules/useInteractorStyle'; +import { OpenGLRenderWindowContext } from './OpenGLRenderWindow'; + +export interface Props extends PropsWithChildren { + /** + * Configure the interactions + */ + interactorSettings?: ManipulatorSettings[]; +} + +const DefaultProps = { + interactorSettings: [ + { + button: 1, + action: 'Rotate', + }, + { + button: 2, + action: 'Pan', + }, + { + button: 3, + action: 'Zoom', + scrollEnabled: true, + }, + { + button: 1, + action: 'Pan', + alt: true, + }, + { + button: 1, + action: 'Zoom', + control: true, + }, + { + button: 1, + action: 'Select', + shift: true, + }, + { + button: 1, + action: 'Roll', + alt: true, + shift: true, + }, + ] as ManipulatorSettings[], +}; + +// TODO Wrap in OpenGLRenderWindow by default +export default forwardRef(function RenderWindow(props: Props, fwdRef) { + const { interactorSettings = DefaultProps.interactorSettings } = props; + + const openGLRenderWindow = useContext(OpenGLRenderWindowContext); + if (!openGLRenderWindow) throw new Error('No OpenGL Render Window!'); + + // --- RenderWindow --- // + + const [rwRef, getRenderWindow] = useGetterRef(() => { + const rw = vtkRenderWindow.newInstance(); + deletionRegistry.register(rw, () => rw.delete()); + return rw; + }); + + useEffect(() => { + const rwView = openGLRenderWindow.get(); + deletionRegistry.incRefCount(rwView); + const renderWindow = getRenderWindow(); + renderWindow.addView(rwView); + return () => { + renderWindow.removeView(rwView); + deletionRegistry.decRefCount(rwView); + }; + }, [openGLRenderWindow, getRenderWindow]); + + useUnmount(() => { + if (rwRef.current) { + deletionRegistry.markForDeletion(rwRef.current); + rwRef.current = null; + } + }); + + // --- Interactor --- // + + const getInteractor = useInteractor(openGLRenderWindow); + + useEffect(() => { + getRenderWindow().setInteractor(getInteractor()); + }); + + const [getInteractorStyle, setInteractorStyle] = + useInteractorStyle(getInteractor); + + useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); + + // --- rendering --- // + + const [renderRequested, setRenderRequested] = useState(false); + const queueRender = () => setRenderRequested(true); + + // allow drawing during animation + useEffect(() => { + const interactor = getInteractor(); + const renderWindow = getRenderWindow(); + const startSub = interactor.onStartAnimation(() => { + renderWindow.getRenderers().forEach((ren) => ren.setDraw(true)); + }); + + const endSub = interactor.onEndAnimation(() => { + renderWindow.getRenderers().forEach((ren) => ren.setDraw(false)); + }); + + return () => { + startSub.unsubscribe(); + endSub.unsubscribe(); + }; + }, [getInteractor, getRenderWindow]); + + useEffect(() => { + if (renderRequested) { + setRenderRequested(false); + const renderWindow = getRenderWindow(); + renderWindow.render(); + renderWindow.getRenderers().forEach((ren) => ren.setDraw(false)); + } + }, [renderRequested, getRenderWindow]); + + // --- resize --- // + + const updateViewSize = useCallback(() => { + const container = openGLRenderWindow.getContainer(); + if (!container) return; + + const renderWindowView = openGLRenderWindow.get(); + const renderWindow = getRenderWindow(); + const devicePixelRatio = window.devicePixelRatio || 1; + const { width, height } = container.getBoundingClientRect(); + const w = Math.floor(width * devicePixelRatio); + const h = Math.floor(height * devicePixelRatio); + renderWindowView.setSize(Math.max(w, 10), Math.max(h, 10)); + renderWindow.render(); + }, [openGLRenderWindow, getRenderWindow]); + + useResizeObserver(openGLRenderWindow.get().getContainer(), updateViewSize); + useMount(() => updateViewSize()); + + // --- api --- // + + const api = useMemo( + () => ({ + get: getRenderWindow, + getInteractor, + getInteractorStyle, + setInteractorStyle, + _queueRender: queueRender, + }), + [getRenderWindow, getInteractor, getInteractorStyle, setInteractorStyle] + ); + + useImperativeHandle(fwdRef, () => api); + + return ( + + {props.children} + + ); +}); diff --git a/src/core-ts/Renderer.tsx b/src/core-ts/Renderer.tsx new file mode 100644 index 0000000..76916f3 --- /dev/null +++ b/src/core-ts/Renderer.tsx @@ -0,0 +1,163 @@ +import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; +import { ICameraInitialValues } from '@kitware/vtk.js/Rendering/Core/Camera'; +import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; +import { Bounds, Vector3, Vector4 } from '@kitware/vtk.js/types'; +import { + forwardRef, + PropsWithChildren, + useCallback, + useEffect, + useImperativeHandle, + useMemo, +} from 'react'; +import { IRenderer } from '../types'; +import deletionRegistry from '../utils-ts/DeletionRegistry'; +import useBooleanAccumulator from '../utils-ts/useBooleanAccumulator'; +import useGetterRef from '../utils-ts/useGetterRef'; +import useUnmount from '../utils-ts/useUnmount'; +import { RendererContext, useRenderWindowContext } from './contexts'; +import useCamera from './modules/useCamera'; + +export interface Props extends PropsWithChildren { + /** + * The color of the view background using 3 floating numbers + * between 0-1 of Red, Green, Blue component. + */ + background?: Vector3 | Vector4; + + /** + * Whether this renderer is interactive. + */ + interactive?: boolean; + + /** + * Camera properties, such as position, focal point, etc. + */ + camera?: ICameraInitialValues; + + /** + * Whether to automatically call resetCamera() (default: true) + * + * When set to true, resetCamera() will be invoked whenever + * a render is requested due to a pipeline update, e.g. the data + * changed or a representation property was modified. + * + * When set to false, the user must explicitly provide camera + * properties. Note that the initial resetCamera() call will + * still occur upon component mount. + */ + autoResetCamera?: boolean; + + /** + * Whether to automatically re-set the interactor style's center of rotation. (default: true) + * + * This is a convenience property for interactor styles that support setCenterOfRotation(). + */ + autoCenterOfRotation?: boolean; +} + +export const DefaultProps = { + background: [0.2, 0.3, 0.4] as Vector3, + interactive: true, + autoResetCamera: true, + autoCenterOfRotation: true, +}; + +export default forwardRef(function Renderer(props: Props, fwdRef) { + const renderWindow = useRenderWindowContext(); + const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); + + const [renRef, getRenderer] = useGetterRef(() => { + const ren = vtkRenderer.newInstance(); + deletionRegistry.register(ren, () => ren.delete()); + return ren; + }); + + const { + background = DefaultProps.background, + interactive = DefaultProps.interactive, + } = props; + + useEffect(() => { + getRenderer().setBackground(background); + }, [background, getRenderer]); + + useEffect(() => { + getRenderer().setInteractive(interactive); + }, [interactive, getRenderer]); + + useEffect(() => { + const rw = renderWindow.get(); + deletionRegistry.incRefCount(rw); + const renderer = getRenderer(); + rw.addRenderer(renderer); + return () => { + rw.removeRenderer(renderer); + deletionRegistry.decRefCount(rw); + }; + }, [renderWindow, getRenderer]); + + // --- camera --- // + + const { + camera: cameraProps, + autoResetCamera = DefaultProps.autoResetCamera, + autoCenterOfRotation = DefaultProps.autoCenterOfRotation, + } = props; + const getCamera = useCamera(getRenderer, cameraProps, trackModified); + + const resetCamera = useCallback( + (boundsToUse?: Bounds) => { + const interactorStyle = renderWindow.getInteractorStyle(); + getRenderer().resetCamera(boundsToUse); + if (autoCenterOfRotation && 'setCenterOfRotation' in interactorStyle) { + const style = interactorStyle as vtkInteractorStyle & { + setCenterOfRotation(center: Vector3): boolean; + }; + style.setCenterOfRotation(getCamera().getFocalPoint()); + } + }, + [autoCenterOfRotation, renderWindow, getRenderer, getCamera] + ); + + // --- cleanup --- // + + useUnmount(() => { + if (renRef.current) { + deletionRegistry.markForDeletion(renRef.current); + renRef.current = null; + } + }); + + // --- api --- // + + const api = useMemo( + () => ({ + get: getRenderer, + resetCamera, + requestRender: () => { + const ren = getRenderer(); + ren.setDraw(true); + if (autoResetCamera) { + ren.resetCamera(); + } + renderWindow._queueRender(); + }, + }), + [autoResetCamera, renderWindow, resetCamera, getRenderer] + ); + + useEffect(() => { + if (modifiedRef.current) { + api.requestRender(); + resetModified(); + } + }); + + useImperativeHandle(fwdRef, () => api); + return ( + + {props.children} + + ); +}); diff --git a/src/core-ts/SliceRepresentation.tsx b/src/core-ts/SliceRepresentation.tsx index 08b1c92..e0d322e 100644 --- a/src/core-ts/SliceRepresentation.tsx +++ b/src/core-ts/SliceRepresentation.tsx @@ -18,8 +18,11 @@ import { IDownstream, IRepresentation } from '../types'; import { compareShallowObject } from '../utils-ts/comparators'; import useBooleanAccumulator from '../utils-ts/useBooleanAccumulator'; import useComparableEffect from '../utils-ts/useComparableEffect'; -import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; -import { DownstreamContext, RepresentationContext, useView } from './contexts'; +import { + DownstreamContext, + RepresentationContext, + useRendererContext, +} from './contexts'; import useColorTransferFunction from './modules/useColorTransferFunction'; import useMapper from './modules/useMapper'; import useProp from './modules/useProp'; @@ -92,9 +95,6 @@ const DefaultProps = { }; export default forwardRef(function SliceRepresentation(props: Props, fwdRef) { - const OrderedUnmountContext = useOrderedUnmountContext(); - - const view = useView(); const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); const [dataAvailable, setDataAvailable] = useState(false); @@ -128,7 +128,6 @@ export default forwardRef(function SliceRepresentation(props: Props, fwdRef) { }; const getActor = useProp({ constructor: () => vtkImageSlice.newInstance(), - view, id: props.id, props: actorProps, trackModified, @@ -184,9 +183,11 @@ export default forwardRef(function SliceRepresentation(props: Props, fwdRef) { // --- // + const renderer = useRendererContext(); + useEffect(() => { - if (view && modifiedRef.current) { - view.requestRender(); + if (modifiedRef.current) { + renderer.requestRender(); resetModified(); } }); @@ -194,14 +195,14 @@ export default forwardRef(function SliceRepresentation(props: Props, fwdRef) { const representation = useMemo( () => ({ dataChanged: () => { - view.requestRender(); + renderer.requestRender(); }, dataAvailable: () => { setDataAvailable(true); representation.dataChanged(); }, }), - [view] + [renderer] ); const downstream = useMemo( @@ -215,12 +216,10 @@ export default forwardRef(function SliceRepresentation(props: Props, fwdRef) { useImperativeHandle(fwdRef, () => representation); return ( - - - - {props.children} - - - + + + {props.children} + + ); }); diff --git a/src/core-ts/View.tsx b/src/core-ts/View.tsx index a3796f1..830db59 100644 --- a/src/core-ts/View.tsx +++ b/src/core-ts/View.tsx @@ -1,322 +1,86 @@ -import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; -import { ICameraInitialValues } from '@kitware/vtk.js/Rendering/Core/Camera'; -import { Bounds, Nullable, Vector3 } from '@kitware/vtk.js/types'; -import { - CSSProperties, - forwardRef, - PropsWithChildren, - useCallback, - useEffect, - useImperativeHandle, - useMemo, - useRef, - useState, -} from 'react'; -import { IView } from '../types'; -import { useOrderedUnmountContext } from '../utils-ts/useOrderedUnmountEffect'; -import { ViewContext } from './contexts'; -import useCamera from './modules/useCamera'; -import useInteractor from './modules/useInteractor'; -import { - ManipulatorSettings, - useInteractorStyle, - useInteractorStyleManipulatorSettings, -} from './modules/useInteractorStyle'; -import useRenderer from './modules/useRenderer'; -import useRenderWindow from './modules/useRenderWindow'; -import useRenderWindowView from './modules/useRenderWindowView'; -import { useViewResize } from './modules/useViewResize'; - -const RENDERER_STYLE: CSSProperties = { - position: 'absolute', - width: '100%', - height: '100%', - overflow: 'hidden', -}; - -interface Props extends PropsWithChildren { - /** - * The ID used to identify this component. - */ - id?: string; - - /** - * Allow user to override the default View style { width: '100%', height: '100%' } - */ - style?: CSSProperties; - - /** - * Allow user to provide custom className associated to root element - */ - className?: string; - - /** - * The color of the view background using 3 floating numbers - * between 0-1 of Red, Green, Blue component. - */ - background?: Vector3; - - /** - * Configure the interactions - * TODO fix - */ - interactorSettings?: ManipulatorSettings[]; - - /** - * Enable/Disable interaction - */ - interactive?: boolean; - - /** - * Camera properties, such as position, focal point, etc. - */ - camera?: ICameraInitialValues; - - /** - * Whether to automatically call resetCamera() (default: true) - * - * When set to true, resetCamera() will be invoked whenever - * a render is requested due to a pipeline update, e.g. the data - * changed or a representation property was modified. - * - * When set to false, the user must explicitly provide camera - * properties. Note that the initial resetCamera() call will - * still occur upon component mount. - */ - autoResetCamera?: boolean; - - /** - * Whether to automatically re-set the interactor style's center of rotation. (default: true) - * - * This is a convenience property for interactor styles that support setCenterOfRotation(). - */ - autoCenterOfRotation?: boolean; - +import { forwardRef, PropsWithChildren, useRef } from 'react'; +import { IRenderer, IRenderWindow } from '../types'; +import { omit, pick } from '../utils-ts'; +import OpenGLRenderWindow, { + IOpenGLRenderWindow, + Props as OpenGLRenderWindowProps, +} from './OpenGLRenderWindow'; +import Renderer, { Props as RendererProps } from './Renderer'; +import RenderWindow, { Props as RenderWindowProps } from './RenderWindow'; + +interface Props + extends PropsWithChildren, + OpenGLRenderWindowProps, + RenderWindowProps, + RendererProps { /** * List of picking listeners to bind. By default it is disabled (empty array). */ - pickingModes?: 'click' | 'hover' | 'select' | 'mouseDown' | 'mouseUp'; - + // pickingModes?: 'click' | 'hover' | 'select' | 'mouseDown' | 'mouseUp'; /** * User callback function for click */ - onClick?: () => void; - + // onClick?: () => void; /** * User callback function for mouse down */ - onMouseDown?: () => void; - + // onMouseDown?: () => void; /** * User callback function for mouse up */ - onMouseUp?: () => void; - + // onMouseUp?: () => void; /** * User callback function for hover */ - onHover?: () => void; - + // onHover?: () => void; /** * User callback function for box select */ - onSelect?: () => void; - + // onSelect?: () => void; /** * Defines the tolerance of the click and hover selection. */ - pointerSize?: number; - - /** - * Show/Hide Cube Axes for the given representation - */ - showCubeAxes?: boolean; - - /** - * Configure cube Axes style by overriding the set of properties defined - * https://github.com/Kitware/vtk-js/blob/HEAD/Sources/Rendering/Core/CubeAxesActor/index.js#L703-L719 - */ - cubeAxesStyle?: Record; - + // pointerSize?: number; /** * Show/Hide orientation axes. */ - showOrientationAxes?: boolean; + // showOrientationAxes?: boolean; } -const DefaultProps = { - interactive: true, - autoResetCamera: true, - autoCenterOfRotation: true, - background: [0.2, 0.3, 0.4] as Vector3, - style: { - width: '100%', - height: '100%', - } as CSSProperties, - interactorSettings: [ - { - button: 1, - action: 'Rotate', - }, - { - button: 2, - action: 'Pan', - }, - { - button: 3, - action: 'Zoom', - scrollEnabled: true, - }, - { - button: 1, - action: 'Pan', - alt: true, - }, - { - button: 1, - action: 'Zoom', - control: true, - }, - { - button: 1, - action: 'Select', - shift: true, - }, - { - button: 1, - action: 'Roll', - alt: true, - shift: true, - }, - ] as ManipulatorSettings[], -}; - export default forwardRef(function View(props: Props, fwdRef) { - const OrderedUnmountContext = useOrderedUnmountContext(); - - const { - background = DefaultProps.background, - interactive = DefaultProps.interactive, - autoResetCamera = DefaultProps.autoResetCamera, - autoCenterOfRotation = DefaultProps.autoCenterOfRotation, - interactorSettings = DefaultProps.interactorSettings, - camera: cameraProps, - } = props; - - const containerRef = useRef>(null); - - const getRWView = useRenderWindowView(containerRef.current); - const getRenderer = useRenderer(background); - // We need to attach the renderWindowView to the renderWindow - // before setting the view onto the interactor. - const getRenderWindow = useRenderWindow(getRWView, getRenderer); - const getInteractor = useInteractor( - getRWView, - containerRef.current, - interactive - ); - - const [getInteractorStyle, setInteractorStyle] = - useInteractorStyle(getInteractor); - useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); - - // --- rendering state --- // - - const [renderRequested, setRenderRequested] = useState(false); - const requestRender = () => setRenderRequested(true); - - // --- camera --- // - - const getCamera = useCamera(getRenderer, requestRender, cameraProps); - - const resetCamera = useCallback( - (boundsToUse?: Bounds) => { - getRenderer().resetCamera(boundsToUse); - if ( - autoCenterOfRotation && - 'setCenterOfRotation' in getInteractorStyle() - ) { - const style = getInteractorStyle() as vtkInteractorStyle & { - setCenterOfRotation(center: Vector3): boolean; - }; - style.setCenterOfRotation(getCamera().getFocalPoint()); - } - }, - [autoCenterOfRotation, getRenderer, getInteractorStyle, getCamera] + const openGLRenderWindowRef = useRef(null); + const renderWindowRef = useRef(null); + const rendererRef = useRef(null); + + const renderWindowProps = pick(props, 'interactorSettings'); + const rendererProps = pick( + props, + 'background', + 'interactive', + 'camera', + 'autoResetCamera', + 'autoCenterOfRotation' ); - // --- handle renders --- // - - useEffect(() => { - if (renderRequested) { - if (autoResetCamera) { - resetCamera(); - } - getRenderWindow().render(); - setRenderRequested(false); - } - }, [renderRequested, autoResetCamera, resetCamera, getRenderWindow]); - - // --- view API --- // - - const view = useMemo(() => { - return { - getRenderer, - getRenderWindow, - getInteractor, - getAPISpecificRenderWindow: getRWView, - getCamera, - getInteractorStyle, - setInteractorStyle, - /** - * Requests a vtk.js render. - * - This will batch render requests, triggering a single - * vtk.js render once after a react render. - */ - requestRender, - /** - * Resets the camera. - */ - resetCamera: (boundsToUse?: Bounds) => { - resetCamera(boundsToUse); - requestRender(); - }, - }; - }, [ - getRWView, - getRenderer, - getRenderWindow, - getInteractor, - getCamera, - getInteractorStyle, - setInteractorStyle, - resetCamera, - ]); - - // expose the view as a ref for imperative control - useImperativeHandle(fwdRef, () => view); - - // handle resizing - useViewResize(containerRef, view); - - const { style = DefaultProps.style } = props; - const containerStyle = useMemo( - () => ({ - position: 'relative', - ...style, - }), - [style] + const openGLRenderWindowProps = omit( + props, + ...([ + ...Object.keys(renderWindowProps), + ...Object.keys(rendererProps), + ] as (keyof Props)[]) ); + // view API just exposes the render window + renderer return ( - - -
-
+ + + {props.children} -
- - + + + ); }); diff --git a/src/core-ts/contexts.ts b/src/core-ts/contexts.ts index 1be28e7..1598f78 100644 --- a/src/core-ts/contexts.ts +++ b/src/core-ts/contexts.ts @@ -6,54 +6,58 @@ import { createContext, useContext } from 'react'; import { IDataset, IDownstream, + IRenderer, + IRenderWindow, IRepresentation, IShareDataset, - IView, } from '../types'; +export const RenderWindowContext = createContext>(null); +export const RendererContext = createContext(null); export const FieldDataContext = createContext vtkDataSetAttributes | vtkFieldData>>(null); +export const DatasetContext = createContext>>(null); +export const RepresentationContext = + createContext>(null); +export const DownstreamContext = createContext>(null); +export const ShareDataSetContext = createContext>(null); + +export function useRenderWindowContext() { + const rw = useContext(RenderWindowContext); + if (!rw) throw new Error('No RenderWindow context!'); + return rw; +} + +export function useRendererContext() { + const r = useContext(RendererContext); + if (!r) throw new Error('No Renderer context!'); + return r; +} export function useFieldData() { const fd = useContext(FieldDataContext); - if (!fd) throw new Error('No field data context!'); + if (!fd) throw new Error('No FieldData context!'); return fd as () => T; } -export const DatasetContext = createContext>>(null); - export function useDataset() { const ds = useContext(DatasetContext); - if (!ds) throw new Error('No dataset context!'); + if (!ds) throw new Error('No Dataset context!'); return ds as IDataset; } -export const ViewContext = createContext>(null); - -export function useView() { - const view = useContext(ViewContext); - if (!view) throw new Error('No view context!'); - return view; -} - -export const RepresentationContext = - createContext>(null); - export function useRepresentation() { const rep = useContext(RepresentationContext); - if (!rep) throw new Error('No representation context!'); + if (!rep) throw new Error('No Representation context!'); return rep; } -export const DownstreamContext = createContext>(null); export function useDownstream() { const ds = useContext(DownstreamContext); - if (!ds) throw new Error('No downstream context!'); + if (!ds) throw new Error('No Downstream context!'); return ds; } -export const ShareDataSetContext = createContext>(null); - export function useShareDataSet() { const share = useContext(ShareDataSetContext); if (!share) throw new Error('No ShareDataSet context!'); diff --git a/src/core-ts/modules/useCamera.ts b/src/core-ts/modules/useCamera.ts index fe917e3..bb86736 100644 --- a/src/core-ts/modules/useCamera.ts +++ b/src/core-ts/modules/useCamera.ts @@ -3,12 +3,13 @@ import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; import { Vector3 } from '@kitware/vtk.js/types'; import { useCallback } from 'react'; import { compareShallowObject } from '../../utils-ts/comparators'; +import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; import useComparableEffect from '../../utils-ts/useComparableEffect'; export default function useCamera( getRenderer: () => vtkRenderer, - requestRender: () => void, - cameraProps?: ICameraInitialValues + cameraProps: ICameraInitialValues | undefined, + trackModified: BooleanAccumulator ) { const getCamera = useCallback( () => getRenderer().getActiveCamera(), @@ -36,9 +37,7 @@ export default function useCamera( // camera.set doesn't return whether a change occurred, // since setPosition/etc. don't return this flag. - if (mtime < camera.getMTime()) { - requestRender(); - } + trackModified(mtime < camera.getMTime()); }, [cameraProps], ([cur], [prev]) => compareShallowObject(cur, prev) diff --git a/src/core-ts/modules/useColorTransferFunction.ts b/src/core-ts/modules/useColorTransferFunction.ts index 8b742aa..5d45f80 100644 --- a/src/core-ts/modules/useColorTransferFunction.ts +++ b/src/core-ts/modules/useColorTransferFunction.ts @@ -2,6 +2,7 @@ import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransf import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'; import { Vector2 } from '@kitware/vtk.js/types'; import { compareVector2 } from '../../utils-ts/comparators'; +import deletionRegistry from '../../utils-ts/DeletionRegistry'; import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; import useComparableEffect from '../../utils-ts/useComparableEffect'; import useGetterRef from '../../utils-ts/useGetterRef'; @@ -12,9 +13,11 @@ export default function useColorTransferFunction( range: Vector2, trackModified: BooleanAccumulator ) { - const [lutRef, getLUT] = useGetterRef(() => - vtkColorTransferFunction.newInstance() - ); + const [lutRef, getLUT] = useGetterRef(() => { + const func = vtkColorTransferFunction.newInstance(); + deletionRegistry.register(func, () => func.delete()); + return func; + }); useComparableEffect( () => { @@ -33,7 +36,7 @@ export default function useColorTransferFunction( useUnmount(() => { if (lutRef.current) { - lutRef.current.delete(); + deletionRegistry.markForDeletion(lutRef.current); lutRef.current = null; } }); diff --git a/src/core-ts/modules/useCoordinate.ts b/src/core-ts/modules/useCoordinate.ts index 033295f..f4a7fc0 100644 --- a/src/core-ts/modules/useCoordinate.ts +++ b/src/core-ts/modules/useCoordinate.ts @@ -2,6 +2,7 @@ import vtkCoordinate, { ICoordinateInitialValues, } from '@kitware/vtk.js/Rendering/Core/Coordinate'; import { compareShallowObject } from '../../utils-ts/comparators'; +import deletionRegistry from '../../utils-ts/DeletionRegistry'; import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; import useComparableEffect from '../../utils-ts/useComparableEffect'; import useGetterRef from '../../utils-ts/useGetterRef'; @@ -11,9 +12,11 @@ export default function useCoordinate( props: ICoordinateInitialValues, trackModified: BooleanAccumulator ) { - const [ref, getCoordinate] = useGetterRef(() => - vtkCoordinate.newInstance(props) - ); + const [ref, getCoordinate] = useGetterRef(() => { + const coord = vtkCoordinate.newInstance(props); + deletionRegistry.register(coord, () => coord.delete()); + return coord; + }); useComparableEffect( () => { @@ -27,7 +30,7 @@ export default function useCoordinate( useUnmount(() => { if (ref.current) { - ref.current.delete(); + deletionRegistry.markForDeletion(ref.current); ref.current = null; } }); diff --git a/src/core-ts/modules/useInteractor.ts b/src/core-ts/modules/useInteractor.ts index 0e5835c..c7660aa 100644 --- a/src/core-ts/modules/useInteractor.ts +++ b/src/core-ts/modules/useInteractor.ts @@ -1,32 +1,38 @@ import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; -import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; -import { Nullable } from '@kitware/vtk.js/types'; import { useEffect } from 'react'; +import deletionRegistry from '../../utils-ts/DeletionRegistry'; import useGetterRef from '../../utils-ts/useGetterRef'; import useUnmount from '../../utils-ts/useUnmount'; +import { IOpenGLRenderWindow } from '../OpenGLRenderWindow'; -export default function useInteractor( - getRWView: () => vtkOpenGLRenderWindow, - container: Nullable, - interactive: boolean -) { +export default function useInteractor(openglRenderWindow: IOpenGLRenderWindow) { const [interactorRef, getInteractor] = useGetterRef(() => { - return vtkRenderWindowInteractor.newInstance(); + const interactor = vtkRenderWindowInteractor.newInstance(); + deletionRegistry.register(interactor, () => interactor.delete()); + return interactor; }); useEffect(() => { - if (!container || !interactive) return; + const container = openglRenderWindow.getContainer(); + if (!container) return; + const interactor = getInteractor(); - const rwView = getRWView(); + const rwView = openglRenderWindow.get(); + deletionRegistry.incRefCount(rwView); interactor.setView(rwView); interactor.initialize(); interactor.bindEvents(container); - }, [interactive, container, getRWView, getInteractor]); + return () => { + interactor.disable(); + interactor.unbindEvents(); + deletionRegistry.decRefCount(rwView); + }; + }, [openglRenderWindow, getInteractor]); useUnmount(() => { if (interactorRef.current) { - interactorRef.current.delete(); + deletionRegistry.markForDeletion(interactorRef.current); interactorRef.current = null; } }); diff --git a/src/core-ts/modules/useInteractorStyle.ts b/src/core-ts/modules/useInteractorStyle.ts index 4256939..93c228f 100644 --- a/src/core-ts/modules/useInteractorStyle.ts +++ b/src/core-ts/modules/useInteractorStyle.ts @@ -26,6 +26,7 @@ import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWind import { Nullable } from '@kitware/vtk.js/types'; import deepEqual from 'deep-equal'; import { useCallback, useEffect, useState } from 'react'; +import deletionRegistry from '../../utils-ts/DeletionRegistry'; import useComparableEffect from '../../utils-ts/useComparableEffect'; import useGetterRef from '../../utils-ts/useGetterRef'; import useUnmount from '../../utils-ts/useUnmount'; @@ -122,7 +123,9 @@ export function useInteractorStyle( const [styleRef, getStyle] = useGetterRef(() => { setExternalStyle(null); - return vtkInteractorStyleManipulator.newInstance(); + const style = vtkInteractorStyleManipulator.newInstance(); + deletionRegistry.register(style, () => style.delete()); + return style; }); useEffect(() => { @@ -131,7 +134,7 @@ export function useInteractorStyle( useUnmount(() => { if (styleRef.current && !externalStyle) { - styleRef.current.delete(); + deletionRegistry.markForDeletion(styleRef.current); styleRef.current = null; } }); @@ -139,7 +142,7 @@ export function useInteractorStyle( const setStyle = useCallback( (style: vtkInteractorStyle) => { if (!externalStyle && styleRef.current) { - styleRef.current.delete(); + deletionRegistry.markForDeletion(styleRef.current); } styleRef.current = style; // should help retrigger effects dependent on the style diff --git a/src/core-ts/modules/useMapper.ts b/src/core-ts/modules/useMapper.ts index 76f22da..8002302 100644 --- a/src/core-ts/modules/useMapper.ts +++ b/src/core-ts/modules/useMapper.ts @@ -1,5 +1,6 @@ import vtkAbstractMapper from '@kitware/vtk.js/Rendering/Core/AbstractMapper'; import { compareShallowObject } from '../../utils-ts/comparators'; +import deletionRegistry from '../../utils-ts/DeletionRegistry'; import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; import useComparableEffect from '../../utils-ts/useComparableEffect'; import useGetterRef from '../../utils-ts/useGetterRef'; @@ -13,7 +14,11 @@ export default function useMapper( props: I | undefined, trackModified: BooleanAccumulator ) { - const [mapperRef, getMapper] = useGetterRef(constructor); + const [mapperRef, getMapper] = useGetterRef(() => { + const m = constructor(); + deletionRegistry.register(m, () => m.delete()); + return m; + }); useComparableEffect( () => { @@ -26,7 +31,7 @@ export default function useMapper( useUnmount(() => { if (mapperRef.current) { - mapperRef.current.delete(); + deletionRegistry.markForDeletion(mapperRef.current); mapperRef.current = null; } }); diff --git a/src/core-ts/modules/useProp.ts b/src/core-ts/modules/useProp.ts index 62c2b11..930f1db 100644 --- a/src/core-ts/modules/useProp.ts +++ b/src/core-ts/modules/useProp.ts @@ -2,20 +2,19 @@ import vtkProp, { IPropInitialValues, } from '@kitware/vtk.js/Rendering/Core/Prop'; import { useEffect } from 'react'; -import { IView } from '../../types'; import { compareShallowObject } from '../../utils-ts/comparators'; +import deletionRegistry from '../../utils-ts/DeletionRegistry'; import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; import useComparableEffect from '../../utils-ts/useComparableEffect'; import useGetterRef from '../../utils-ts/useGetterRef'; -import { useOrderedUnmountEffect } from '../../utils-ts/useOrderedUnmountEffect'; import useUnmount from '../../utils-ts/useUnmount'; +import { useRendererContext } from '../contexts'; /** * Params to useProp. */ type Params = { constructor: () => T; - view: IView; id: string | undefined; props: A | undefined; trackModified: BooleanAccumulator; @@ -30,22 +29,29 @@ type Params = { export default function useProp< T extends vtkProp, A extends IPropInitialValues ->({ constructor, view, id, props, trackModified }: Params) { - const [actorRef, getActor] = useGetterRef(constructor); +>({ constructor, id, props, trackModified }: Params) { + const renderer = useRendererContext(); + const [actorRef, getActor] = useGetterRef(() => { + const a = constructor(); + deletionRegistry.register(a, () => a.delete()); + return a; + }); useEffect(() => { getActor().set({ representationID: id }, true /* noWarning */); }, [id, getActor]); // add to renderer - useOrderedUnmountEffect(() => { + useEffect(() => { const actor = getActor(); - const renderer = view.getRenderer(); - renderer.addActor(actor); + const ren = renderer.get(); + deletionRegistry.incRefCount(ren); + ren.addActor(actor); return () => { - renderer.removeActor(actor); + ren.removeActor(actor); + deletionRegistry.decRefCount(ren); }; - }, [view, getActor]); + }, [renderer, getActor]); // set actor props useComparableEffect( @@ -60,7 +66,7 @@ export default function useProp< // cleanup on unmount useUnmount(() => { if (actorRef.current) { - actorRef.current.delete(); + deletionRegistry.markForDeletion(actorRef.current); actorRef.current = null; } }); diff --git a/src/core-ts/modules/useRenderWindow.ts b/src/core-ts/modules/useRenderWindow.ts deleted file mode 100644 index 6f92ecf..0000000 --- a/src/core-ts/modules/useRenderWindow.ts +++ /dev/null @@ -1,42 +0,0 @@ -import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; -import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow'; -import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; -import { useEffect } from 'react'; -import useGetterRef from '../../utils-ts/useGetterRef'; -import useUnmount from '../../utils-ts/useUnmount'; - -export default function useRenderWindow( - getRWView: () => vtkOpenGLRenderWindow, - getRenderer: () => vtkRenderer -) { - const [rwRef, getRenderWindow] = useGetterRef(() => { - return vtkRenderWindow.newInstance(); - }); - - useEffect(() => { - const rwView = getRWView(); - const renderWindow = getRenderWindow(); - renderWindow.addView(rwView); - return () => { - renderWindow.removeView(rwView); - }; - }, [getRWView, getRenderWindow]); - - useEffect(() => { - const renderWindow = getRenderWindow(); - const renderer = getRenderer(); - renderWindow.addRenderer(renderer); - return () => { - renderWindow.removeRenderer(renderer); - }; - }, [getRenderer, getRenderWindow]); - - useUnmount(() => { - if (rwRef.current) { - rwRef.current.delete(); - rwRef.current = null; - } - }); - - return getRenderWindow; -} diff --git a/src/core-ts/modules/useRenderWindowView.ts b/src/core-ts/modules/useRenderWindowView.ts deleted file mode 100644 index a6b0fb5..0000000 --- a/src/core-ts/modules/useRenderWindowView.ts +++ /dev/null @@ -1,26 +0,0 @@ -import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; -import { Nullable } from '@kitware/vtk.js/types'; -import { useEffect } from 'react'; -import useGetterRef from '../../utils-ts/useGetterRef'; -import useUnmount from '../../utils-ts/useUnmount'; - -export default function useRenderWindowView(container: Nullable) { - const [viewRef, getView] = useGetterRef(() => { - return vtkOpenGLRenderWindow.newInstance(); - }); - - useEffect(() => { - const view = getView(); - // FIXME setContainer API should allow null - view.setContainer(container as HTMLElement); - }, [container, getView]); - - useUnmount(() => { - if (viewRef.current) { - viewRef.current.delete(); - viewRef.current = null; - } - }); - - return getView; -} diff --git a/src/core-ts/modules/useRenderer.ts b/src/core-ts/modules/useRenderer.ts deleted file mode 100644 index 4021608..0000000 --- a/src/core-ts/modules/useRenderer.ts +++ /dev/null @@ -1,23 +0,0 @@ -import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; -import { Vector3, Vector4 } from '@kitware/vtk.js/types'; -import { useEffect } from 'react'; -import useGetterRef from '../../utils-ts/useGetterRef'; -import useUnmount from '../../utils-ts/useUnmount'; - -export default function useRenderer(background: Vector3 | Vector4) { - const [renRef, getRenderer] = useGetterRef(() => vtkRenderer.newInstance()); - - useEffect(() => { - const renderer = getRenderer(); - renderer.setBackground(background); - }, [background, getRenderer]); - - useUnmount(() => { - if (renRef.current) { - renRef.current.delete(); - renRef.current = null; - } - }); - - return getRenderer; -} diff --git a/src/index.ts b/src/index.ts index 288189f..a600935 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,7 @@ import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Glyph'; import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Volume'; export { default as Algorithm } from './core-ts/Algorithm'; +export * as Contexts from './core-ts/contexts'; export { default as DataArray } from './core-ts/DataArray'; export { default as Geometry2DRepresentation } from './core-ts/Geometry2DRepresentation'; export { default as GeometryRepresentation } from './core-ts/GeometryRepresentation'; diff --git a/src/types/index.ts b/src/types/index.ts index 5d97172..7ee1b65 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -35,6 +35,23 @@ export type VtkConstructor> = { newInstance(initalValues?: P): T; }; +export interface IRenderWindow { + get(): vtkRenderWindow; + getInteractor(): vtkRenderWindowInteractor; + getInteractorStyle(): vtkInteractorStyle; + setInteractorStyle(style: vtkInteractorStyle): void; + /** + * Internal use. Use requestRender() on the Renderer context. + */ + _queueRender(): void; +} + +export interface IRenderer { + get(): vtkRenderer; + resetCamera(): void; + requestRender(): void; +} + export interface IView { getRenderer(): vtkRenderer; getRenderWindow(): vtkRenderWindow; diff --git a/src/utils-ts/DeletionRegistry.ts b/src/utils-ts/DeletionRegistry.ts new file mode 100644 index 0000000..203440d --- /dev/null +++ b/src/utils-ts/DeletionRegistry.ts @@ -0,0 +1,77 @@ +type DeletionCallback = (obj: unknown) => void; + +/** + * Tracks the usage of a particular object, triggering a deletion callback when refs hit zero and the object is marked for deletion. + * + * register() is the entrypoint for tracking an object. + * markForDeletion() is the counterpart to register(), indicating that the object should be deleted in the future. + * incRefCount() and decRefCount() should be used to track when code uses/stops using the object. + * unregister() is used only if there's not reason to continue tracking the object. + */ +export class DeletionRegistry { + private refCount: Map; + private callbacks: Map; + private toDelete: Set; + + constructor() { + this.refCount = new Map(); + this.callbacks = new Map(); + this.toDelete = new Set(); + } + + get liveCount() { + return this.refCount.size; + } + + register(obj: unknown, deleteCallback: DeletionCallback) { + this.refCount.set(obj, 0); + this.callbacks.set(obj, deleteCallback); + } + + unregister(obj: unknown) { + this.refCount.delete(obj); + this.callbacks.delete(obj); + this.toDelete.delete(obj); + } + + markForDeletion(obj: unknown) { + if (this.refCount.has(obj) && this.callbacks.has(obj)) { + this.toDelete.add(obj); + this.tryToDispose(obj); + } + } + + incRefCount(obj: unknown) { + const count = this.refCount.get(obj) ?? 0; + this.refCount.set(obj, count + 1); + } + + decRefCount(obj: unknown) { + let count = this.refCount.get(obj); + if (count != null) { + if (count === 0) throw new Error('Cannot decrease ref count below 0'); + count -= 1; + this.refCount.set(obj, count); + if (count === 0) { + this.tryToDispose(obj); + } + } + } + + private tryToDispose(obj: unknown) { + if (!this.toDelete.has(obj)) return; + + const count = this.refCount.get(obj) ?? Infinity; + const callback = this.callbacks.get(obj); + if (count === 0 && callback) { + callback(obj); + this.refCount.delete(obj); + this.callbacks.delete(obj); + this.toDelete.delete(obj); + } + } +} + +const deletionRegistry = new DeletionRegistry(); +export default deletionRegistry; +(window as any).dr = deletionRegistry; diff --git a/src/utils-ts/index.ts b/src/utils-ts/index.ts index ace0148..9d1c5f5 100644 --- a/src/utils-ts/index.ts +++ b/src/utils-ts/index.ts @@ -35,3 +35,29 @@ export function toTypedArray( return values; } + +export function pick( + source: T, + ...keys: K[] +): Pick { + const lookup = new Set(keys); + return Object.entries(source) + .filter(([key]) => lookup.has(key as K)) + .reduce( + (out, [key, value]) => ({ ...out, [key]: value }), + {} as Pick + ); +} + +export function omit( + source: T, + ...keys: K[] +): Omit { + const lookup = new Set(keys); + return Object.entries(source) + .filter(([key]) => !lookup.has(key as K)) + .reduce( + (out, [key, value]) => ({ ...out, [key]: value }), + {} as Omit + ); +} diff --git a/src/utils-ts/useOrderedUnmountEffect.tsx b/src/utils-ts/useOrderedUnmountEffect.tsx deleted file mode 100644 index 75a3d1e..0000000 --- a/src/utils-ts/useOrderedUnmountEffect.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import { Nullable } from '@kitware/vtk.js/types'; -import { - createContext, - DependencyList, - EffectCallback, - PropsWithChildren, - ReactElement, - useContext, - useEffect, - useRef, -} from 'react'; - -type Destructor = () => void; - -interface IOrderedUnmountContext { - callbacks: EffectCallback[]; - children: IOrderedUnmountContext[]; - Provider(props: PropsWithChildren): ReactElement; - addChildContext(child: IOrderedUnmountContext): void; - destroy(): void; - wrap(cb: Destructor | void): Destructor; -} - -const OrderedUnmountContext = - createContext>(null); - -// eslint-disable-next-line @typescript-eslint/no-empty-function -const noop = () => {}; - -/** - * This registers an Ordered Unmount Context. - * - * This must go before any effect (that has cleanup) in a component - * in order to work effectively! - * - * This context must be used in the following manner: - * // must be prior to any effects with cleanup that need to run - * // after children effects are cleaned up. - * const OrderedUnmountContext = useOrderedUnmountEffectContext(); - * ...other effects - * return ( - * - * ... - * - * ) - * - * If a component provides an object to descendants and expects descendants to - * clean up registrations on the object, then the component should create - * an ordered unmount context and the descendants that consume an injected - * object should clean up registrations inside an useOrderedUnmountEffect(). - */ -export function useOrderedUnmountContext() { - const parentContext = useContext(OrderedUnmountContext); - const context = useRef>(null); - - if (!context.current) { - context.current = { - callbacks: [], - children: [], - Provider: (props: PropsWithChildren) => { - return ( - - {props.children ?? null} - - ); - }, - addChildContext: (childContext: IOrderedUnmountContext) => { - if (!context.current) return; - context.current.children.push(childContext); - }, - destroy: () => { - if (!context.current) return; - const { callbacks, children } = context.current; - for (let i = 0; i < children.length; i++) { - children[i].destroy(); - } - for (let i = 0; i < callbacks.length; i++) { - callbacks[i](); - } - context.current.children.length = 0; - context.current.callbacks.length = 0; - }, - wrap: (cleanup: Destructor | void) => { - if (!context.current || !cleanup) return noop; - const { callbacks } = context.current; - callbacks.push(cleanup); - return () => { - const idx = callbacks.indexOf(cleanup); - // do not call if already removed from callbacks array - if (idx > -1) { - callbacks.splice(idx, 1); - cleanup(); - } - }; - }, - }; - - if (context.current && parentContext) - parentContext.addChildContext(context.current); - } - - // unmount - useEffect(() => { - const ctxt = context.current; - return () => { - if (ctxt) ctxt.destroy(); - }; - }, []); - - return context.current; -} - -export function useOrderedUnmountEffect( - callback: EffectCallback, - dependencies: DependencyList -) { - const context = useContext(OrderedUnmountContext); - - useEffect(() => { - if (context) { - return context.wrap(callback()); - } - return callback(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, dependencies); -} From 676d27321e85f8b4faf2ca98fde53a5806e9c00f Mon Sep 17 00:00:00 2001 From: Forrest Date: Mon, 21 Nov 2022 17:31:05 -0500 Subject: [PATCH 024/110] fix(Renderer): call correct resetCamera --- src/core-ts/Renderer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core-ts/Renderer.tsx b/src/core-ts/Renderer.tsx index 76916f3..90cb46a 100644 --- a/src/core-ts/Renderer.tsx +++ b/src/core-ts/Renderer.tsx @@ -139,7 +139,7 @@ export default forwardRef(function Renderer(props: Props, fwdRef) { const ren = getRenderer(); ren.setDraw(true); if (autoResetCamera) { - ren.resetCamera(); + resetCamera(); } renderWindow._queueRender(); }, From e37255c83890f995860f774c0f7121b1d4a0ff5a Mon Sep 17 00:00:00 2001 From: Forrest Date: Mon, 21 Nov 2022 17:48:05 -0500 Subject: [PATCH 025/110] feat: expose fine-grained components --- src/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/index.ts b/src/index.ts index a600935..a83cceb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,8 +9,11 @@ export { default as DataArray } from './core-ts/DataArray'; export { default as Geometry2DRepresentation } from './core-ts/Geometry2DRepresentation'; export { default as GeometryRepresentation } from './core-ts/GeometryRepresentation'; export { default as ImageData } from './core-ts/ImageData'; +export { default as OpenGLRenderWindow } from './core-ts/OpenGLRenderWindow'; export { default as PointData } from './core-ts/PointData'; export { default as PolyData } from './core-ts/PolyData'; +export { default as Renderer } from './core-ts/Renderer'; +export { default as RenderWindow } from './core-ts/RenderWindow'; export { RegisterDataSet, ShareDataSetRoot, From 8175cf42d5f5b98dadac30492c1bfe86166268ca Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 4 Jan 2023 18:03:52 -0500 Subject: [PATCH 026/110] feat: remove interactor style if the same --- src/core-ts/modules/useInteractorStyle.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/core-ts/modules/useInteractorStyle.ts b/src/core-ts/modules/useInteractorStyle.ts index 93c228f..0bb3e82 100644 --- a/src/core-ts/modules/useInteractorStyle.ts +++ b/src/core-ts/modules/useInteractorStyle.ts @@ -98,7 +98,7 @@ export function useInteractorStyleManipulatorSettings( ) { useComparableEffect( () => { - if (getStyle().getClassName() !== 'vtkInteractorStyleManipulator') return; + if (!getStyle().isA('vtkInteractorStyleManipulator')) return; const style = getStyle() as vtkInteractorStyleManipulator; style.removeAllManipulators(); // always add gestures @@ -129,8 +129,17 @@ export function useInteractorStyle( }); useEffect(() => { - getInteractor().setInteractorStyle(getStyle()); - }); + const interactor = getInteractor(); + const style = getStyle(); + deletionRegistry.incRefCount(interactor); + interactor.setInteractorStyle(style); + return () => { + if (interactor.getInteractorStyle() === style) { + interactor.setInteractorStyle(null); + } + deletionRegistry.decRefCount(interactor); + }; + }, [getInteractor, getStyle]); useUnmount(() => { if (styleRef.current && !externalStyle) { @@ -145,7 +154,6 @@ export function useInteractorStyle( deletionRegistry.markForDeletion(styleRef.current); } styleRef.current = style; - // should help retrigger effects dependent on the style setExternalStyle(style); }, [externalStyle, styleRef] From 23aee9d635a65d563a25dc62d617033c6bced471 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 22 Nov 2022 13:07:13 -0500 Subject: [PATCH 027/110] style: move contexts to same file --- src/core-ts/OpenGLRenderWindow.tsx | 11 ++--------- src/core-ts/RenderWindow.tsx | 3 +-- src/core-ts/contexts.ts | 12 ++++++++++++ src/core/MultiViewRoot.js | 2 +- src/types/index.ts | 5 +++++ src/utils-ts/DeletionRegistry.ts | 1 - 6 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/core-ts/OpenGLRenderWindow.tsx b/src/core-ts/OpenGLRenderWindow.tsx index 570432f..2b49145 100644 --- a/src/core-ts/OpenGLRenderWindow.tsx +++ b/src/core-ts/OpenGLRenderWindow.tsx @@ -1,6 +1,5 @@ import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; import { - createContext, CSSProperties, forwardRef, HTMLProps, @@ -10,9 +9,11 @@ import { useMemo, useRef, } from 'react'; +import { IOpenGLRenderWindow } from '../types'; import deletionRegistry from '../utils-ts/DeletionRegistry'; import useGetterRef from '../utils-ts/useGetterRef'; import useUnmount from '../utils-ts/useUnmount'; +import { OpenGLRenderWindowContext } from './contexts'; const RENDERER_STYLE: CSSProperties = { position: 'absolute', @@ -21,14 +22,6 @@ const RENDERER_STYLE: CSSProperties = { overflow: 'hidden', }; -export interface IOpenGLRenderWindow { - get(): vtkOpenGLRenderWindow; - getContainer(): HTMLElement | null; -} - -export const OpenGLRenderWindowContext = - createContext(null); - export interface Props extends PropsWithChildren, HTMLProps {} export default forwardRef(function OpenGLRenderWindow(props: Props, fwdRef) { diff --git a/src/core-ts/RenderWindow.tsx b/src/core-ts/RenderWindow.tsx index 2404666..8bf1ce6 100644 --- a/src/core-ts/RenderWindow.tsx +++ b/src/core-ts/RenderWindow.tsx @@ -15,14 +15,13 @@ import useGetterRef from '../utils-ts/useGetterRef'; import useMount from '../utils-ts/useMount'; import useResizeObserver from '../utils-ts/useResizeObserver'; import useUnmount from '../utils-ts/useUnmount'; -import { RenderWindowContext } from './contexts'; +import { OpenGLRenderWindowContext, RenderWindowContext } from './contexts'; import useInteractor from './modules/useInteractor'; import { ManipulatorSettings, useInteractorStyle, useInteractorStyleManipulatorSettings, } from './modules/useInteractorStyle'; -import { OpenGLRenderWindowContext } from './OpenGLRenderWindow'; export interface Props extends PropsWithChildren { /** diff --git a/src/core-ts/contexts.ts b/src/core-ts/contexts.ts index 1598f78..d7c26f6 100644 --- a/src/core-ts/contexts.ts +++ b/src/core-ts/contexts.ts @@ -6,22 +6,34 @@ import { createContext, useContext } from 'react'; import { IDataset, IDownstream, + IOpenGLRenderWindow, IRenderer, IRenderWindow, IRepresentation, IShareDataset, } from '../types'; +export const OpenGLRenderWindowContext = + createContext(null); + export const RenderWindowContext = createContext>(null); + export const RendererContext = createContext(null); + export const FieldDataContext = createContext vtkDataSetAttributes | vtkFieldData>>(null); + export const DatasetContext = createContext>>(null); + export const RepresentationContext = createContext>(null); + export const DownstreamContext = createContext>(null); + export const ShareDataSetContext = createContext>(null); +export const MultiViewRootContext = createContext(false); + export function useRenderWindowContext() { const rw = useContext(RenderWindowContext); if (!rw) throw new Error('No RenderWindow context!'); diff --git a/src/core/MultiViewRoot.js b/src/core/MultiViewRoot.js index ac66ac2..276b57e 100644 --- a/src/core/MultiViewRoot.js +++ b/src/core/MultiViewRoot.js @@ -1,5 +1,5 @@ -import React, { Component } from 'react'; import PropTypes from 'prop-types'; +import React, { Component } from 'react'; import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow'; import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; diff --git a/src/types/index.ts b/src/types/index.ts index 7ee1b65..b433c66 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -35,6 +35,11 @@ export type VtkConstructor> = { newInstance(initalValues?: P): T; }; +export interface IOpenGLRenderWindow { + get(): vtkOpenGLRenderWindow; + getContainer(): HTMLElement | null; +} + export interface IRenderWindow { get(): vtkRenderWindow; getInteractor(): vtkRenderWindowInteractor; diff --git a/src/utils-ts/DeletionRegistry.ts b/src/utils-ts/DeletionRegistry.ts index 203440d..486f961 100644 --- a/src/utils-ts/DeletionRegistry.ts +++ b/src/utils-ts/DeletionRegistry.ts @@ -74,4 +74,3 @@ export class DeletionRegistry { const deletionRegistry = new DeletionRegistry(); export default deletionRegistry; -(window as any).dr = deletionRegistry; From 3b31f2024d54f1131057e91504db02dcf5e7fa85 Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 5 Jan 2023 12:39:16 -0500 Subject: [PATCH 028/110] fix(RenderWindow): remove setDraw calls for now These will be more useful when using a non-mounted canvas as the drawing source. --- src/core-ts/RenderWindow.tsx | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/src/core-ts/RenderWindow.tsx b/src/core-ts/RenderWindow.tsx index 8bf1ce6..d3c2951 100644 --- a/src/core-ts/RenderWindow.tsx +++ b/src/core-ts/RenderWindow.tsx @@ -120,30 +120,11 @@ export default forwardRef(function RenderWindow(props: Props, fwdRef) { const [renderRequested, setRenderRequested] = useState(false); const queueRender = () => setRenderRequested(true); - // allow drawing during animation - useEffect(() => { - const interactor = getInteractor(); - const renderWindow = getRenderWindow(); - const startSub = interactor.onStartAnimation(() => { - renderWindow.getRenderers().forEach((ren) => ren.setDraw(true)); - }); - - const endSub = interactor.onEndAnimation(() => { - renderWindow.getRenderers().forEach((ren) => ren.setDraw(false)); - }); - - return () => { - startSub.unsubscribe(); - endSub.unsubscribe(); - }; - }, [getInteractor, getRenderWindow]); - useEffect(() => { if (renderRequested) { setRenderRequested(false); const renderWindow = getRenderWindow(); renderWindow.render(); - renderWindow.getRenderers().forEach((ren) => ren.setDraw(false)); } }, [renderRequested, getRenderWindow]); From 405b5a4023b48600676cb7203e95aa0c8c47393e Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 18 Jan 2023 11:07:50 -0500 Subject: [PATCH 029/110] feat(MultiViewRoot): initial implementation --- src/core-ts/MultiViewRoot.tsx | 69 ++++++++++ src/core-ts/OpenGLRenderWindow.tsx | 24 ++-- src/core-ts/RenderWindow.tsx | 2 +- src/core-ts/Renderer.tsx | 2 +- src/core-ts/View.tsx | 196 ++++++++++++++++++++++++++++- src/global.d.ts | 10 ++ src/index.ts | 1 + src/types/index.ts | 5 +- src/utils-ts/ResizeWatcher.ts | 51 ++++++++ src/utils-ts/useEventListener.ts | 25 ++++ 10 files changed, 367 insertions(+), 18 deletions(-) create mode 100644 src/core-ts/MultiViewRoot.tsx create mode 100644 src/utils-ts/ResizeWatcher.ts create mode 100644 src/utils-ts/useEventListener.ts diff --git a/src/core-ts/MultiViewRoot.tsx b/src/core-ts/MultiViewRoot.tsx new file mode 100644 index 0000000..c40f533 --- /dev/null +++ b/src/core-ts/MultiViewRoot.tsx @@ -0,0 +1,69 @@ +import { + CSSProperties, + PropsWithChildren, + useCallback, + useEffect, + useRef, +} from 'react'; +import { IOpenGLRenderWindow, IRenderWindow } from '../types'; +import { + IResizeWatcher, + ResizeWatcher, + ResizeWatcherContext, +} from '../utils-ts/ResizeWatcher'; +import { MultiViewRootContext } from './contexts'; +import OpenGLRenderWindow, { + Props as OpenGLRenderWindowProps, +} from './OpenGLRenderWindow'; +import RenderWindow from './RenderWindow'; + +interface Props extends PropsWithChildren, OpenGLRenderWindowProps {} + +const RW_STYLE: CSSProperties = { + pointerEvents: 'none', +}; + +export default function MultiViewRoot(props: Props) { + const openGLRenderWindowRef = useRef(null); + const renderWindowRef = useRef(null); + const resizeWatcherRef = useRef(new ResizeWatcher()); + + const onResize = useCallback((target: Element) => { + const oglrw = openGLRenderWindowRef.current; + const rw = renderWindowRef.current; + if (!oglrw || !rw) return; + + const devicePixelRatio = window.devicePixelRatio || 1; + const { width, height } = target.getBoundingClientRect(); + const w = Math.floor(width * devicePixelRatio); + const h = Math.floor(height * devicePixelRatio); + oglrw.get().setSize(Math.max(w, 10), Math.max(h, 10)); + rw.requestRender(); + }, []); + + useEffect(() => { + const oglrw = openGLRenderWindowRef.current; + const container = oglrw?.getContainer(); + if (oglrw && container) { + const resize = resizeWatcherRef.current; + resize.watch(container, onResize); + return () => { + resize.unwatch(container, onResize); + }; + } + }, [onResize]); + + return ( + + + + {props.children} + + + + ); +} diff --git a/src/core-ts/OpenGLRenderWindow.tsx b/src/core-ts/OpenGLRenderWindow.tsx index 2b49145..00864d5 100644 --- a/src/core-ts/OpenGLRenderWindow.tsx +++ b/src/core-ts/OpenGLRenderWindow.tsx @@ -15,17 +15,19 @@ import useGetterRef from '../utils-ts/useGetterRef'; import useUnmount from '../utils-ts/useUnmount'; import { OpenGLRenderWindowContext } from './contexts'; -const RENDERER_STYLE: CSSProperties = { +const RENDERWINDOW_STYLE: CSSProperties = { position: 'absolute', width: '100%', height: '100%', overflow: 'hidden', }; -export interface Props extends PropsWithChildren, HTMLProps {} +export interface Props extends PropsWithChildren, HTMLProps { + renderWindowStyle?: CSSProperties; +} export default forwardRef(function OpenGLRenderWindow(props: Props, fwdRef) { - const containerRef = useRef(null); + const rwContainerRef = useRef(null); const [viewRef, getRWView] = useGetterRef(() => { const view = vtkOpenGLRenderWindow.newInstance(); @@ -35,7 +37,7 @@ export default forwardRef(function OpenGLRenderWindow(props: Props, fwdRef) { useEffect(() => { const view = getRWView(); - view.setContainer(containerRef.current as HTMLElement); + view.setContainer(rwContainerRef.current as HTMLElement); return () => { // FIXME setContainer API should allow null view.setContainer(null as unknown as HTMLElement); @@ -52,14 +54,14 @@ export default forwardRef(function OpenGLRenderWindow(props: Props, fwdRef) { const api = useMemo( () => ({ get: getRWView, - getContainer: () => containerRef.current, + getContainer: () => rwContainerRef.current, }), [getRWView] ); useImperativeHandle(fwdRef, () => api); - const { children, style, ...containerProps } = props; + const { children, style, renderWindowStyle, ...containerProps } = props; const containerStyle = useMemo( () => ({ position: 'relative', @@ -70,9 +72,17 @@ export default forwardRef(function OpenGLRenderWindow(props: Props, fwdRef) { [style] ); + const rwContainerStyle = useMemo( + () => ({ + ...RENDERWINDOW_STYLE, + ...renderWindowStyle, + }), + [renderWindowStyle] + ); + return (
-
+
{children} diff --git a/src/core-ts/RenderWindow.tsx b/src/core-ts/RenderWindow.tsx index d3c2951..3928f10 100644 --- a/src/core-ts/RenderWindow.tsx +++ b/src/core-ts/RenderWindow.tsx @@ -155,7 +155,7 @@ export default forwardRef(function RenderWindow(props: Props, fwdRef) { getInteractor, getInteractorStyle, setInteractorStyle, - _queueRender: queueRender, + requestRender: queueRender, }), [getRenderWindow, getInteractor, getInteractorStyle, setInteractorStyle] ); diff --git a/src/core-ts/Renderer.tsx b/src/core-ts/Renderer.tsx index 90cb46a..5ceaa12 100644 --- a/src/core-ts/Renderer.tsx +++ b/src/core-ts/Renderer.tsx @@ -141,7 +141,7 @@ export default forwardRef(function Renderer(props: Props, fwdRef) { if (autoResetCamera) { resetCamera(); } - renderWindow._queueRender(); + renderWindow.requestRender(); }, }), [autoResetCamera, renderWindow, resetCamera, getRenderer] diff --git a/src/core-ts/View.tsx b/src/core-ts/View.tsx index 830db59..cd60d40 100644 --- a/src/core-ts/View.tsx +++ b/src/core-ts/View.tsx @@ -1,8 +1,26 @@ -import { forwardRef, PropsWithChildren, useRef } from 'react'; -import { IRenderer, IRenderWindow } from '../types'; +import { FixedVTKRenderWindowInteractor } from '@kitware/vtk.js/type-patches'; +import { + CSSProperties, + forwardRef, + PropsWithChildren, + useCallback, + useContext, + useEffect, + useImperativeHandle, + useMemo, + useRef, +} from 'react'; +import { IOpenGLRenderWindow, IRenderer, IRenderWindow } from '../types'; import { omit, pick } from '../utils-ts'; +import { ResizeWatcherContext } from '../utils-ts/ResizeWatcher'; +import { useEventListener } from '../utils-ts/useEventListener'; +import useMount from '../utils-ts/useMount'; +import { + MultiViewRootContext, + OpenGLRenderWindowContext, + RenderWindowContext, +} from './contexts'; import OpenGLRenderWindow, { - IOpenGLRenderWindow, Props as OpenGLRenderWindowProps, } from './OpenGLRenderWindow'; import Renderer, { Props as RendererProps } from './Renderer'; @@ -47,7 +65,15 @@ interface Props // showOrientationAxes?: boolean; } -export default forwardRef(function View(props: Props, fwdRef) { +interface IView { + isInMultiViewRoot(): boolean; + getOpenGLRenderWindow(): IOpenGLRenderWindow | null; + getRenderWindow(): IRenderWindow | null; + getRenderer(): IRenderer | null; +} + +const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { + // view API just exposes the render window + renderer const openGLRenderWindowRef = useRef(null); const renderWindowRef = useRef(null); const rendererRef = useRef(null); @@ -70,7 +96,18 @@ export default forwardRef(function View(props: Props, fwdRef) { ] as (keyof Props)[]) ); - // view API just exposes the render window + renderer + const api = useMemo( + () => ({ + isInMultiViewRoot: () => false, + getOpenGLRenderWindow: () => openGLRenderWindowRef.current, + getRenderWindow: () => renderWindowRef.current, + getRenderer: () => rendererRef.current, + }), + [] + ); + + useImperativeHandle(fwdRef, () => api); + return ( ); }); + +const ParentedView = forwardRef(function ParentedView(props: Props, fwdRef) { + const containerRef = useRef(null); + const rendererRef = useRef(null); + + const rendererProps = pick( + props, + 'background', + 'interactive', + 'camera', + 'autoResetCamera', + 'autoCenterOfRotation' + ); + + const openGLRenderWindowAPI = useContext(OpenGLRenderWindowContext); + if (!openGLRenderWindowAPI) { + throw new Error('OpenGLRenderWindow is missing inside the MultiViewRoot'); + } + + const renderWindowAPI = useContext(RenderWindowContext); + if (!renderWindowAPI) { + throw new Error('RenderWindow is missing inside the MultiViewRoot'); + } + + // --- interactor binding --- // + + useEventListener(containerRef, 'pointerenter', (ev: PointerEvent) => { + const rendererAPI = rendererRef.current; + if (!rendererAPI) return; + + const interactor = renderWindowAPI.getInteractor(); + (interactor as FixedVTKRenderWindowInteractor).setCurrentRenderer( + rendererAPI.get() + ); + + const oldContainer = interactor.getContainer(); + const newContainer = containerRef.current; + if (oldContainer !== newContainer) { + if (oldContainer) { + interactor.unbindEvents(); + } + if (newContainer) { + interactor.bindEvents(newContainer); + } + + // forward event to interactor + interactor.handlePointerEnter(ev); + } + }); + + // --- resize handling --- // + + const resizeWatcher = useContext(ResizeWatcherContext); + + const onResize = useCallback(() => { + const renderer = rendererRef.current; + const viewContainer = openGLRenderWindowAPI.getContainer(); + const rendererContainer = containerRef.current; + + if (!renderer || !viewContainer || !rendererContainer) return; + + const viewBox = viewContainer.getBoundingClientRect(); + const rendererBox = rendererContainer.getBoundingClientRect(); + + const top = rendererBox.top - viewBox.top; + const left = rendererBox.left - viewBox.left; + + const xmin = left / viewBox.width; + const xmax = (left + rendererBox.width) / viewBox.width; + const ymin = 1 - (top + rendererBox.height) / viewBox.height; + const ymax = 1 - top / viewBox.height; + + renderer.get().setViewport(xmin, ymin, xmax, ymax); + renderer.requestRender(); + }, [openGLRenderWindowAPI]); + + useMount(() => onResize()); + + useEffect(() => { + const rendererContainer = containerRef.current; + const renderer = rendererRef.current; + const viewContainer = openGLRenderWindowAPI.getContainer(); + if (resizeWatcher && rendererContainer && renderer && viewContainer) { + resizeWatcher.watch(rendererContainer, onResize); + resizeWatcher.watch(viewContainer, onResize); + return () => { + resizeWatcher.unwatch(rendererContainer, onResize); + resizeWatcher.unwatch(viewContainer, onResize); + }; + } + }, [onResize, openGLRenderWindowAPI, resizeWatcher]); + + // --- api --- // + + const api = useMemo( + () => ({ + isInMultiViewRoot: () => true, + getOpenGLRenderWindow: () => openGLRenderWindowAPI, + getRenderWindow: () => renderWindowAPI, + getRenderer: () => rendererRef.current, + }), + [openGLRenderWindowAPI, renderWindowAPI] + ); + + useImperativeHandle(fwdRef, () => api); + + const style = useMemo( + () => ({ + position: 'relative', + width: '100%', + height: '100%', + overflow: 'hidden', + touchAction: 'none', + userSelect: 'none', + WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)', + }), + [] + ); + + return ( +
+ + {props.children} + +
+ ); +}); + +export default forwardRef(function View(props: Props, fwdRef) { + const singleViewRef = useRef(null); + const parentedViewRef = useRef(null); + + const multiViewRoot = useContext(MultiViewRootContext); + + const api = useMemo(() => { + if (multiViewRoot) { + return parentedViewRef.current; + } + return singleViewRef.current; + }, [multiViewRoot]); + + useImperativeHandle(fwdRef, () => api); + + if (multiViewRoot) { + return ; + } else { + return ; + } +}); diff --git a/src/global.d.ts b/src/global.d.ts index 2ab80bd..501169f 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -1,3 +1,13 @@ +declare module '@kitware/vtk.js/type-patches' { + import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; + import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; + + export interface FixedVTKRenderWindowInteractor + extends vtkRenderWindowInteractor { + setCurrentRenderer(ren: vtkRenderer): void; + } +} + declare module '@kitware/vtk.js/Rendering/Core/CubeAxesActor' { import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor'; export interface vtkCubeAxesActor extends vtkActor { diff --git a/src/index.ts b/src/index.ts index a83cceb..bb7a8e8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,6 +9,7 @@ export { default as DataArray } from './core-ts/DataArray'; export { default as Geometry2DRepresentation } from './core-ts/Geometry2DRepresentation'; export { default as GeometryRepresentation } from './core-ts/GeometryRepresentation'; export { default as ImageData } from './core-ts/ImageData'; +export { default as MultiViewRoot } from './core-ts/MultiViewRoot'; export { default as OpenGLRenderWindow } from './core-ts/OpenGLRenderWindow'; export { default as PointData } from './core-ts/PointData'; export { default as PolyData } from './core-ts/PolyData'; diff --git a/src/types/index.ts b/src/types/index.ts index b433c66..8c4a4e8 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -45,10 +45,7 @@ export interface IRenderWindow { getInteractor(): vtkRenderWindowInteractor; getInteractorStyle(): vtkInteractorStyle; setInteractorStyle(style: vtkInteractorStyle): void; - /** - * Internal use. Use requestRender() on the Renderer context. - */ - _queueRender(): void; + requestRender(): void; } export interface IRenderer { diff --git a/src/utils-ts/ResizeWatcher.ts b/src/utils-ts/ResizeWatcher.ts new file mode 100644 index 0000000..74ff963 --- /dev/null +++ b/src/utils-ts/ResizeWatcher.ts @@ -0,0 +1,51 @@ +import { createContext } from 'react'; + +export type ResizeWatcherCallback = (target: Element) => void; +export type ResizeWatcherStop = () => void; + +export interface IResizeWatcher { + watch(element: Element, callback: ResizeWatcherCallback): void; + unwatch(element: Element, callback: ResizeWatcherCallback): void; +} + +export const ResizeWatcherContext = createContext(null); + +/** + * A variant of ResizeObserver that acts similarly to add/removeEventListener. + */ +export class ResizeWatcher implements IResizeWatcher { + private resizeObserver: ResizeObserver; + private callbacks: Map; + + constructor() { + this.resizeObserver = new ResizeObserver((entries) => + this.onResize(entries) + ); + this.callbacks = new Map(); + } + + onResize(entries: ResizeObserverEntry[]) { + entries.forEach((entry) => { + const callbacks = this.callbacks.get(entry.target); + if (callbacks) { + callbacks.forEach((cb) => cb(entry.target)); + } + }); + } + + watch(element: Element, callback: ResizeWatcherCallback) { + const cbs = this.callbacks.get(element) ?? []; + cbs.push(callback); + this.callbacks.set(element, cbs); + this.resizeObserver.observe(element); + } + + unwatch(element: Element, callback: ResizeWatcherCallback) { + this.resizeObserver.unobserve(element); + const cbs = this.callbacks.get(element) ?? []; + const idx = cbs.indexOf(callback); + if (idx > -1) { + cbs.splice(idx, 1); + } + } +} diff --git a/src/utils-ts/useEventListener.ts b/src/utils-ts/useEventListener.ts new file mode 100644 index 0000000..cf1cdee --- /dev/null +++ b/src/utils-ts/useEventListener.ts @@ -0,0 +1,25 @@ +import { RefObject, useEffect } from 'react'; + +type EventCallback = (this: HTMLElement, ev: E) => void; + +/** + * Event Listener. + * + * The typing currently only supports HTMLElement targets. + */ +export function useEventListener( + targetRef: RefObject, + eventName: E, + callback: EventCallback, + options?: AddEventListenerOptions | boolean +) { + useEffect(() => { + const target = targetRef.current; + if (target) { + target.addEventListener(eventName, callback, options); + return () => { + target.removeEventListener(eventName, callback, options); + }; + } + }, [eventName, callback, options, targetRef]); +} From c673123ea6dedc66b3aa508068c7ab7820635c4b Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 18 Jan 2023 11:10:23 -0500 Subject: [PATCH 030/110] fix(Renderer): no need to call setDraw --- src/core-ts/Renderer.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/core-ts/Renderer.tsx b/src/core-ts/Renderer.tsx index 5ceaa12..0067e8d 100644 --- a/src/core-ts/Renderer.tsx +++ b/src/core-ts/Renderer.tsx @@ -136,8 +136,6 @@ export default forwardRef(function Renderer(props: Props, fwdRef) { get: getRenderer, resetCamera, requestRender: () => { - const ren = getRenderer(); - ren.setDraw(true); if (autoResetCamera) { resetCamera(); } From 4108827099a0da91e3e456c78e16a2b58fa68a54 Mon Sep 17 00:00:00 2001 From: Forrest Date: Fri, 20 Jan 2023 11:29:51 -0500 Subject: [PATCH 031/110] fix(PolyData): recompute bounds --- src/core-ts/PolyData.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core-ts/PolyData.tsx b/src/core-ts/PolyData.tsx index e2f80d6..31aaea0 100644 --- a/src/core-ts/PolyData.tsx +++ b/src/core-ts/PolyData.tsx @@ -212,7 +212,10 @@ export default forwardRef(function PolyData(props: Props, fwdRef) { } } - if (modified) dataset.modified(); + if (modified) { + polyData.computeBounds(); + dataset.modified(); + } }); useUnmount(() => { From 3adb2347d31ef52ad8808cd763ff56f90909d273 Mon Sep 17 00:00:00 2001 From: Forrest Date: Fri, 20 Jan 2023 11:30:13 -0500 Subject: [PATCH 032/110] fix(View): avoid always-null api --- src/core-ts/View.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/core-ts/View.tsx b/src/core-ts/View.tsx index cd60d40..7f27d35 100644 --- a/src/core-ts/View.tsx +++ b/src/core-ts/View.tsx @@ -256,10 +256,14 @@ export default forwardRef(function View(props: Props, fwdRef) { const multiViewRoot = useContext(MultiViewRootContext); const api = useMemo(() => { - if (multiViewRoot) { - return parentedViewRef.current; - } - return singleViewRef.current; + const getView = () => + multiViewRoot ? parentedViewRef.current : singleViewRef.current; + return { + isInMultiViewRoot: () => multiViewRoot, + getOpenGLRenderWindow: () => getView()?.getOpenGLRenderWindow() ?? null, + getRenderWindow: () => getView()?.getRenderWindow() ?? null, + getRenderer: () => getView()?.getRenderer() ?? null, + }; }, [multiViewRoot]); useImperativeHandle(fwdRef, () => api); From be2b0a9831f7a507e6827c7aee0d1c4d4a20fe11 Mon Sep 17 00:00:00 2001 From: Forrest Date: Fri, 20 Jan 2023 11:48:36 -0500 Subject: [PATCH 033/110] fix: update IView and move types to file --- src/core-ts/View.tsx | 22 ++++++++++++++-------- src/{types/index.ts => types.ts} | 20 +++++++++++--------- 2 files changed, 25 insertions(+), 17 deletions(-) rename src/{types/index.ts => types.ts} (83%) diff --git a/src/core-ts/View.tsx b/src/core-ts/View.tsx index 7f27d35..ab0c3de 100644 --- a/src/core-ts/View.tsx +++ b/src/core-ts/View.tsx @@ -1,4 +1,5 @@ import { FixedVTKRenderWindowInteractor } from '@kitware/vtk.js/type-patches'; +import { Bounds } from '@kitware/vtk.js/types'; import { CSSProperties, forwardRef, @@ -10,7 +11,7 @@ import { useMemo, useRef, } from 'react'; -import { IOpenGLRenderWindow, IRenderer, IRenderWindow } from '../types'; +import { IOpenGLRenderWindow, IRenderer, IRenderWindow, IView } from '../types'; import { omit, pick } from '../utils-ts'; import { ResizeWatcherContext } from '../utils-ts/ResizeWatcher'; import { useEventListener } from '../utils-ts/useEventListener'; @@ -65,13 +66,6 @@ interface Props // showOrientationAxes?: boolean; } -interface IView { - isInMultiViewRoot(): boolean; - getOpenGLRenderWindow(): IOpenGLRenderWindow | null; - getRenderWindow(): IRenderWindow | null; - getRenderer(): IRenderer | null; -} - const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { // view API just exposes the render window + renderer const openGLRenderWindowRef = useRef(null); @@ -102,6 +96,10 @@ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { getOpenGLRenderWindow: () => openGLRenderWindowRef.current, getRenderWindow: () => renderWindowRef.current, getRenderer: () => rendererRef.current, + requestRender: () => rendererRef.current?.requestRender(), + getCamera: () => rendererRef.current?.get().getActiveCamera() ?? null, + resetCamera: (boundsToUse?: Bounds) => + rendererRef.current?.resetCamera(boundsToUse), }), [] ); @@ -221,6 +219,10 @@ const ParentedView = forwardRef(function ParentedView(props: Props, fwdRef) { getOpenGLRenderWindow: () => openGLRenderWindowAPI, getRenderWindow: () => renderWindowAPI, getRenderer: () => rendererRef.current, + requestRender: () => rendererRef.current?.requestRender(), + getCamera: () => rendererRef.current?.get().getActiveCamera() ?? null, + resetCamera: (boundsToUse?: Bounds) => + rendererRef.current?.resetCamera(boundsToUse), }), [openGLRenderWindowAPI, renderWindowAPI] ); @@ -263,6 +265,10 @@ export default forwardRef(function View(props: Props, fwdRef) { getOpenGLRenderWindow: () => getView()?.getOpenGLRenderWindow() ?? null, getRenderWindow: () => getView()?.getRenderWindow() ?? null, getRenderer: () => getView()?.getRenderer() ?? null, + requestRender: () => getView()?.requestRender(), + getCamera: () => getView()?.getCamera() ?? null, + resetCamera: (boundsToUse?: Bounds) => + getView()?.resetCamera(boundsToUse), }; }, [multiViewRoot]); diff --git a/src/types/index.ts b/src/types.ts similarity index 83% rename from src/types/index.ts rename to src/types.ts index 8c4a4e8..3089167 100644 --- a/src/types/index.ts +++ b/src/types.ts @@ -10,7 +10,7 @@ import { TypedArray, vtkPipelineConnection, } from '@kitware/vtk.js/types'; -import { NUMPY_DTYPES } from '../utils-ts/numpy'; +import { NUMPY_DTYPES } from './utils-ts/numpy'; export type NumpyEncodedArray = { bvals: string; @@ -50,19 +50,21 @@ export interface IRenderWindow { export interface IRenderer { get(): vtkRenderer; - resetCamera(): void; + resetCamera(boundsToUse?: Bounds): void; requestRender(): void; } export interface IView { - getRenderer(): vtkRenderer; - getRenderWindow(): vtkRenderWindow; - getAPISpecificRenderWindow(): vtkOpenGLRenderWindow; - getInteractor(): vtkRenderWindowInteractor; - getInteractorStyle(): vtkInteractorStyle; - setInteractorStyle(style: vtkInteractorStyle): void; - getCamera(): vtkCamera; + isInMultiViewRoot(): boolean; + getRenderer(): IRenderer | null; + getRenderWindow(): IRenderWindow | null; + getOpenGLRenderWindow(): IOpenGLRenderWindow | null; + // getAPISpecificRenderWindow(): vtkOpenGLRenderWindow; + // getInteractor(): vtkRenderWindowInteractor; + // getInteractorStyle(): vtkInteractorStyle; + // setInteractorStyle(style: vtkInteractorStyle): void; requestRender(): void; + getCamera(): vtkCamera | null; resetCamera(boundsToUse?: Bounds): void; } From a7806fdf16be351dac42cd9efbe2f609d8c02770 Mon Sep 17 00:00:00 2001 From: Forrest Date: Fri, 20 Jan 2023 11:49:39 -0500 Subject: [PATCH 034/110] refactor: delete old core files BREAKING CHANGES: the old react-vtk-js class component API is now being replaced with a new function-based API. This not only changes the imperative ref APIs, but also component props, usage, and more. --- src/AvailableClasses.js | 37 - src/core/Algorithm.js | 140 --- src/core/Calculator.js | 106 -- src/core/CellData.js | 28 - src/core/DataArray.js | 151 --- src/core/Dataset.js | 115 --- src/core/FieldData.js | 28 - src/core/Geometry2DRepresentation.js | 231 ----- src/core/GeometryRepresentation.js | 338 ------- src/core/GlyphRepresentation.js | 190 ---- src/core/ImageData.js | 133 --- src/core/MultiViewRoot.js | 224 ----- src/core/PointData.js | 28 - src/core/PolyData.js | 256 ----- src/core/Reader.js | 200 ---- src/core/ShareDataSet.js | 151 --- src/core/SliceRepresentation.js | 316 ------ src/core/View.js | 922 ------------------ src/core/ViewContainer.js | 167 ---- src/core/VolumeController.js | 112 --- src/core/VolumeRepresentation.js | 225 ----- src/core/index.js | 61 -- src/index.js | 4 - src/light.js | 53 - .../PointCloudRepresentation.js | 137 --- .../VolumeDataRepresentation.js | 162 --- src/representations/index.js | 10 - src/utils.js | 84 -- 28 files changed, 4609 deletions(-) delete mode 100644 src/AvailableClasses.js delete mode 100644 src/core/Algorithm.js delete mode 100644 src/core/Calculator.js delete mode 100644 src/core/CellData.js delete mode 100644 src/core/DataArray.js delete mode 100644 src/core/Dataset.js delete mode 100644 src/core/FieldData.js delete mode 100644 src/core/Geometry2DRepresentation.js delete mode 100644 src/core/GeometryRepresentation.js delete mode 100644 src/core/GlyphRepresentation.js delete mode 100644 src/core/ImageData.js delete mode 100644 src/core/MultiViewRoot.js delete mode 100644 src/core/PointData.js delete mode 100644 src/core/PolyData.js delete mode 100644 src/core/Reader.js delete mode 100644 src/core/ShareDataSet.js delete mode 100644 src/core/SliceRepresentation.js delete mode 100644 src/core/View.js delete mode 100644 src/core/ViewContainer.js delete mode 100644 src/core/VolumeController.js delete mode 100644 src/core/VolumeRepresentation.js delete mode 100644 src/core/index.js delete mode 100644 src/index.js delete mode 100644 src/light.js delete mode 100644 src/representations/PointCloudRepresentation.js delete mode 100644 src/representations/VolumeDataRepresentation.js delete mode 100644 src/representations/index.js delete mode 100644 src/utils.js diff --git a/src/AvailableClasses.js b/src/AvailableClasses.js deleted file mode 100644 index 16bcbe5..0000000 --- a/src/AvailableClasses.js +++ /dev/null @@ -1,37 +0,0 @@ -// List classes that we want to have available -// => this is required because of tree shacking - -import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Volume'; -import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Geometry'; -import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Glyph'; - -// Data access helper -import '@kitware/vtk.js/IO/Core/DataAccessHelper/HttpDataAccessHelper'; -import '@kitware/vtk.js/IO/Core/DataAccessHelper/JSZipDataAccessHelper'; - -// Sources -import '@kitware/vtk.js/Filters/Sources/CircleSource.js'; -import '@kitware/vtk.js/Filters/Sources/ConcentricCylinderSource.js'; -import '@kitware/vtk.js/Filters/Sources/ConeSource.js'; -import '@kitware/vtk.js/Filters/Sources/CubeSource.js'; -import '@kitware/vtk.js/Filters/Sources/CylinderSource.js'; -import '@kitware/vtk.js/Filters/Sources/LineSource.js'; -import '@kitware/vtk.js/Filters/Sources/PlaneSource.js'; -import '@kitware/vtk.js/Filters/Sources/PointSource.js'; -import '@kitware/vtk.js/Filters/Sources/SphereSource.js'; - -// Filters -import '@kitware/vtk.js/Filters/Core/Cutter.js'; -import '@kitware/vtk.js/Filters/General/WarpScalar.js'; -import '@kitware/vtk.js/Filters/General/TubeFilter.js'; - -// Readers -import '@kitware/vtk.js/IO/Geometry/PLYReader.js'; -import '@kitware/vtk.js/IO/Geometry/STLReader.js'; -import '@kitware/vtk.js/IO/Misc/ElevationReader.js'; -import '@kitware/vtk.js/IO/Misc/OBJReader.js'; -// bring pdb definition (big) -import '@kitware/vtk.js/IO/Misc/PDBReader.js'; -// bring zip (big++) -import '@kitware/vtk.js/IO/XML/XMLImageDataReader.js'; -import '@kitware/vtk.js/IO/XML/XMLPolyDataReader.js'; diff --git a/src/core/Algorithm.js b/src/core/Algorithm.js deleted file mode 100644 index 0c27fd2..0000000 --- a/src/core/Algorithm.js +++ /dev/null @@ -1,140 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { RepresentationContext, DownstreamContext } from './View'; -import { smartEqualsShallow } from '../utils'; - -import vtk from '@kitware/vtk.js/vtk.js'; - -/** - * Algorithm is exposing a source or filter to a downstream filter - * It takes the following set of properties: - * - vtkClass: vtkClassName - * - state: {} - */ -export default class Algorithm extends Component { - constructor(props) { - super(props); - - // Create vtk.js algorithm - this.algo = null; - } - - render() { - return ( - - {(representation) => ( - - {(downstream) => { - this.representation = representation; - if (!this.algo) { - const { vtkClass, state } = this.props; - this.algo = vtk({ vtkClass, ...state }); - } - if (!this.downstream) { - downstream.setInputConnection( - this.algo.getOutputPort(), - this.props.port - ); - this.downstream = downstream; - } - return ( - -
- {this.props.children} -
-
- ); - }} -
- )} -
- ); - } - - componentDidMount() { - this.update(this.props); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.update(this.props, prevProps); - } - - componentWillUnmount() { - this.algo.delete(); - this.algo = null; - } - - update(props, previous) { - const { vtkClass, state } = props; - - if (vtkClass && (!previous || vtkClass !== previous.vtkClass)) { - if (!this.algo) { - this.algo = vtk({ vtkClass, ...state }); - } else if (this.algo.getClassName() !== vtkClass) { - const prevAlgo = this.algo; - this.algo = vtk({ vtkClass, ...state }); - const nbInputs = prevAlgo.getNumberOfInputPorts(); - for (let i = 0; i < nbInputs; i++) { - const connnection = prevAlgo.getInputConnection(i); - if (connnection) { - this.algo.setInputConnection(connnection, i); - } else { - this.algo.setInputData(prevAlgo.getInputData(i), i); - } - } - } - - this.downstream.setInputConnection( - this.algo.getOutputPort(), - this.props.port - ); - } - - if (state && (!previous || !smartEqualsShallow(state, previous.state))) { - this.algo.set(state); - if (this.representation) { - this.representation.dataChanged(); - } - } - - if (this.algo.getNumberOfInputPorts() === 0) { - if (this.representation) { - this.representation.dataAvailable(); - } - } - } -} - -Algorithm.defaultProps = { - port: 0, - vtkClass: 'vtkConeSource', - state: {}, -}; - -Algorithm.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * downstream connection port - */ - port: PropTypes.number, - - /** - * vtkClass name - */ - vtkClass: PropTypes.string, - - /** - * set of property values for vtkClass - */ - state: PropTypes.object, - - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/Calculator.js b/src/core/Calculator.js deleted file mode 100644 index 9789ae9..0000000 --- a/src/core/Calculator.js +++ /dev/null @@ -1,106 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { DownstreamContext } from './View'; - -import vtkCalculator from '@kitware/vtk.js/Filters/General/Calculator.js'; -import vtkDataSet from '@kitware/vtk.js/Common/DataModel/DataSet.js'; - -const { FieldDataTypes } = vtkDataSet; - -/** - * Calculator is exposing a source or filter to a downstream filter - * It takes the following set of properties: - * - name: 'scalars' // name of the generated field - * - location: 'POINT' // POINT/CELL - * - arrays: [] // Name of array to have access in formula - * - formula: fn - */ -export default class Calculator extends Component { - constructor(props) { - super(props); - - // Create vtk.js Calculator - this.calculator = vtkCalculator.newInstance(); - } - - render() { - const { name, arrays, location, formula } = this.props; - this.calculator.setFormulaSimple( - FieldDataTypes[location], - arrays, - name, - formula - ); - return ( - - {(downstream) => { - if (!this.downstream) { - downstream.setInputConnection( - this.calculator.getOutputPort(), - this.props.port - ); - this.downstream = downstream; - } - return ( - -
- {this.props.children} -
-
- ); - }} -
- ); - } - - componentWillUnmount() { - this.calculator.delete(); - this.calculator = null; - } -} - -Calculator.defaultProps = { - port: 0, - name: 'scalars', - location: 'POINT', - arrays: [], - formula: (xyz) => xyz[0], -}; - -Calculator.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * downstream connection port - */ - port: PropTypes.number, - - /** - * Field name - */ - name: PropTypes.string, - - /** - * Field location [POINT, CELL, COORDINATE, SCALARS, ] - */ - location: PropTypes.string, - - /** - * List of fields you want available for your formula - */ - arrays: PropTypes.arrayOf(PropTypes.string), - - /** - * Field formula - */ - formula: PropTypes.func, - - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/CellData.js b/src/core/CellData.js deleted file mode 100644 index 271bd80..0000000 --- a/src/core/CellData.js +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -import { DataSetContext, FieldsContext } from './View'; - -/** - * CellData is exposing a vtkCellData to a downstream element - */ -export default function CellData(props) { - return ( - - {(dataset) => ( - - {props.children} - - )} - - ); -} - -CellData.defaultProps = {}; - -CellData.propTypes = { - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/DataArray.js b/src/core/DataArray.js deleted file mode 100644 index 03a3a8f..0000000 --- a/src/core/DataArray.js +++ /dev/null @@ -1,151 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { toTypedArray } from '../utils'; - -import { DataSetContext, FieldsContext } from './View'; -import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray.js'; -import { TYPED_ARRAYS } from '@kitware/vtk.js/macros.js'; - -/** - * DataArray is creating a vtkDataArray for the container fields - * It takes the following set of properties: - * - type: 'Float32Array', 'Float64Array', 'Uint16Array', ... - * - values: [number, number, ...] - * - numberOfComponents: 1, - * - registration: 'addArray', 'setScalars', ... - */ -export default class DataArray extends Component { - constructor(props) { - super(props); - - // Create vtk.js data array - this.array = vtkDataArray.newInstance({ name: 'scalars', empty: true }); - this.arrayAttached = false; - } - - render() { - return ( - - {(dataset) => { - this.dataset = dataset; - return ( - - {(fields) => { - if (!this.fields) { - this.fields = fields; - } - return
; - }} - - ); - }} - - ); - } - - componentDidMount() { - this.update(this.props); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.update(this.props, prevProps); - } - - componentWillUnmount() { - this.fields.removeArray(this.array.getName()); - this.array.delete(); - this.array = null; - } - - update(props, previous) { - const { name, type, values, numberOfComponents, range } = props; - const klass = TYPED_ARRAYS[type]; - let changeDetected = false; - - // NoOp if same... - this.array.setName(name); - - if (type && (!previous || type !== previous.type)) { - changeDetected = true; - } - - if ( - numberOfComponents && - (!previous || numberOfComponents !== previous.numberOfComponents) - ) { - changeDetected = true; - } - - if (values && (changeDetected || !previous || values !== previous.values)) { - this.array.setData(toTypedArray(values, klass), numberOfComponents); - if (range) { - this.array.setRange(range, numberOfComponents); - } - changeDetected = true; - } - - if (!this.arrayAttached) { - this.fields[this.props.registration](this.array); - this.arrayAttached = true; - changeDetected = true; - } - - if (changeDetected) { - if (this.dataset) { - this.dataset.modified(); - } - } - } -} - -DataArray.defaultProps = { - name: 'scalars', - type: 'Float32Array', - values: [], - numberOfComponents: 1, - registration: 'addArray', -}; - -DataArray.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * Typed array name - */ - type: PropTypes.string, - - /** - * Field name - */ - name: PropTypes.string, - - /** - * Actual values to use inside our array ([] | TypedArray | { bvals, dtype, shape }) - */ - values: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.number), - PropTypes.object, - PropTypes.instanceOf(Float64Array), - PropTypes.instanceOf(Float32Array), - PropTypes.instanceOf(Int32Array), - PropTypes.instanceOf(Int16Array), - PropTypes.instanceOf(Int8Array), - PropTypes.instanceOf(Uint32Array), - PropTypes.instanceOf(Uint16Array), - PropTypes.instanceOf(Uint8Array), - ]), - - /** - * Number of components / Tuple size - */ - numberOfComponents: PropTypes.number, - - /** - * Name of the method to call on the fieldData (addArray, setScalars, setVectors...) - */ - registration: PropTypes.string, -}; diff --git a/src/core/Dataset.js b/src/core/Dataset.js deleted file mode 100644 index 6248ff1..0000000 --- a/src/core/Dataset.js +++ /dev/null @@ -1,115 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { - RepresentationContext, - DownstreamContext, - DataSetContext, -} from './View'; - -/** - * The Dataset component exposes any input data object to a downstream filter. - * It allows you to set the input data instance directly through props.data, - * or through the async/lazy loading mechanism using a callback function - * props.fetchData(). - * It takes the following set of properties: - * - data: directly sets the input data instance. - * - fetchData: callback function to fetch input data asynchronously. - */ -export default class Dataset extends Component { - componentDidMount() { - if (this.dataset && !this.dataset.isDeleted()) { - // data already available - this.dataAvailable(); - } else { - // update data from current props - const prevProps = { data: null, fetchData: null }; - this.update(this.props, prevProps); - } - } - - componentWillUnmount() {} - - render() { - return ( - - {(representation) => ( - - {(downstream) => { - this.representation = representation; - if (!this.downstream) { - this.downstream = downstream; - } - return ( - -
- {this.props.children} -
-
- ); - }} -
- )} -
- ); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.update(this.props, prevProps); - } - - update(props, previous) { - const { data, fetchData } = props; - if (data && data !== previous.data) { - // direct assignment of data object - this.dataset = data; - this.dataAvailable(); - } else if (fetchData && fetchData !== previous.fetchData) { - // async fetch data - fetchData().then((response) => { - if (response) { - this.dataset = response; - this.dataAvailable(); - } - }); - } - } - - dataAvailable() { - if (this.downstream && this.dataset) { - this.downstream.setInputData(this.dataset); - } - - if (this.representation) { - this.representation.dataAvailable(); - this.representation.dataChanged(); - } - } -} - -Dataset.defaultProps = { - data: null, - fetchData: null, -}; - -Dataset.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * Directly set the dataset object as a property value. - */ - data: PropTypes.object, - - /** - * Optional callback function for async loading of input data. - */ - fetchData: PropTypes.func, - - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/FieldData.js b/src/core/FieldData.js deleted file mode 100644 index 6a52b26..0000000 --- a/src/core/FieldData.js +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -import { DataSetContext, FieldsContext } from './View'; - -/** - * FieldData is exposing a FieldData to a downstream element - */ -export default function FieldData(props) { - return ( - - {(dataset) => ( - - {props.children} - - )} - - ); -} - -FieldData.defaultProps = {}; - -FieldData.propTypes = { - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/Geometry2DRepresentation.js b/src/core/Geometry2DRepresentation.js deleted file mode 100644 index d2e7857..0000000 --- a/src/core/Geometry2DRepresentation.js +++ /dev/null @@ -1,231 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { ViewContext, RepresentationContext, DownstreamContext } from './View'; -import { vec2Equals } from '../utils'; - -import vtkActor2D from '@kitware/vtk.js/Rendering/Core/Actor2D.js'; -import vtkMapper2D from '@kitware/vtk.js/Rendering/Core/Mapper2D.js'; -import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps.js'; -import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction.js'; -import vtkCoordinate from '@kitware/vtk.js/Rendering/Core/Coordinate.js'; -import { Coordinate } from '@kitware/vtk.js/Rendering/Core/Coordinate/Constants.js'; - -/** - * Geometry2DRepresentation is useful for rendering polydata in 2D screen space. - * It takes the following set of properties: - * - representation: ['POINTS', 'WIREFRAME', 'SURFACE'], - * - pointSize: 1, - * - color: [1,1,1], - * - opacity: 1, - */ -export default class Geometry2DRepresentation extends Component { - constructor(props) { - super(props); - - // Guard to prevent rendering if no data - this.validData = false; - this.currentVisibility = true; - - // Create vtk.js actor/mapper - this.actor = vtkActor2D.newInstance({ - visibility: false, - representationId: props.id, - }); - this.lookupTable = vtkColorTransferFunction.newInstance(); - this.transformCoordinate = vtkCoordinate.newInstance({ - coordinateSystem: - this.props.transformCoordinate?.coordinateSystem ?? Coordinate.DISPLAY, - }); - this.mapper = vtkMapper2D.newInstance({ - lookupTable: this.lookupTable, - useLookupTableScalarRange: false, - scalarVisibility: false, - transformCoordinate: this.transformCoordinate, - }); - this.actor.setMapper(this.mapper); - - this.subscriptions = []; - } - - render() { - return ( - - {(view) => { - if (!this.view) { - view.renderer.addActor2D(this.actor); - this.view = view; - } - return ( - - -
- {this.props.children} -
-
-
- ); - }} -
- ); - } - - componentDidMount() { - this.update(this.props); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.update(this.props, prevProps); - } - - componentWillUnmount() { - while (this.subscriptions.length) { - this.subscriptions.pop().unsubscribe(); - } - - if (this.view && this.view.renderer) { - this.view.renderer.removeActor(this.actor); - } - - this.actor.delete(); - this.actor = null; - - this.mapper.delete(); - this.mapper = null; - - this.lookupTable.delete(); - this.lookupTable = null; - - this.transformCoordinate.delete(); - this.transformCoordinate = null; - } - - update(props, previous) { - const { - actor, - mapper, - property, - colorMapPreset, - colorDataRange, - transformCoordinate, - } = props; - let changed = false; - - if (actor && (!previous || actor !== previous.actor)) { - changed = this.actor.set(actor) || changed; - } - if (mapper && (!previous || mapper !== previous.mapper)) { - changed = this.mapper.set(mapper) || changed; - } - if (property && (!previous || property !== previous.property)) { - changed = this.actor.getProperty().set(property) || changed; - } - - if ( - colorMapPreset && - this.lookupTable && - (!previous || colorMapPreset !== previous.colorMapPreset) - ) { - changed = true; - const preset = vtkColorMaps.getPresetByName(colorMapPreset); - this.lookupTable.applyColorMap(preset); - this.lookupTable.setMappingRange(...colorDataRange); - this.lookupTable.updateRange(); - } - - if ( - colorDataRange && - this.lookupTable && - (!previous || !vec2Equals(colorDataRange, previous.colorDataRange)) - ) { - changed = true; - this.lookupTable.setMappingRange(...colorDataRange); - this.lookupTable.updateRange(); - } - - if ( - transformCoordinate && - this.transformCoordinate && - (!previous || transformCoordinate !== previous.transformCoordinate) - ) { - changed = true; - this.transformCoordinate.set(transformCoordinate); - } - - // actor visibility - if (actor && actor.visibility !== undefined) { - this.currentVisibility = actor.visibility; - changed = - this.actor.setVisibility(this.currentVisibility && this.validData) || - changed; - } - - if (changed) { - // trigger render - this.dataChanged(); - } - } - - dataAvailable() { - if (!this.validData) { - this.validData = true; - this.actor.setVisibility(this.currentVisibility); - - // trigger render - this.dataChanged(); - } - } - - dataChanged() { - if (this.view) { - this.view.renderView(); - } - } -} - -Geometry2DRepresentation.defaultProps = { - colorMapPreset: 'erdc_rainbow_bright', - colorDataRange: [0, 1], -}; - -Geometry2DRepresentation.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * Properties to set to the actor - */ - actor: PropTypes.object, - - /** - * Properties to set to the actor - */ - mapper: PropTypes.object, - - /** - * Properties to set to the actor.property - */ - property: PropTypes.object, - - /** - * Preset name for the lookup table color map - */ - colorMapPreset: PropTypes.string, - - /** - * Data range use for the colorMap - */ - colorDataRange: PropTypes.arrayOf(PropTypes.number), - - /** - * Coordinate system that the input dataset is in. - */ - transformCoordinate: PropTypes.object, - - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/GeometryRepresentation.js b/src/core/GeometryRepresentation.js deleted file mode 100644 index 6069118..0000000 --- a/src/core/GeometryRepresentation.js +++ /dev/null @@ -1,338 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { ViewContext, RepresentationContext, DownstreamContext } from './View'; -import { vec2Equals } from '../utils'; - -import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor.js'; -import vtkMapper from '@kitware/vtk.js/Rendering/Core/Mapper.js'; -import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps.js'; -import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction.js'; - -import vtkCubeAxesActor from '@kitware/vtk.js/Rendering/Core/CubeAxesActor.js'; -import vtkScalarBarActor from '@kitware/vtk.js/Rendering/Core/ScalarBarActor.js'; - -/** - * GeometryRepresentation is responsible to convert a vtkPolyData into rendering - * It takes the following set of properties: - * - colorBy: ['POINTS', ''], - * - pointSize: 1, - * - color: [1,1,1], - */ -export default class GeometryRepresentation extends Component { - constructor(props) { - super(props); - - // Guard to prevent rendering if no data - this.validData = false; - this.currentVisibility = true; - - // Create vtk.js actor/mapper - this.actor = vtkActor.newInstance({ - visibility: false, - representationId: props.id, - }); - this.lookupTable = vtkColorTransferFunction.newInstance(); - this.mapper = vtkMapper.newInstance({ - lookupTable: this.lookupTable, - useLookupTableScalarRange: true, - }); - this.actor.setMapper(this.mapper); - - // Scalar Bar - this.scalarBar = vtkScalarBarActor.newInstance(); - this.scalarBar.setScalarsToColors(this.lookupTable); - this.scalarBar.setVisibility(false); - - this.subscriptions = []; - - if (props.showCubeAxes) { - this.initCubeAxes(); - } - } - - initCubeAxes() { - this.cubeAxes = vtkCubeAxesActor.newInstance({ - visibility: false, - dataBounds: [-1, 1, -1, 1, -1, 1], - }); - this.cubeAxes - .getActors() - .forEach(({ setVisibility }) => setVisibility(false)); - - const updateCubeAxes = () => { - if (this.mapper.getInputData()) { - if (this.subscriptions.length === 1) { - // add input data as well - this.subscriptions.push( - this.mapper.getInputData().onModified(updateCubeAxes) - ); - } - - const bounds = this.mapper.getInputData().getBounds(); - if (bounds[0] < bounds[1]) { - if (this.cubeAxes) { - this.cubeAxes.setDataBounds(bounds); - } - if (this.view) { - this.view.renderView(); - } - } - } - }; - - this.subscriptions.push(this.mapper.onModified(updateCubeAxes)); - } - - render() { - return ( - - {(view) => { - if (!this.view) { - if (this.cubeAxes) { - this.cubeAxes.setCamera(view.renderer.getActiveCamera()); - view.renderer.addActor(this.cubeAxes); - } - - view.renderer.addActor(this.scalarBar); - view.renderer.addActor(this.actor); - this.view = view; - } - return ( - - -
- {this.props.children} -
-
-
- ); - }} -
- ); - } - - componentDidMount() { - this.update(this.props); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.update(this.props, prevProps); - } - - componentWillUnmount() { - while (this.subscriptions.length) { - this.subscriptions.pop().unsubscribe(); - } - - if (this.view && this.view.renderer) { - this.view.renderer.removeActor(this.scalarBar); - this.view.renderer.removeActor(this.cubeAxes); - this.view.renderer.removeActor(this.actor); - } - - this.scalarBar.delete(); - this.scalarBar = null; - - if (this.cubeAxes) { - this.cubeAxes.delete(); - this.cubeAxes = null; - } - - this.actor.delete(); - this.actor = null; - - this.mapper.delete(); - this.mapper = null; - - this.lookupTable.delete(); - this.lookupTable = null; - } - - update(props, previous) { - const { - cubeAxesStyle, - showCubeAxes, - actor, - mapper, - property, - colorMapPreset, - colorDataRange, - } = props; - let changed = false; - - if (actor && (!previous || actor !== previous.actor)) { - changed = this.actor.set(actor) || changed; - } - if (mapper && (!previous || mapper !== previous.mapper)) { - changed = this.mapper.set(mapper) || changed; - } - if (property && (!previous || property !== previous.property)) { - changed = this.actor.getProperty().set(property) || changed; - } - - if ( - colorMapPreset && - (!previous || colorMapPreset !== previous.colorMapPreset) - ) { - changed = true; - const preset = vtkColorMaps.getPresetByName(colorMapPreset); - this.lookupTable.applyColorMap(preset); - this.lookupTable.setMappingRange(...colorDataRange); - this.lookupTable.updateRange(); - } - - if ( - colorDataRange && - (!previous || !vec2Equals(colorDataRange, previous.colorDataRange)) - ) { - changed = true; - this.lookupTable.setMappingRange(...colorDataRange); - this.lookupTable.updateRange(); - } - - if (showCubeAxes) { - if (this.cubeAxes == null) { - changed = true; - this.initCubeAxes(); - } - - if ( - cubeAxesStyle && - (!previous || cubeAxesStyle !== previous.cubeAxesStyle) - ) { - changed = true; - this.cubeAxes.set(cubeAxesStyle); - } - } - - if ( - this.cubeAxes != null && - showCubeAxes !== this.cubeAxes.getVisibility() - ) { - changed = true; - this.cubeAxes.setVisibility(showCubeAxes && this.validData); - this.cubeAxes - .getActors() - .forEach(({ setVisibility }) => - setVisibility(showCubeAxes && this.validData) - ); - } - - // scalar bars - changed = - this.scalarBar.setVisibility(props.showScalarBar && this.validData) || - changed; - changed = this.scalarBar.setAxisLabel(props.scalarBarTitle) || changed; - changed = this.scalarBar.set(props.scalarBarStyle || {}) || changed; - - // actor visibility - if (actor && actor.visibility !== undefined) { - this.currentVisibility = actor.visibility; - changed = - this.actor.setVisibility(this.currentVisibility && this.validData) || - changed; - } - - if (changed) { - // trigger render - this.dataChanged(); - } - } - - dataAvailable() { - if (!this.validData) { - this.validData = true; - this.actor.setVisibility(this.currentVisibility); - this.scalarBar.setVisibility(this.props.showScalarBar); - if (this.cubeAxes) { - this.cubeAxes.setVisibility(this.props.showCubeAxes); - this.cubeAxes - .getActors() - .forEach(({ setVisibility }) => - setVisibility(this.props.showCubeAxes) - ); - } - // trigger render - this.dataChanged(); - } - } - - dataChanged() { - if (this.view) { - this.view.renderView(); - } - } -} - -GeometryRepresentation.defaultProps = { - colorMapPreset: 'erdc_rainbow_bright', - colorDataRange: [0, 1], - showCubeAxes: false, - showScalarBar: false, - scalarBarTitle: '', -}; - -GeometryRepresentation.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * Properties to set to the actor - */ - actor: PropTypes.object, - - /** - * Properties to set to the actor - */ - mapper: PropTypes.object, - - /** - * Properties to set to the actor.property - */ - property: PropTypes.object, - - /** - * Preset name for the lookup table color map - */ - colorMapPreset: PropTypes.string, - - /** - * Data range use for the colorMap - */ - colorDataRange: PropTypes.arrayOf(PropTypes.number), - - /** - * Show/Hide Cube Axes for the given representation - */ - showCubeAxes: PropTypes.bool, - - /** - * Configure cube Axes style by overriding the set of properties defined - * https://github.com/Kitware/vtk-js/blob/HEAD/Sources/Rendering/Core/CubeAxesActor/index.js#L703-L719 - */ - cubeAxesStyle: PropTypes.object, - - /** - * Show hide scalar bar for that representation - */ - showScalarBar: PropTypes.bool, - - /** - * Use given string as title for scalar bar. By default it is empty (no title). - */ - scalarBarTitle: PropTypes.string, - - /** - * Configure scalar bar style by overriding the set of properties defined - * https://github.com/Kitware/vtk-js/blob/master/Sources/Rendering/Core/ScalarBarActor/index.js#L776-L796 - */ - scalarBarStyle: PropTypes.object, - - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/GlyphRepresentation.js b/src/core/GlyphRepresentation.js deleted file mode 100644 index 3ea6985..0000000 --- a/src/core/GlyphRepresentation.js +++ /dev/null @@ -1,190 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { ViewContext, RepresentationContext, DownstreamContext } from './View'; -import { smartEqualsShallow } from '../utils'; - -import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor.js'; -import vtkGlyph3DMapper from '@kitware/vtk.js/Rendering/Core/Glyph3DMapper.js'; -import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps.js'; -import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction.js'; - -/** - * GlyphRepresentation using a source on port=1 as Glyph and the points of the source on port=0 to position the given glyphs - * It takes the following set of properties: - * - actor: Properties to assign to the vtkActor - * - mapper: Properties to assign to the vtkGlyph3DMapper - * - property: Properties to assign to the vtkProperty (actor.getProperty()) - * - colorMapPreset: Name of the preset to use for controlling the color mapping - * - colorDataRange: Range to use for the color scale - */ -export default class GeometryRepresentation extends Component { - constructor(props) { - super(props); - - // Guard to prevent rendering if no data - this.validData = false; - this.currentVisibility = true; - - // Create vtk.js actor/mapper - this.actor = vtkActor.newInstance({ visibility: false }); - this.lookupTable = vtkColorTransferFunction.newInstance(); - this.mapper = vtkGlyph3DMapper.newInstance({ - lookupTable: this.lookupTable, - useLookupTableScalarRange: true, - }); - this.actor.setMapper(this.mapper); - } - - render() { - return ( - - {(view) => { - if (!this.view) { - view.renderer.addActor(this.actor); - this.view = view; - } - return ( - - -
- {this.props.children} -
-
-
- ); - }} -
- ); - } - - componentDidMount() { - this.update(this.props); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.update(this.props, prevProps); - } - - componentWillUnmount() { - if (this.view && this.view.renderer) { - this.view.renderer.removeActor(this.actor); - } - - this.actor.delete(); - this.actor = null; - - this.mapper.delete(); - this.mapper = null; - - this.lookupTable.delete(); - this.lookupTable = null; - } - - update(props, previous) { - const { actor, mapper, property, colorMapPreset, colorDataRange } = props; - let changed = false; - - if (actor && (!previous || actor !== previous.actor)) { - changed = this.actor.set(actor) || changed; - } - if (mapper && (!previous || mapper !== previous.mapper)) { - changed = this.mapper.set(mapper) || changed; - } - if (property && (!previous || property !== previous.property)) { - changed = this.actor.getProperty().set(property) || changed; - } - - if ( - colorMapPreset && - (!previous || colorMapPreset !== previous.colorMapPreset) - ) { - changed = true; - const preset = vtkColorMaps.getPresetByName(colorMapPreset); - this.lookupTable.applyColorMap(preset); - this.lookupTable.setMappingRange(...colorDataRange); - this.lookupTable.updateRange(); - } - - if ( - colorDataRange && - (!previous || - !smartEqualsShallow(colorDataRange, previous.colorDataRange)) - ) { - changed = true; - this.lookupTable.setMappingRange(...colorDataRange); - this.lookupTable.updateRange(); - } - - // actor visibility - if (actor && actor.visibility !== undefined) { - this.currentVisibility = actor.visibility; - changed = - this.actor.setVisibility(this.currentVisibility && this.validData) || - changed; - } - - // trigger render - if (changed) { - this.dataChanged(); - } - } - - dataAvailable() { - if (!this.validData) { - this.validData = true; - this.actor.setVisibility(this.currentVisibility); - - // trigger render - this.dataChanged(); - } - } - - dataChanged() { - if (this.view) { - this.view.renderView(); - } - } -} - -GeometryRepresentation.defaultProps = { - colorMapPreset: 'erdc_rainbow_bright', - colorDataRange: [0, 1], -}; - -GeometryRepresentation.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * Properties to set to the actor - */ - actor: PropTypes.object, - - /** - * Properties to set to the vtkGlyph3DMapper - */ - mapper: PropTypes.object, - - /** - * Properties to set to the actor.property - */ - property: PropTypes.object, - - /** - * Preset name for the lookup table color map - */ - colorMapPreset: PropTypes.string, - - /** - * Data range use for the colorMap - */ - colorDataRange: PropTypes.arrayOf(PropTypes.number), - - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/ImageData.js b/src/core/ImageData.js deleted file mode 100644 index 485793d..0000000 --- a/src/core/ImageData.js +++ /dev/null @@ -1,133 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { - RepresentationContext, - DownstreamContext, - DataSetContext, -} from './View'; - -import vtkImageData from '@kitware/vtk.js/Common/DataModel/ImageData.js'; - -/** - * ImageData is exposing a vtkImageData to a downstream filter - * It takes the following set of properties: - * - dimensions: [nx, ny, nz], - * - origin: [0, 0, 0] - * - spacing: [1, 1, 1] - * - direction: [ - * 1, 0, 0, - * 0, 1, 0, - * 0, 0, 1 - * ] - */ -export default class ImageData extends Component { - constructor(props) { - super(props); - - // Create vtk.js ImageData - this.imageData = vtkImageData.newInstance(); - } - - render() { - return ( - - {(representation) => ( - - {(downstream) => { - this.representation = representation; - if (!this.downstream) { - this.downstream = downstream; - } - return ( - -
- {this.props.children} -
-
- ); - }} -
- )} -
- ); - } - - componentDidMount() { - this.update(this.props); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.update(this.props, prevProps); - } - - componentWillUnmount() { - this.imageData.delete(); - this.imageData = null; - } - - update(props, previous) { - const { dimensions, spacing, origin, direction } = props; - this.imageData.set({ dimensions, spacing, origin, direction }); - } - - getDataSet() { - return this.imageData; - } - - modified() { - this.imageData.modified(); - - // Let the representation know that we have data - if (this.representation && this.imageData.getPointData().getScalars()) { - this.downstream.setInputData(this.imageData, this.props.port); - this.representation.dataAvailable(); - this.representation.dataChanged(); - } - } -} - -ImageData.defaultProps = { - port: 0, - dimensions: [1, 1, 1], - spacing: [1, 1, 1], - origin: [0, 0, 0], - direction: [1, 0, 0, 0, 1, 0, 0, 0, 1], -}; - -ImageData.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * downstream connection port - */ - port: PropTypes.number, - - /** - * Number of points along x, y, z - */ - dimensions: PropTypes.arrayOf(PropTypes.number), - - /** - * Spacing along x, y, z between points in world coordinates - */ - spacing: PropTypes.arrayOf(PropTypes.number), - - /** - * World coordinate of the lower left corner of your vtkImageData (i=0, j=0, k=0). - */ - origin: PropTypes.arrayOf(PropTypes.number), - - /** - * 3x3 matrix use to orient the image data - */ - direction: PropTypes.arrayOf(PropTypes.number), - - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/MultiViewRoot.js b/src/core/MultiViewRoot.js deleted file mode 100644 index 276b57e..0000000 --- a/src/core/MultiViewRoot.js +++ /dev/null @@ -1,224 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; - -import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow'; -import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; -import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; - -// ---------------------------------------------------------------------------- -// Context to pass parent variables to children -// ---------------------------------------------------------------------------- - -export const MultiViewRootContext = React.createContext(null); - -export function removeKeys(props, propNames) { - const cleanedProps = { ...props }; - propNames.forEach((name) => { - delete cleanedProps[name]; - }); - return cleanedProps; -} - -// ---------------------------------------------------------------------------- -// Helper constants -// ---------------------------------------------------------------------------- - -const RENDERER_STYLE = { - position: 'absolute', - top: 0, - left: 0, - right: 0, - bottom: 0, - pointerEvents: 'none', -}; - -export default class MultiViewRoot extends Component { - constructor(props) { - super(props); - this.containerRef = React.createRef(); - this.containerToRenderer = new Map(); - - // Create vtk.js view - this.renderWindow = vtkRenderWindow.newInstance(); - this.interactor = null; - - this.renderWindowView = vtkOpenGLRenderWindow.newInstance(); - this.renderWindow.addView(this.renderWindowView); - - this.resizeObserver = new ResizeObserver((entries) => { - this.onResize(entries); - }); - - this.interactor = vtkRenderWindowInteractor.newInstance(); - this.interactor.setView(this.renderWindowView); - - this.onResize = this.onResize.bind(this); - - this.initialized = false; - } - - componentDidMount() { - // TODO support runtime toggling of this flag? - if (!this.props.disabled) { - const container = this.containerRef.current; - this.renderWindowView.setContainer(container); - - this.interactor.initialize(); - - this.resizeObserver.observe(container); - this.resizeRootContainer(); - - this.initialized = true; - - this.update(this.props); - } - } - - componentDidUpdate(prevProps) { - this.update(this.props, prevProps); - } - - componentWillUnmount() { - if (this.initialized) { - // Stop size listening - this.resizeObserver.disconnect(); - - if (this.interactor.getContainer()) { - this.interactor.unbindEvents(); - } - - this.renderWindowView.setContainer(null); - } - - this.renderWindow.removeView(this.renderWindowView); - - this.interactor.delete(); - this.renderWindow.delete(); - this.renderWindowView.delete(); - - this.interactor = null; - this.renderWindow = null; - this.renderWindowView = null; - } - - render() { - const { id, children, style, disabled } = this.props; - - return ( -
-
- - {children} - -
- ); - } - - bindInteractorEvents(container) { - if (this.interactor) { - if (this.interactor.getContainer()) { - this.interactor.unbindEvents(); - } - if (container) { - this.interactor.bindEvents(container); - } - } - } - - observeRendererResize(container, renderer) { - if (!this.containerToRenderer.has(container)) { - this.containerToRenderer.set(container, renderer); - this.resizeObserver.observe(container); - } - } - - unobserveRendererResize(container) { - this.containerToRenderer.delete(container); - this.resizeObserver.unobserve(container); - } - - resizeRootContainer() { - const rootContainer = this.containerRef.current; - // resize the render window - if (rootContainer) { - const devicePixelRatio = window.devicePixelRatio || 1; - const { width, height } = rootContainer.getBoundingClientRect(); - const w = Math.floor(width * devicePixelRatio); - const h = Math.floor(height * devicePixelRatio); - this.renderWindowView.setSize(Math.max(w, 10), Math.max(h, 10)); - } - } - - onResize(entries) { - entries.forEach((entry) => { - const rootContainer = this.containerRef.current; - if (entry.target === rootContainer) { - this.resizeRootContainer(); - } else if (this.containerToRenderer.has(entry.target)) { - // update that renderer's viewport - const renderer = this.containerToRenderer.get(entry.target); - const containerBox = entry.target.getBoundingClientRect(); - const canvasBox = this.renderWindowView - .getCanvas() - .getBoundingClientRect(); - - // relative to canvas - const top = containerBox.top - canvasBox.top; - const left = containerBox.left - canvasBox.left; - - const xmin = left / canvasBox.width; - const xmax = (left + containerBox.width) / canvasBox.width; - const ymin = 1 - (top + containerBox.height) / canvasBox.height; - const ymax = 1 - top / canvasBox.height; - - renderer.setViewport(xmin, ymin, xmax, ymax); - } - }); - this.renderWindow.render(); - } - - update(props, previous) { - const { triggerRender } = props; - // Allow to trigger method call from property change - if (previous && triggerRender !== previous.triggerRender) { - this.renderViewTimeout = setTimeout(this.renderWindow.render, 0); - } - } -} - -MultiViewRoot.defaultProps = { - triggerRender: 0, - disabled: false, -}; - -export const propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * Property use to trigger a render when changing. - */ - triggerRender: PropTypes.number, - - /** - * Disables or enables the multi-renderer root. - */ - disabled: PropTypes.bool, - - /** - * List of representation to show - */ - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; - -MultiViewRoot.propTypes = propTypes; diff --git a/src/core/PointData.js b/src/core/PointData.js deleted file mode 100644 index a3c4d80..0000000 --- a/src/core/PointData.js +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -import { DataSetContext, FieldsContext } from './View'; - -/** - * PointData is exposing a vtkPointData to a downstream element - */ -export default function PointData(props) { - return ( - - {(dataset) => ( - - {props.children} - - )} - - ); -} - -PointData.defaultProps = {}; - -PointData.propTypes = { - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/PolyData.js b/src/core/PolyData.js deleted file mode 100644 index aa02bc3..0000000 --- a/src/core/PolyData.js +++ /dev/null @@ -1,256 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { toTypedArray, smartEqualsShallow } from '../utils'; - -import { - RepresentationContext, - DownstreamContext, - DataSetContext, -} from './View'; - -import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData.js'; - -/** - * PolyData is exposing a vtkPolyData to a downstream filter - * It takes the following set of properties: - * - points: [x, y, z, x, y, z, ...], - * - verts: [cellSize, pointId0, pointId1, ..., cellSize, pointId0, ...] - * - lines: [cellSize, pointId0, pointId1, ..., cellSize, pointId0, ...] - * - polys: [cellSize, pointId0, pointId1, ..., cellSize, pointId0, ...] - * - strips: [cellSize, pointId0, pointId1, ..., cellSize, pointId0, ...] - * Cell connectivity helper property: - * - connectivity: 'manual', // [manual, points, triangles, strips] - */ -export default class PolyData extends Component { - constructor(props) { - super(props); - - // Create vtk.js polydata - this.polydata = vtkPolyData.newInstance(); - } - - render() { - return ( - - {(representation) => ( - - {(downstream) => { - this.representation = representation; - if (!this.downstream) { - this.downstream = downstream; - } - return ( - -
- {this.props.children} -
-
- ); - }} -
- )} -
- ); - } - - componentDidMount() { - this.update(this.props); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.update(this.props, prevProps); - } - - componentWillUnmount() { - this.polydata.delete(); - this.polydata = null; - } - - update(props, previous) { - const { connectivity, points, verts, lines, polys, strips } = props; - let changeDetected = false; - let typedArray = Uint32Array; - - if (points && (!previous || !smartEqualsShallow(points, previous.points))) { - const array = toTypedArray(points, Float64Array); - this.polydata.getPoints().setData(array, 3); - changeDetected = true; - - // Adapt cell size - // Max cell size for uint16 is 655356*3=196608. - // switch to uint32array if this is the case. - typedArray = array.length > 196608 ? Uint32Array : Uint16Array; - } - - if (verts && (!previous || !smartEqualsShallow(verts, previous.verts))) { - this.polydata.getVerts().setData(toTypedArray(verts, typedArray)); - changeDetected = true; - } - - if (lines && (!previous || !smartEqualsShallow(lines, previous.lines))) { - this.polydata.getLines().setData(toTypedArray(lines, typedArray)); - changeDetected = true; - } - - if (polys && (!previous || !smartEqualsShallow(polys, previous.polys))) { - this.polydata.getPolys().setData(toTypedArray(polys, typedArray)); - changeDetected = true; - } - - if (strips && (!previous || !smartEqualsShallow(strips, previous.strips))) { - this.polydata.getStrips().setData(toTypedArray(strips, typedArray)); - changeDetected = true; - } - - if ( - connectivity && - (!previous || - points?.length !== previous.points?.length || - connectivity !== previous.connectivity) - ) { - const nbPoints = points.length / 3; - switch (connectivity) { - case 'points': - { - const values = new Uint32Array(nbPoints + 1); - values[0] = nbPoints; - for (let i = 0; i < nbPoints; i++) { - values[i + 1] = i; - } - this.polydata.getVerts().setData(values); - changeDetected = true; - } - break; - case 'triangles': - { - const values = new Uint32Array(nbPoints + nbPoints / 3); - let offset = 0; - for (let i = 0; i < nbPoints; i += 3) { - values[offset++] = 3; - values[offset++] = i + 0; - values[offset++] = i + 1; - values[offset++] = i + 2; - } - this.polydata.getPolys().setData(values); - changeDetected = true; - } - break; - case 'strips': - { - const values = new Uint32Array(nbPoints + 1); - values[0] = nbPoints; - for (let i = 0; i < nbPoints; i++) { - values[i + 1] = i; - } - this.polydata.getStrips().setData(values); - changeDetected = true; - } - break; - default: - // do nothing for manual or anything else... - } - } - - if (changeDetected) { - this.modified(); - } - } - - getDataSet() { - return this.polydata; - } - - modified() { - this.polydata.modified(); - this.downstream.setInputData(this.polydata, this.props.port); - - // Let the representation know that we have data - if (this.representation && this.polydata.getPoints().getData().length) { - this.representation.dataAvailable(); - this.representation.dataChanged(); - } - } -} - -PolyData.defaultProps = { - port: 0, - points: [], - connectivity: 'manual', -}; - -PolyData.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * downstream connection port - */ - port: PropTypes.number, - - /** - * xyz coordinates ([] | TypedArray | { bvals, dtype, shape }) - */ - points: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.number), - PropTypes.object, - PropTypes.instanceOf(Float64Array), - PropTypes.instanceOf(Float32Array), - ]), - - /** - * verts cells - */ - verts: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.number), - PropTypes.object, - PropTypes.instanceOf(Uint8Array), - PropTypes.instanceOf(Uint16Array), - PropTypes.instanceOf(Uint32Array), - ]), - - /** - * lines cells - */ - lines: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.number), - PropTypes.object, - PropTypes.instanceOf(Uint8Array), - PropTypes.instanceOf(Uint16Array), - PropTypes.instanceOf(Uint32Array), - ]), - - /** - * polys cells - */ - polys: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.number), - PropTypes.object, - PropTypes.instanceOf(Uint8Array), - PropTypes.instanceOf(Uint16Array), - PropTypes.instanceOf(Uint32Array), - ]), - - /** - * strips cells - */ - strips: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.number), - PropTypes.object, - PropTypes.instanceOf(Uint8Array), - PropTypes.instanceOf(Uint16Array), - PropTypes.instanceOf(Uint32Array), - ]), - - /** - * Type of connectivity `manual` or implicit such as `points`, `triangles`, `strips` - */ - connectivity: PropTypes.string, - - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/Reader.js b/src/core/Reader.js deleted file mode 100644 index 3fc8f82..0000000 --- a/src/core/Reader.js +++ /dev/null @@ -1,200 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { ViewContext, RepresentationContext, DownstreamContext } from './View'; - -import vtk from '@kitware/vtk.js/vtk.js'; -import Base64 from '@kitware/vtk.js/Common/Core/Base64.js'; - -/** - * Reader is exposing a reader to a downstream filter - * It takes the following set of properties: - * - vtkClass: vtk.js reader class name - * - url: string - * - parseAsText: string - * - parseAsArrayBuffer: base64String - */ -export default class Reader extends Component { - constructor(props) { - super(props); - - // Create vtk.js algorithm - this.reader = null; - } - - render() { - return ( - - {(view) => ( - - {(representation) => { - this.representation = representation; - return ( - - {(downstream) => { - if (!this.reader) { - this.reader = this.createReader(this.props); - } - if (!this.downstream) { - downstream.setInputConnection( - this.reader.getOutputPort(), - this.props.port - ); - this.downstream = downstream; - } - this.view = view; - return ( - -
- {this.props.children} -
-
- ); - }} -
- ); - }} -
- )} -
- ); - } - - componentDidMount() { - this.update(this.props); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.update(this.props, prevProps); - } - - componentWillUnmount() { - this.reader.delete(); - this.reader = null; - } - - createReader(props) { - const { vtkClass, options } = props; - return vtk({ - vtkClass, - progressCallback: options.progressCallback, - }); - } - - update(props, previous) { - const { vtkClass, url, parseAsText, parseAsArrayBuffer, options } = props; - - if (vtkClass && (!previous || vtkClass !== previous.vtkClass)) { - this.reader = this.createReader(props); - this.downstream.setInputConnection( - this.reader.getOutputPort(), - this.props.port - ); - } - - if (url && (!previous || url !== previous.url)) { - this.reader.setUrl(url, options).then(() => { - if (!this.reader) { - return; - } - if (this.representation) { - this.representation.dataAvailable(); - } - if (this.view) { - if (this.props.resetCameraOnUpdate) { - this.view.resetCamera(); - } - if (this.props.renderOnUpdate) { - this.view.renderView(); - } - } - }); - } - - if (parseAsText && (!previous || parseAsText !== previous.parseAsText)) { - this.reader.parseAsText(parseAsText); - if (this.representation) { - this.representation.dataAvailable(); - } - } - - if ( - parseAsArrayBuffer && - (!previous || parseAsArrayBuffer !== previous.parseAsArrayBuffer) - ) { - this.reader.parseAsArrayBuffer(Base64.toArrayBuffer(parseAsArrayBuffer)); - if (this.representation) { - this.representation.dataAvailable(); - } - } - - if (this.view) { - if (this.props.resetCameraOnUpdate) { - this.view.resetCamera(); - } - if (this.props.renderOnUpdate) { - this.view.renderView(); - } - } - } -} - -Reader.defaultProps = { - port: 0, - vtkClass: '', - renderOnUpdate: true, - resetCameraOnUpdate: true, - options: { binary: true }, -}; - -Reader.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * downstream connection port - */ - port: PropTypes.number, - - /** - * vtkClass name - */ - vtkClass: PropTypes.string, - - /** - * set of url to fetch data from - */ - url: PropTypes.string, - - /** - * set text data to process - */ - parseAsText: PropTypes.string, - - /** - * set binary data to process from base64 string - */ - parseAsArrayBuffer: PropTypes.string, - - /** - * Automatically render on data loaded - */ - renderOnUpdate: PropTypes.bool, - - /** - * Automatically reset camera on data loaded - */ - resetCameraOnUpdate: PropTypes.bool, - - /** - * Reader options - */ - options: PropTypes.object, - - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/ShareDataSet.js b/src/core/ShareDataSet.js deleted file mode 100644 index 4ec9ff7..0000000 --- a/src/core/ShareDataSet.js +++ /dev/null @@ -1,151 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import macro from '@kitware/vtk.js/macros.js'; - -import { RepresentationContext, DownstreamContext } from './View'; - -function vtkTrivialProducer(publicAPI, model) { - // Set our className - model.classHierarchy.push('vtkTrivialProducer'); - - publicAPI.requestData = (inputs, outputs) => { - outputs.length = inputs.length; - for (let i = 0; i < inputs.length; i++) { - outputs[i] = inputs[i]; - } - }; -} - -function extend(publicAPI, model, initialValues = {}) { - Object.assign(model, initialValues); - - // Inheritance - macro.obj(publicAPI, model); - macro.algo(publicAPI, model, 1, 1); - macro.event(publicAPI, model, 'DataAvailable'); - vtkTrivialProducer(publicAPI, model); -} - -// ---------------------------------------------------------------------------- - -const newInstance = macro.newInstance(extend, 'vtkTrivialProducer'); - -const SHARED_INSTANCES = {}; - -/** - - */ -export default class ShareDataSet extends Component { - getTrivialProducer() { - let trivialProducer = SHARED_INSTANCES[this.props.name]; - if (!trivialProducer) { - trivialProducer = newInstance(); - SHARED_INSTANCES[this.props.name] = trivialProducer; - } - return trivialProducer; - } - - componentDidMount() { - const dataset = this.getTrivialProducer().getOutputData(); - if (dataset && !dataset.isDeleted()) { - this.dataAvailable(); - } - } - - componentWillUnmount() { - if (this.subscription) { - this.subscription.unsubscribe(); - this.subscription = null; - } - } - - render() { - this.update(); - return ( - - {(representation) => ( - - {(downstream) => { - this.representation = representation; - if (!this.downstream) { - this.downstream = downstream; - } - return ( - - -
- {this.props.children} -
-
-
- ); - }} -
- )} -
- ); - } - - update() { - if (this.subscription) { - this.subscription.unsubscribe(); - this.subscription = null; - } - - this.subscription = this.getTrivialProducer().onDataAvailable(() => { - this.dataAvailable(); - }); - } - - dataAvailable() { - if (this.downstream) { - this.downstream.setInputConnection( - this.getTrivialProducer().getOutputPort(), - this.props.port - ); - } - - if (!this.validData) { - this.validData = true; - this.getTrivialProducer().invokeDataAvailable(); - } - - if (this.representation) { - this.representation.dataAvailable(); - } - } - - dataChanged() { - if (this.representation) { - this.representation.dataChanged(); - } - } -} - -ShareDataSet.defaultProps = { - port: 0, - name: 'shared', -}; - -ShareDataSet.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * downstream connection port - */ - port: PropTypes.number, - - /** - * Unique dataset name to cross reference - */ - name: PropTypes.string, - - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/SliceRepresentation.js b/src/core/SliceRepresentation.js deleted file mode 100644 index e450481..0000000 --- a/src/core/SliceRepresentation.js +++ /dev/null @@ -1,316 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { ViewContext, RepresentationContext, DownstreamContext } from './View'; -import { smartEqualsShallow } from '../utils'; - -import vtkImageSlice from '@kitware/vtk.js/Rendering/Core/ImageSlice.js'; -import vtkImageMapper from '@kitware/vtk.js/Rendering/Core/ImageMapper.js'; -import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps.js'; -import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction.js'; -import vtkPiecewiseFunction from '@kitware/vtk.js/Common/DataModel/PiecewiseFunction.js'; - -/** - * SliceRepresentation is responsible to convert a vtkPolyData into rendering - * It takes the following set of properties: - * - colorBy: ['POINTS', ''], - * - pointSize: 1, - * - color: [1,1,1], - */ -export default class SliceRepresentation extends Component { - constructor(props) { - super(props); - - // Guard to prevent rendering if no data - this.validData = false; - this.currentVisibility = true; - - // Create vtk.js objects - this.lookupTable = vtkColorTransferFunction.newInstance(); - const preset = vtkColorMaps.getPresetByName( - this.props.colorMapPreset ?? 'Grayscale' - ); - this.lookupTable.applyColorMap(preset); - this.piecewiseFunction = vtkPiecewiseFunction.newInstance(); - this.actor = vtkImageSlice.newInstance({ visibility: false }); - // use the mapper instance if provided, otherwise create default instance. - this.mapper = props.mapperInstance ?? vtkImageMapper.newInstance(); - this.actor.setMapper(this.mapper); - this.actor.getProperty().setRGBTransferFunction(0, this.lookupTable); - // this.actor.getProperty().setScalarOpacity(0, this.piecewiseFunction); - this.actor.getProperty().setInterpolationTypeToLinear(); - } - - render() { - return ( - - {(view) => { - if (!this.view) { - view.renderer.addActor(this.actor); - this.view = view; - } - return ( - - -
- {this.props.children} -
-
-
- ); - }} -
- ); - } - - componentDidMount() { - this.update(this.props); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.update(this.props, prevProps); - } - - componentWillUnmount() { - if (this.view && this.view.renderer) { - this.view.renderer.removeActor(this.actor); - } - - this.actor.delete(); - this.actor = null; - - this.mapper.delete(); - this.mapper = null; - } - - update(props, previous) { - const { - actor, - property, - mapper, - colorMapPreset, - colorDataRange, - iSlice, - jSlice, - kSlice, - xSlice, - ySlice, - zSlice, - } = props; - let changed = false; - - if (actor && (!previous || actor !== previous.actor)) { - changed = this.actor.set(actor) || changed; - } - if (property && (!previous || property !== previous.property)) { - changed = this.actor.getProperty().set(property) || changed; - } - if ( - mapper && - (!previous || mapper !== previous.mapper) && - mapper !== this.mapper - ) { - changed = this.mapper.set(mapper) || changed; - } - if ( - colorMapPreset && - (!previous || colorMapPreset !== previous.colorMapPreset) - ) { - changed = true; - const preset = vtkColorMaps.getPresetByName(colorMapPreset); - this.lookupTable.applyColorMap(preset); - } - - if ( - colorDataRange && - (!previous || - !smartEqualsShallow(colorDataRange, previous.colorDataRange)) - ) { - changed = true; - if (typeof colorDataRange === 'string') { - if (previous) { - this.dataChanged(); - } else { - this.lookupTable.setMappingRange(0, 1); - this.lookupTable.updateRange(); - - this.piecewiseFunction.setNodes([ - { x: 0, y: 0, midpoint: 0.5, sharpness: 0 }, - { x: 1, y: 1, midpoint: 0.5, sharpness: 0 }, - ]); - } - } else { - this.lookupTable.setMappingRange(...colorDataRange); - this.lookupTable.updateRange(); - - this.piecewiseFunction.setNodes([ - { x: colorDataRange[0], y: 0, midpoint: 0.5, sharpness: 0 }, - { x: colorDataRange[1], y: 1, midpoint: 0.5, sharpness: 0 }, - ]); - } - } - - // check if we have valid input - if (this.validData) { - if (this.mapper.isA('vtkImageMapper')) { - // ijk - if (iSlice != null && (!previous || iSlice !== previous.iSlice)) { - changed = this.mapper.setISlice(iSlice) || changed; - } - if (jSlice != null && (!previous || jSlice !== previous.jSlice)) { - changed = this.mapper.setJSlice(jSlice) || changed; - } - if (kSlice != null && (!previous || kSlice !== previous.kSlice)) { - changed = this.mapper.setKSlice(kSlice) || changed; - } - // xyz - if (xSlice != null && (!previous || xSlice !== previous.xSlice)) { - changed = this.mapper.setXSlice(xSlice) || changed; - } - if (ySlice != null && (!previous || ySlice !== previous.ySlice)) { - changed = this.mapper.setYSlice(ySlice) || changed; - } - if (zSlice != null && (!previous || zSlice !== previous.zSlice)) { - changed = this.mapper.setZSlice(zSlice) || changed; - } - } else if (this.mapper.isA('vtkImageArrayMapper')) { - // vtkImageArrayMapper only supports k-slicing - if (kSlice != null && (!previous || kSlice !== previous.kSlice)) { - changed = this.mapper.setSlice(kSlice) || changed; - } - } - } - - // actor visibility - if (actor && actor.visibility !== undefined) { - this.currentVisibility = actor.visibility; - changed = - this.actor.setVisibility(this.currentVisibility && this.validData) || - changed; - } - - // trigger render - if (changed) { - this.dataChanged(); - } - } - - dataAvailable() { - if (!this.validData) { - this.validData = true; - this.actor.setVisibility(this.currentVisibility); - - // reset camera after input data is lazy-loaded - if (this.view && this.view.props.autoResetCamera) { - this.view.resetCamera(); - } - - // trigger render - this.dataChanged(); - } - } - - dataChanged() { - if (this.props.colorDataRange === 'auto') { - this.mapper.update(); - if (this.mapper.getInputData()) { - const input = this.mapper.getCurrentImage(); - const array = input && input.getPointData()?.getScalars(); - const dataRange = array && array.getRange(); - if (dataRange) { - this.lookupTable.setMappingRange(...dataRange); - this.lookupTable.updateRange(); - this.piecewiseFunction.setNodes([ - { x: dataRange[0], y: 0, midpoint: 0.5, sharpness: 0 }, - { x: dataRange[1], y: 1, midpoint: 0.5, sharpness: 0 }, - ]); - } - } - - if (this.view) { - this.view.renderView(); - } - } - } -} - -SliceRepresentation.defaultProps = { - colorMapPreset: 'Grayscale', - colorDataRange: 'auto', -}; - -SliceRepresentation.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * Properties to set to the mapper - */ - mapper: PropTypes.object, - - /** - * Optional parameter to set vtk mapper instance from outside. - * Allows to control which mapper class {vtkImageMapper, vtkImageArrayMapper} to use. - */ - mapperInstance: PropTypes.object, - - /** - * Properties to set to the slice/actor - */ - actor: PropTypes.object, - - /** - * Properties to set to the volume.property - */ - property: PropTypes.object, - - /** - * Preset name for the lookup table color map - */ - colorMapPreset: PropTypes.string, - - /** - * Data range use for the colorMap - */ - colorDataRange: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.number), - PropTypes.string, - ]), - - /** - * index of the slice along i - */ - iSlice: PropTypes.number, - - /** - * index of the slice along j - */ - jSlice: PropTypes.number, - - /** - * index of the slice along k - */ - kSlice: PropTypes.number, - - /** - * index of the slice along x - */ - xSlice: PropTypes.number, - - /** - * index of the slice along y - */ - ySlice: PropTypes.number, - - /** - * index of the slice along z - */ - zSlice: PropTypes.number, - - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/View.js b/src/core/View.js deleted file mode 100644 index ac48c01..0000000 --- a/src/core/View.js +++ /dev/null @@ -1,922 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -// ---------------------------------------------------------------------------- -// vtk.js Rendering stack -// ---------------------------------------------------------------------------- - -import { debounce } from '@kitware/vtk.js/macros.js'; - -import vtkBoundingBox from '@kitware/vtk.js/Common/DataModel/BoundingBox.js'; -import vtkCubeAxesActor from '@kitware/vtk.js/Rendering/Core/CubeAxesActor.js'; - -import vtkAxesActor from '@kitware/vtk.js/Rendering/Core/AxesActor'; -import vtkOrientationMarkerWidget from '@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget'; -import vtkInteractorStyleManipulator from '@kitware/vtk.js/Interaction/Style/InteractorStyleManipulator.js'; - -// Style modes -import vtkMouseCameraTrackballMultiRotateManipulator from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballMultiRotateManipulator.js'; -import vtkMouseCameraTrackballPanManipulator from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballPanManipulator.js'; -import vtkMouseCameraTrackballRollManipulator from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballRollManipulator.js'; -import vtkMouseCameraTrackballRotateManipulator from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js'; -import vtkMouseCameraTrackballZoomManipulator from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballZoomManipulator.js'; -import vtkMouseCameraTrackballZoomToMouseManipulator from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballZoomToMouseManipulator.js'; -import vtkGestureCameraManipulator from '@kitware/vtk.js/Interaction/Manipulators/GestureCameraManipulator.js'; -import vtkMouseBoxSelectorManipulator from '@kitware/vtk.js/Interaction/Manipulators/MouseBoxSelectorManipulator.js'; - -// Picking handling -import vtkOpenGLHardwareSelector from '@kitware/vtk.js/Rendering/OpenGL/HardwareSelector.js'; -import { FieldAssociations } from '@kitware/vtk.js/Common/DataModel/DataSet/Constants.js'; - -// ---------------------------------------------------------------------------- -// Context to pass parent variables to children -// ---------------------------------------------------------------------------- - -export const ViewContext = React.createContext(null); -export const RepresentationContext = React.createContext(null); -export const DataSetContext = React.createContext(null); -export const FieldsContext = React.createContext(null); -export const DownstreamContext = React.createContext(null); - -// ---------------------------------------------------------------------------- -// Helper constants -// ---------------------------------------------------------------------------- - -const manipulatorFactory = { - None: null, - Pan: vtkMouseCameraTrackballPanManipulator, - Zoom: vtkMouseCameraTrackballZoomManipulator, - Roll: vtkMouseCameraTrackballRollManipulator, - Rotate: vtkMouseCameraTrackballRotateManipulator, - MultiRotate: vtkMouseCameraTrackballMultiRotateManipulator, - ZoomToMouse: vtkMouseCameraTrackballZoomToMouseManipulator, - Select: vtkMouseBoxSelectorManipulator, -}; - -function assignManipulators(style, settings, view) { - style.removeAllMouseManipulators(); - settings.forEach((item) => { - const klass = manipulatorFactory[item.action]; - if (klass) { - const { - button, - shift, - control, - alt, - scrollEnabled, - dragEnabled, - useWorldUpVec, - worldUpVec, - useFocalPointAsCenterOfRotation, - } = item; - const manipulator = klass.newInstance(); - manipulator.setButton(button); - manipulator.setShift(!!shift); - manipulator.setControl(!!control); - manipulator.setAlt(!!alt); - if (scrollEnabled !== undefined) { - manipulator.setScrollEnabled(scrollEnabled); - } - if (dragEnabled !== undefined) { - manipulator.setDragEnabled(dragEnabled); - } - style.addMouseManipulator(manipulator); - if (manipulator.onBoxSelectChange && view.onBoxSelectChange) { - manipulator.onBoxSelectChange(view.onBoxSelectChange); - } - if (useWorldUpVec !== undefined) { - manipulator.setUseWorldUpVec(useWorldUpVec); - } - if (worldUpVec !== undefined) { - manipulator.setWorldUpVec(worldUpVec); - } - if (useFocalPointAsCenterOfRotation !== undefined) { - manipulator.setUseFocalPointAsCenterOfRotation( - useFocalPointAsCenterOfRotation - ); - } - } - }); - - // Always add gesture - style.addGestureManipulator(vtkGestureCameraManipulator.newInstance()); -} - -// ---------------------------------------------------------------------------- -// Default css styles -// ---------------------------------------------------------------------------- - -const RENDERER_STYLE = { - position: 'absolute', - width: '100%', - height: '100%', - overflow: 'hidden', -}; -/** - * View is responsible to render vtk.js data. - * It takes the following set of properties: - * - `background`: [0.2, 0.3, 0.4] - * - `cameraPosition`: [0, 0, 1] - * - `cameraViewUp`: [0, 1, 0] - * - `cameraParallelProjection`: false - * - `showOrientationAxes`: true - */ -export default class View extends Component { - constructor(props) { - super(props); - this.containerRef = React.createRef(); - - // Create vtk.js view - this.renderWindow = props.renderWindow; - this.renderer = props.renderer; - this.camera = this.renderer.getActiveCamera(); - - this.openglRenderWindow = props.renderWindowView; - - this.interactor = props.interactor; - this.defaultStyle = vtkInteractorStyleManipulator.newInstance(); - this.style = props.interactive ? this.defaultStyle : null; - - // Create orientation widget - this.axesActor = vtkAxesActor.newInstance(); - this.orientationWidget = vtkOrientationMarkerWidget.newInstance({ - actor: this.axesActor, - interactor: this.interactor, - parentRenderer: this.renderer, - }); - this.orientationWidget.setViewportCorner( - vtkOrientationMarkerWidget.Corners.BOTTOM_LEFT - ); - this.orientationWidget.setViewportSize(0.15); - this.orientationWidget.setMinPixelSize(100); - this.orientationWidget.setMaxPixelSize(300); - - // Picking handler - this.selector = vtkOpenGLHardwareSelector.newInstance({ - captureZValues: true, - }); - this.selector.setFieldAssociation( - FieldAssociations.FIELD_ASSOCIATION_POINTS - ); - this.selector.attach(this.openglRenderWindow, this.renderer); - - // expose helper methods - this.renderView = () => { - this.updateCubeBounds(); - this.renderWindow.render(); - }; - this.resetCamera = this.resetCamera.bind(this); - const bbox = vtkBoundingBox.newInstance({ bounds: [0, 0, 0, 0, 0, 0] }); - this.updateCubeBounds = () => { - if (!this.props.showCubeAxes) { - return; - } - - bbox.reset(); - const { props } = this.renderer.get('props'); - for (let i = 0; i < props.length; i++) { - const prop = props[i]; - if ( - prop.getVisibility() && - prop.getUseBounds() && - prop !== this.cubeAxes - ) { - bbox.addBounds(...prop.getBounds()); - } - } - if (this.cubeAxes) { - this.cubeAxes.setDataBounds(bbox.getBounds()); - } - }; - this.debouncedCubeBounds = debounce(this.updateCubeBounds, 50); - - this.setInteractorStyle = (style) => { - if (this.props.interactive) { - this.style = style; - this.interactor.setInteractorStyle(style); - } - }; - - // Internal functions - this.hasFocus = false; - this.handleKey = (e) => { - if (!this.hasFocus) { - return; - } - switch (e.code) { - case 'KeyR': - if (props.keybindResetCamera) this.resetCamera(); - break; - default: - // console.log(e.code); - break; - } - }; - this.onEnter = () => { - this.hasFocus = true; - }; - this.onLeave = () => { - this.hasFocus = false; - }; - - // Handle picking - const handlePicking = (callback, pickingMode, { x, y }, event) => { - if (this.props.pickingModes.indexOf(pickingMode) === -1) { - return; - } - const tolerance = this.getPointerSizeTolerance(); - const selection = this.pickClosest( - Math.floor(x), - Math.floor(y), - tolerance - ); - - // Share the selection with the rest of the world - if (callback) { - callback(selection[0], event); - } - - if ('setProps' in this.props) { - this.props.setProps({ [`${pickingMode}Info`]: selection[0] }); - } - }; - - this.hover = debounce(({ x, y }, event) => { - if (this.props.pickingModes.indexOf('hover') === -1) { - return; - } - - const tolerance = this.getPointerSizeTolerance(); - const selection = this.pickClosest( - Math.floor(x), - Math.floor(y), - tolerance - ); - - // Guard against trigger of empty selection - if (this.lastSelection.length === 0 && selection.length === 0) { - return; - } - this.lastSelection = selection; - - // Share the selection with the rest of the world - if (this.props.onHover) { - this.props.onHover(selection[0], event); - } - - if ('setProps' in this.props) { - this.props.setProps({ hoverInfo: selection[0] }); - } - }, 10); - - const select = ({ selection }) => { - if (this.props.pickingModes.indexOf('select') === -1) { - return; - } - const [x1, x2, y1, y2] = selection; - const pickResult = this.pick(x1, y1, x2, y2, true); - - // Share the selection with the rest of the world - if (this.props.onSelect) { - this.props.onSelect(pickResult, event); - } - - if ('setProps' in this.props) { - this.props.setProps({ selectInfo: pickResult }); - } - }; - - this.onClick = (e) => - handlePicking( - this.props.onClick, - 'click', - this.getScreenEventPositionFor(e), - e - ); - this.onMouseDown = (e) => - handlePicking( - this.props.onMouseDown, - 'mouseDown', - this.getScreenEventPositionFor(e), - e - ); - this.onMouseUp = (e) => - handlePicking( - this.props.onMouseUp, - 'mouseUp', - this.getScreenEventPositionFor(e), - e - ); - this.onMouseMove = (e) => { - // Only trigger hover if it's listed in the picking modes - if (this.props.pickingModes.indexOf('hover') !== -1) { - this.hover(this.getScreenEventPositionFor(e), e); - } - }; - this.lastSelection = []; - - this.onBoxSelectChange = select; - - // Cube Axes - if (this.props.showCubeAxes) { - this.initCubeAxes(); - } - - this.subscriptions = []; - this.subscriptions.push( - this.renderer.onEvent(({ type, renderer }) => { - if (renderer && type === 'ComputeVisiblePropBoundsEvent') { - this.debouncedCubeBounds(); - } - }) - ); - } - - initCubeAxes() { - this.cubeAxes = vtkCubeAxesActor.newInstance({ - visibility: false, - dataBounds: [-1, 1, -1, 1, -1, 1], - }); - Array.from(this.cubeAxes.getActors()).forEach(({ setVisibility }) => - setVisibility(false) - ); - this.cubeAxes.setCamera(this.camera); - this.renderer.addActor(this.cubeAxes); - } - - getPointerSizeTolerance() { - return this.props.pointerSize / 2; - } - - getScreenEventPositionFor(source) { - const bounds = this.openglRenderWindow.getCanvas().getBoundingClientRect(); - const [canvasWidth, canvasHeight] = this.openglRenderWindow.getSize(); - const scaleX = canvasWidth / bounds.width; - const scaleY = canvasHeight / bounds.height; - const position = { - x: scaleX * (source.clientX - bounds.left), - y: scaleY * (bounds.height - source.clientY + bounds.top), - z: 0, - }; - return position; - } - - render() { - const { id, children, style, className } = this.props; - - return ( -
-
- {children} -
- ); - } - - componentDidMount() { - const container = this.containerRef.current; - document.addEventListener('keyup', this.handleKey); - - // Assign the mouseDown event, we can't use the React event system - // because the mouseDown event is swallowed by other logic - container.addEventListener('mousedown', this.onMouseDown); - - this.update(this.props); - this.resetCamera(); - - // Give a chance for the first layout to properly reset the camera - this.firstResetTimeout = setTimeout(() => this.resetCamera(), 100); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.update(this.props, prevProps); - } - - componentWillUnmount() { - if (this.debouncedCubeBounds) this.debouncedCubeBounds.cancel(); - if (this.hover) this.hover.cancel(); - clearTimeout(this.resetCameraTimeout); - clearTimeout(this.renderViewTimeout); - clearTimeout(this.firstResetTimeout); - - while (this.subscriptions.length) { - this.subscriptions.pop().unsubscribe(); - } - - const container = this.containerRef.current; - container.removeEventListener('mousedown', this.onMouseDown); - - document.removeEventListener('keyup', this.handleKey); - - this.selector.delete(); - this.orientationWidget.delete(); - - if ( - this.interactor.getInteractorStyle() === this.style || - this.interactor.getInteractorStyle() === this.defaultStyle - ) { - this.interactor.setInteractorStyle(null); - } - - this.style.delete(); - this.defaultStyle.delete(); - this.defaultStyle = null; - this.style = null; - this.renderer = null; - this.selector = null; - this.orientationWidget = null; - } - - update(props, previous) { - const { - background, - interactorSettings, - interactive, - cameraPosition, - cameraViewUp, - cameraFocalPoint, - cameraParallelProjection, - autoResetCamera, - triggerRender, - triggerResetCamera, - showCubeAxes, - cubeAxesStyle, - showOrientationAxes, - } = props; - if (background && (!previous || background !== previous.background)) { - this.renderer.setBackground(background); - } - if ( - interactive && - interactorSettings && - (!previous || interactorSettings !== previous.interactorSettings) - ) { - assignManipulators(this.style, interactorSettings, this); - } - if ( - cameraParallelProjection && - (!previous || - cameraParallelProjection !== previous.cameraParallelProjection) - ) { - const camera = this.renderer.getActiveCamera(); - camera.setParallelProjection(cameraParallelProjection); - if (previous && autoResetCamera) { - this.resetCamera(); - } - } - if ( - (cameraPosition && - (!previous || - JSON.stringify(cameraPosition) !== - JSON.stringify(previous.cameraPosition))) || - (cameraViewUp && - (!previous || - JSON.stringify(cameraViewUp) !== - JSON.stringify(previous.cameraViewUp))) || - (cameraFocalPoint && - (!previous || - JSON.stringify(cameraFocalPoint) !== - JSON.stringify(previous.cameraFocalPoint))) - ) { - const camera = this.renderer.getActiveCamera(); - camera.set({ - position: cameraPosition, - viewUp: cameraViewUp, - focalPoint: cameraFocalPoint, - }); - if (previous && autoResetCamera) { - this.resetCamera(); - } - } - - if (this.props.showCubeAxes) { - if (this.cubeAxes == null) { - this.initCubeAxes(); - } - - if (this.cubeAxes.setVisibility(showCubeAxes)) { - Array.from(this.cubeAxes.getActors()).forEach(({ setVisibility }) => - setVisibility(showCubeAxes) - ); - this.renderView(); - } - - if (this.cubeAxes.set(cubeAxesStyle || {})) { - this.renderView(); - } - } - - if (showOrientationAxes !== this.orientationWidget.getEnabled()) { - this.orientationWidget.setEnabled(showOrientationAxes); - } - - // Allow to trigger method call from property change - if (previous && triggerRender !== previous.triggerRender) { - this.renderViewTimeout = setTimeout(this.renderView, 0); - } - if (previous && triggerResetCamera !== previous.triggerResetCamera) { - this.resetCameraTimeout = setTimeout(this.resetCamera, 0); - } - } - - resetCamera() { - this.renderer.resetCamera(); - if (this.props.interactive) { - this.style.setCenterOfRotation( - this.renderer.getActiveCamera().getFocalPoint() - ); - } - this.renderWindow.render(); - } - - pickClosest(xp, yp, tolerance) { - const x1 = Math.floor(xp - tolerance); - const y1 = Math.floor(yp - tolerance); - const x2 = Math.ceil(xp + tolerance); - const y2 = Math.ceil(yp + tolerance); - - this.selector.setArea(x1, y1, x2, y2); - this.previousSelectedData = null; - - if (this.selector.captureBuffers()) { - const pos = [xp, yp]; - const outSelectedPosition = [0, 0]; - const info = this.selector.getPixelInformation( - pos, - tolerance, - outSelectedPosition - ); - - if (info == null || info.prop == null) return []; - - const startPoint = this.openglRenderWindow.displayToWorld( - Math.round((x1 + x2) / 2), - Math.round((y1 + y2) / 2), - 0, - this.renderer - ); - - const endPoint = this.openglRenderWindow.displayToWorld( - Math.round((x1 + x2) / 2), - Math.round((y1 + y2) / 2), - 1, - this.renderer - ); - - const ray = [Array.from(startPoint), Array.from(endPoint)]; - - const worldPosition = Array.from( - this.openglRenderWindow.displayToWorld( - info.displayPosition[0], - info.displayPosition[1], - info.zValue, - this.renderer - ) - ); - - const displayPosition = [ - info.displayPosition[0], - info.displayPosition[1], - info.zValue, - ]; - - const selection = []; - selection[0] = { - worldPosition, - displayPosition, - compositeID: info.compositeID, - ...info.prop.get('representationId'), - ray, - }; - return selection; - } - return []; - } - - pick(x1, y1, x2, y2, useFrustrum = false) { - this.selector.setArea(x1, y1, x2, y2); - this.previousSelectedData = null; - if (this.selector.captureBuffers()) { - this.selections = this.selector.generateSelection(x1, y1, x2, y2) || []; - if (useFrustrum) { - const frustrum = [ - Array.from( - this.openglRenderWindow.displayToWorld(x1, y1, 0, this.renderer) - ), - Array.from( - this.openglRenderWindow.displayToWorld(x2, y1, 0, this.renderer) - ), - Array.from( - this.openglRenderWindow.displayToWorld(x2, y2, 0, this.renderer) - ), - Array.from( - this.openglRenderWindow.displayToWorld(x1, y2, 0, this.renderer) - ), - Array.from( - this.openglRenderWindow.displayToWorld(x1, y1, 1, this.renderer) - ), - Array.from( - this.openglRenderWindow.displayToWorld(x2, y1, 1, this.renderer) - ), - Array.from( - this.openglRenderWindow.displayToWorld(x2, y2, 1, this.renderer) - ), - Array.from( - this.openglRenderWindow.displayToWorld(x1, y2, 1, this.renderer) - ), - ]; - const representationIds = []; - this.selections.forEach((v) => { - const { prop } = v.getProperties(); - const representationId = - prop?.get('representationId').representationId; - if (representationId) { - representationIds.push(representationId); - } - }); - return { frustrum, representationIds }; - } - const ray = [ - Array.from( - this.openglRenderWindow.displayToWorld( - Math.round((x1 + x2) / 2), - Math.round((y1 + y2) / 2), - 0, - this.renderer - ) - ), - Array.from( - this.openglRenderWindow.displayToWorld( - Math.round((x1 + x2) / 2), - Math.round((y1 + y2) / 2), - 1, - this.renderer - ) - ), - ]; - return this.selections - .map((v) => { - const { prop, compositeID, displayPosition } = v.getProperties(); - - // Return false to mark this item for removal - if (prop == null) return false; - - return { - worldPosition: Array.from( - this.openglRenderWindow.displayToWorld( - displayPosition[0], - displayPosition[1], - displayPosition[2], - this.renderer - ) - ), - displayPosition, - compositeID, // Not yet useful unless GlyphRepresentation - ...prop.get('representationId'), - ray, - }; - }) - .filter(Boolean); - } - return []; - } -} - -View.defaultProps = { - style: { - width: '100%', - height: '100%', - }, - background: [0.2, 0.3, 0.4], - cameraPosition: [0, 0, 1], - cameraViewUp: [0, 1, 0], - cameraFocalPoint: [0, 0, 0], - autoResetCamera: true, - cameraParallelProjection: false, - triggerRender: 0, - triggerResetCamera: 0, - interactorSettings: [ - { - button: 1, - action: 'Rotate', - }, - { - button: 2, - action: 'Pan', - }, - { - button: 3, - action: 'Zoom', - scrollEnabled: true, - }, - { - button: 1, - action: 'Pan', - alt: true, - }, - { - button: 1, - action: 'Zoom', - control: true, - }, - { - button: 1, - action: 'Select', - shift: true, - }, - { - button: 1, - action: 'Roll', - alt: true, - shift: true, - }, - ], - interactive: true, - pickingModes: [], - showCubeAxes: false, - pointerSize: 0, - showOrientationAxes: false, - keybindResetCamera: true, -}; - -View.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * Allow user to override the default View style { width: '100%', height: '100%' } - */ - style: PropTypes.object, - - /** - * Allow user to provide custom className associated to root element - */ - className: PropTypes.string, - - /** - * The color of the view background using 3 floating numbers - * between 0-1 of Red, Green, Blue component. - */ - background: PropTypes.array, - - /** - * Configure the interactions - */ - interactorSettings: PropTypes.array, - - /** - * Enable/Disable interaction - */ - interactive: PropTypes.bool, - - /** - * Initial camera position from an object in [0,0,0] - */ - cameraPosition: PropTypes.array, - - /** - * Initial camera focal point from an object in [0,0,0] - */ - cameraFocalPoint: PropTypes.array, - - /** - * Initial camera position from an object in [0,0,0] - */ - cameraViewUp: PropTypes.array, - - /** - * Use parallel projection (default: false) - */ - cameraParallelProjection: PropTypes.bool, - - /** - * Whether to automatically call resetCamera() (default: true) - * - * When set to false, the user must explicitly provide camera - * properties. Note that the initial resetCamera() call will - * still occur upon component mount. - */ - autoResetCamera: PropTypes.bool, - - /** - * Property use to trigger a render when changing. - */ - triggerRender: PropTypes.number, - - /** - * Property use to trigger a resetCamera when changing. - */ - triggerResetCamera: PropTypes.number, - - /** - * List of representation to show - */ - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), - - /** - * List of picking listeners to bind. By default it is disabled (empty array). - */ - pickingModes: PropTypes.arrayOf( - PropTypes.oneOf(['click', 'hover', 'select', 'mouseDown', 'mouseUp']) - ), - - /** - * User callback function for click - */ - onClick: PropTypes.func, - - /** - * Read-only prop. To use this, make sure that `pickingModes` contains `click`. - * This prop is updated when an element in the map is clicked. This contains - * the picking info describing the object being clicked on. - */ - clickInfo: PropTypes.object, - - /** - * User callback function for mouse down - */ - onMouseDown: PropTypes.func, - - /** - * Read-only prop. To use this, make sure that `pickingModes` contains `mouseDown`. - * This prop is updated when a mouse down event is fired on an element in the map. This contains - * the picking info describing the object interested by the event. - */ - mouseDownInfo: PropTypes.object, - - /** - * User callback function for mouse up - */ - onMouseUp: PropTypes.func, - - /** - * Read-only prop. To use this, make sure that `pickingModes` contains `mouseUp`. - * This prop is updated when a mouse up event is fired on an element in the map. This contains - * the picking info describing the object interested by the event. - */ - mouseUpInfo: PropTypes.object, - - /** - * User callback function for hover - */ - onHover: PropTypes.func, - - /** - * Read-only prop. To use this, make sure that `pickingModes` contains `hover`. - * This prop is updated when an element in the map is hovered. This contains - * the picking info describing the object being hovered. - */ - hoverInfo: PropTypes.object, - - /** - * User callback function for box select - */ - onSelect: PropTypes.func, - - /** - * Read-only prop. To use this, make sure that `pickingModes` contains `select`. - * This prop is updated when an element in the view is select. This contains - * the picking info describing the object being select along with the frustrum. - */ - selectInfo: PropTypes.object, - - /** - * Defines the tolerance of the click and hover selection. - */ - pointerSize: PropTypes.number, - - /** - * Show/Hide Cube Axes for the given representation - */ - showCubeAxes: PropTypes.bool, - - /** - * Configure cube Axes style by overriding the set of properties defined - * https://github.com/Kitware/vtk-js/blob/HEAD/Sources/Rendering/Core/CubeAxesActor/index.js#L703-L719 - */ - cubeAxesStyle: PropTypes.object, - - /** - * Show/Hide orientation axes. - */ - showOrientationAxes: PropTypes.bool, - - /** - * Trigger/Not Trigger resetcamera on KeyR - */ - keybindResetCamera: PropTypes.bool, -}; diff --git a/src/core/ViewContainer.js b/src/core/ViewContainer.js deleted file mode 100644 index 174f5d6..0000000 --- a/src/core/ViewContainer.js +++ /dev/null @@ -1,167 +0,0 @@ -import React, { Component } from 'react'; - -import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow.js'; -import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow.js'; -import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor.js'; -import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer.js'; - -import View from './View'; -import { MultiViewRootContext } from './MultiViewRoot'; - -class ViewController extends Component { - constructor(props) { - super(props); - - this.renderer = vtkRenderer.newInstance(); - this.view = null; - this.resizeObserver = new ResizeObserver(() => this.onResize()); - - if (props.root) { - this.renderWindow = props.root.renderWindow; - this.openglRenderWindow = props.root.renderWindowView; - this.interactor = props.root.interactor; - } else { - this.renderWindow = vtkRenderWindow.newInstance(); - this.openglRenderWindow = vtkOpenGLRenderWindow.newInstance(); - this.interactor = vtkRenderWindowInteractor.newInstance(); - - this.renderWindow.addView(this.openglRenderWindow); - if (props.interactive) { - this.interactor.setView(this.openglRenderWindow); - this.interactor.initialize(); - } - } - - this.renderWindow.addRenderer(this.renderer); - this.onEnter = this.onEnter.bind(this); - this.onResize = this.onResize.bind(this); - this.setViewRef = this.setViewRef.bind(this); - } - - componentDidMount() { - const container = this.view?.containerRef.current; - if (this.view && container) { - container.addEventListener('pointerenter', this.onEnter); - if (this.props.root) { - this.props.root.observeRendererResize(container, this.renderer); - } else { - this.resizeObserver.observe(container); - this.openglRenderWindow.setContainer(container); - if (this.props.interactive) { - this.interactor.bindEvents(container); - } - this.interactor.setInteractorStyle(this.view.style); - // initial resize - this.onResize(); - } - } - } - - componentWillUnmount() { - const container = this.view?.containerRef.current; - container.removeEventListener('pointerenter', this.onEnter); - - this.resizeObserver.disconnect(); - if (this.props.root) { - this.props.root.unobserveRendererResize(container); - } - - // MultiViewRoot parent may delete the render window first in WillUnmount. - if (!this.renderWindow.isDeleted()) { - this.renderWindow.removeRenderer(this.renderer); - } - - if (this.props.root) { - this.bindInteractorEvents(null); - } else { - // Detatch from DOM - if (this.interactor.getContainer()) { - this.interactor.unbindEvents(); - } - this.openglRenderWindow.setContainer(null); - - if (!this.renderWindow.isDeleted()) { - this.renderWindow.removeView(this.openglRenderWindow); - this.renderWindow.delete(); - } - - this.interactor.delete(); - this.openglRenderWindow.delete(); - } - - this.renderer.delete(); - - this.interactor = null; - this.renderWindow = null; - this.openglRenderWindow = null; - } - - render() { - const filteredProps = { ...this.props }; - delete filteredProps.root; - - return ( - - ); - } - - // sets both the forwarded ref and the internal view ref - // in order for external refs to point to the inner View - setViewRef(el) { - this.view = el; - if (this.props.forwardedRef) { - this.props.forwardedRef.current = el; - } - } - - bindInteractorEvents(el) { - const oldContainer = this.interactor.getContainer(); - if (oldContainer !== el) { - if (oldContainer) { - this.interactor.unbindEvents(); - } - if (el) { - this.interactor.bindEvents(el); - } - } - } - - onEnter() { - const container = this.view?.containerRef.current; - if (this.props.root && container) { - this.bindInteractorEvents(container); - this.interactor.setCurrentRenderer(this.renderer); - this.interactor.setInteractorStyle(this.view.style); - } - } - - onResize() { - const container = this.view?.containerRef.current; - if (container && !this.props.root) { - const devicePixelRatio = window.devicePixelRatio || 1; - const { width, height } = container.getBoundingClientRect(); - const w = Math.floor(width * devicePixelRatio); - const h = Math.floor(height * devicePixelRatio); - this.openglRenderWindow.setSize(Math.max(w, 10), Math.max(h, 10)); - this.renderWindow.render(); - } - } -} - -ViewController.defaultProps = View.defaultProps; -ViewController.propTypes = View.propTypes; - -export default React.forwardRef(function ViewContainer(props, ref) { - return ( - - {(root) => } - - ); -}); diff --git a/src/core/VolumeController.js b/src/core/VolumeController.js deleted file mode 100644 index a0ce088..0000000 --- a/src/core/VolumeController.js +++ /dev/null @@ -1,112 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { ViewContext, RepresentationContext } from './View'; - -import vtkVolumeController from '@kitware/vtk.js/Interaction/UI/VolumeController.js'; - -/** - * VolumeController is a GUI to control the piecewise function - */ -export default class VolumeController extends Component { - constructor(props) { - super(props); - this.subscriptions = []; - this.containerRef = React.createRef(); - - // Create vtk.js object - const { size, rescaleColorMap } = props; - this.controller = vtkVolumeController.newInstance({ - size, - rescaleColorMap, - }); - } - - render() { - return ( - - {(view) => ( - - {(representation) => { - this.view = view; - this.representation = representation; - return
; - }} - - )} - - ); - } - - componentDidMount() { - this.init(); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.controller.setSize(...this.props.size); - this.controller.render(); - } - - componentWillUnmount() { - while (this.subscriptions.length) { - this.subscriptions.pop().unsubscribe(); - } - this.controller.setContainer(null); - this.controller.delete(); - this.controller = null; - } - - init() { - const container = this.containerRef.current; - const { renderWindow, props } = this.view; - const { volume } = this.representation; - const isBackgroundDark = - props.background[0] + props.background[1] + props.background[2] < 1.5; - - if (volume && volume.getMapper() && volume.getMapper().getInputData()) { - const ds = volume.getMapper().getInputData(); - this.controller.setContainer(container); - this.controller.setupContent(renderWindow, volume, isBackgroundDark); - this.controller.render(); - this.view.resetCamera(); - this.view.renderView(); - this.subscriptions.push(ds.onModified(() => this.onDataChange(), -1)); - } else { - setTimeout(() => this.init(), 100); - } - } - - onDataChange() { - const widget = this.controller.getWidget(); - if (this.representation && this.representation.volume) { - const { volume } = this.representation; - const sourceDS = volume.getMapper().getInputData(); - const dataArray = - sourceDS.getPointData().getScalars() || - sourceDS.getPointData().getArrays()[0]; - widget.setDataArray(dataArray.getData()); - } - } -} - -VolumeController.defaultProps = { - size: [400, 150], - rescaleColorMap: true, -}; - -VolumeController.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * Controller size in pixels - */ - size: PropTypes.arrayOf(PropTypes.number), - - /** - * Use opacity range to rescale color map - */ - rescaleColorMap: PropTypes.bool, -}; diff --git a/src/core/VolumeRepresentation.js b/src/core/VolumeRepresentation.js deleted file mode 100644 index b24c50a..0000000 --- a/src/core/VolumeRepresentation.js +++ /dev/null @@ -1,225 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; - -import { ViewContext, RepresentationContext, DownstreamContext } from './View'; -import { smartEqualsShallow } from '../utils'; - -import vtkVolume from '@kitware/vtk.js/Rendering/Core/Volume.js'; -import vtkVolumeMapper from '@kitware/vtk.js/Rendering/Core/VolumeMapper.js'; -import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps.js'; -import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction.js'; -import vtkPiecewiseFunction from '@kitware/vtk.js/Common/DataModel/PiecewiseFunction.js'; - -/** - * VolumeRepresentation is responsible to convert a vtkPolyData into rendering - * It takes the following set of properties: - * - colorBy: ['POINTS', ''], - * - pointSize: 1, - * - color: [1,1,1], - */ -export default class VolumeRepresentation extends Component { - constructor(props) { - super(props); - - // Guard to prevent rendering if no data - this.validData = false; - this.currentVisibility = true; - - // Create vtk.js objects - this.lookupTable = vtkColorTransferFunction.newInstance(); - this.piecewiseFunction = vtkPiecewiseFunction.newInstance(); - this.volume = vtkVolume.newInstance({ visibility: false }); - this.mapper = vtkVolumeMapper.newInstance(); - this.volume.setMapper(this.mapper); - - this.volume.getProperty().setRGBTransferFunction(0, this.lookupTable); - this.volume.getProperty().setScalarOpacity(0, this.piecewiseFunction); - this.volume.getProperty().setInterpolationTypeToLinear(); - } - - render() { - return ( - - {(view) => { - if (!this.view) { - view.renderer.addVolume(this.volume); - this.view = view; - } - return ( - - -
- {this.props.children} -
-
-
- ); - }} -
- ); - } - - componentDidMount() { - this.update(this.props); - } - - componentDidUpdate(prevProps, prevState, snapshot) { - this.update(this.props, prevProps); - } - - componentWillUnmount() { - if (this.view && this.view.renderer) { - this.view.renderer.removeVolume(this.volume); - this.view = null; - } - - this.volume.delete(); - this.volume = null; - - this.mapper.delete(); - this.mapper = null; - } - - update(props, previous) { - const { volume, property, mapper, colorMapPreset, colorDataRange } = props; - let changed = false; - - if (volume && (!previous || volume !== previous.volume)) { - changed = this.volume.set(volume) || changed; - } - if (property && (!previous || property !== previous.property)) { - changed = this.volume.getProperty().set(property) || changed; - } - if (mapper && (!previous || mapper !== previous.mapper)) { - changed = this.mapper.set(mapper) || changed; - } - if ( - colorMapPreset && - (!previous || colorMapPreset !== previous.colorMapPreset) - ) { - changed = true; - const preset = vtkColorMaps.getPresetByName(colorMapPreset); - this.lookupTable.applyColorMap(preset); - this.lookupTable.setMappingRange(...colorDataRange); - this.lookupTable.updateRange(); - } - - if ( - colorDataRange && - (!previous || - !smartEqualsShallow(colorDataRange, previous.colorDataRange)) - ) { - changed = true; - if (typeof colorDataRange === 'string') { - if (previous) { - this.dataChanged(); - } else { - this.lookupTable.setMappingRange(0, 1); - this.lookupTable.updateRange(); - - this.piecewiseFunction.setNodes([ - { x: 0, y: 0, midpoint: 0.5, sharpness: 0 }, - { x: 1, y: 1, midpoint: 0.5, sharpness: 0 }, - ]); - } - } else { - this.lookupTable.setMappingRange(...colorDataRange); - this.lookupTable.updateRange(); - - this.piecewiseFunction.setNodes([ - { x: colorDataRange[0], y: 0, midpoint: 0.5, sharpness: 0 }, - { x: colorDataRange[1], y: 1, midpoint: 0.5, sharpness: 0 }, - ]); - } - } - - // actor visibility - if (volume && volume.visibility !== undefined) { - this.currentVisibility = volume.visibility; - changed = - this.volume.setVisibility(this.currentVisibility && this.validData) || - changed; - } - - // trigger render - if (changed) { - this.dataChanged(); - } - } - - dataAvailable() { - if (!this.validData) { - this.validData = true; - this.volume.setVisibility(this.currentVisibility); - - // trigger render - this.dataChanged(); - } - } - - dataChanged() { - if (this.props.colorDataRange === 'auto') { - this.mapper.update(); - const input = this.mapper.getInputData(); - const array = input && input.getPointData().getScalars(); - const dataRange = array && array.getRange(); - if (dataRange) { - this.lookupTable.setMappingRange(...dataRange); - this.lookupTable.updateRange(); - this.piecewiseFunction.setNodes([ - { x: dataRange[0], y: 0, midpoint: 0.5, sharpness: 0 }, - { x: dataRange[1], y: 1, midpoint: 0.5, sharpness: 0 }, - ]); - } - - if (this.view) { - this.view.renderView(); - } - } - } -} - -VolumeRepresentation.defaultProps = { - colorMapPreset: 'erdc_rainbow_bright', - colorDataRange: 'auto', -}; - -VolumeRepresentation.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - - /** - * Properties to set to the mapper - */ - mapper: PropTypes.object, - - /** - * Properties to set to the volume - */ - volume: PropTypes.object, - - /** - * Properties to set to the volume.property - */ - property: PropTypes.object, - - /** - * Preset name for the lookup table color map - */ - colorMapPreset: PropTypes.string, - - /** - * Data range use for the colorMap - */ - colorDataRange: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.number), - PropTypes.string, - ]), - - children: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.node), - PropTypes.node, - ]), -}; diff --git a/src/core/index.js b/src/core/index.js deleted file mode 100644 index f60601c..0000000 --- a/src/core/index.js +++ /dev/null @@ -1,61 +0,0 @@ -import vtkVolumeRepresentation from './VolumeRepresentation'; -import vtkSliceRepresentation from './SliceRepresentation'; -import vtkVolumeController from './VolumeController'; -import vtkPointData from './PointData'; -import vtkPolyData from './PolyData'; -import vtkReader from './Reader'; -import vtkShareDataSet from './ShareDataSet'; -import vtkDataset from './Dataset'; -import vtkView from './ViewContainer'; -import vtkGeometryRepresentation from './GeometryRepresentation'; -import vtkGeometry2DRepresentation from './Geometry2DRepresentation'; -import vtkGlyphRepresentation from './GlyphRepresentation'; -import vtkImageData from './ImageData'; -import vtkDataArray from './DataArray'; -import vtkFieldData from './FieldData'; -import vtkAlgorithm from './Algorithm'; -import vtkCalculator from './Calculator'; -import vtkCellData from './CellData'; -import vtkMultiViewRoot from './MultiViewRoot'; - -export const VolumeRepresentation = vtkVolumeRepresentation; -export const SliceRepresentation = vtkSliceRepresentation; -export const VolumeController = vtkVolumeController; -export const PointData = vtkPointData; -export const PolyData = vtkPolyData; -export const Reader = vtkReader; -export const ShareDataSet = vtkShareDataSet; -export const DataSet = vtkDataset; -export const View = vtkView; -export const GeometryRepresentation = vtkGeometryRepresentation; -export const Geometry2DRepresentation = vtkGeometry2DRepresentation; -export const GlyphRepresentation = vtkGlyphRepresentation; -export const ImageData = vtkImageData; -export const DataArray = vtkDataArray; -export const FieldData = vtkFieldData; -export const Algorithm = vtkAlgorithm; -export const Calculator = vtkCalculator; -export const CellData = vtkCellData; -export const MultiViewRoot = vtkMultiViewRoot; - -export default { - VolumeRepresentation: vtkVolumeRepresentation, - SliceRepresentation: vtkSliceRepresentation, - VolumeController: vtkVolumeController, - PointData: vtkPointData, - PolyData: vtkPolyData, - Reader: vtkReader, - ShareDataSet: vtkShareDataSet, - Dataset: vtkDataset, - View: vtkView, - GeometryRepresentation: vtkGeometryRepresentation, - Geometry2DRepresentation: vtkGeometry2DRepresentation, - GlyphRepresentation: vtkGlyphRepresentation, - ImageData: vtkImageData, - DataArray: vtkDataArray, - FieldData: vtkFieldData, - Algorithm: vtkAlgorithm, - Calculator: vtkCalculator, - CellData: vtkCellData, - MultiViewRoot: vtkMultiViewRoot, -}; diff --git a/src/index.js b/src/index.js deleted file mode 100644 index 0446180..0000000 --- a/src/index.js +++ /dev/null @@ -1,4 +0,0 @@ -// Ensure vtk.js classes available for Algorithm and Reader -import './AvailableClasses'; - -export * from './light'; diff --git a/src/light.js b/src/light.js deleted file mode 100644 index a719d08..0000000 --- a/src/light.js +++ /dev/null @@ -1,53 +0,0 @@ -// Get React pieces -import Core from './core/index'; -import Representations from './representations/index'; - -import { - ViewContext, - RepresentationContext, - DataSetContext, - FieldsContext, - DownstreamContext, -} from './core/View'; - -// Core -export const VolumeRepresentation = Core.VolumeRepresentation; -export const SliceRepresentation = Core.SliceRepresentation; -export const VolumeController = Core.VolumeController; -export const PointData = Core.PointData; -export const PolyData = Core.PolyData; -export const Reader = Core.Reader; -export const ShareDataSet = Core.ShareDataSet; -export const Dataset = Core.Dataset; -export const View = Core.View; -export const GeometryRepresentation = Core.GeometryRepresentation; -export const Geometry2DRepresentation = Core.Geometry2DRepresentation; -export const GlyphRepresentation = Core.GlyphRepresentation; -export const ImageData = Core.ImageData; -export const DataArray = Core.DataArray; -export const FieldData = Core.FieldData; -export const Algorithm = Core.Algorithm; -export const Calculator = Core.Calculator; -export const CellData = Core.CellData; -export const MultiViewRoot = Core.MultiViewRoot; - -// Representations -export const PointCloudRepresentation = - Representations.PointCloudRepresentation; -export const VolumeDataRepresentation = - Representations.VolumeDataRepresentation; - -// Context -export const Contexts = { - ViewContext, - RepresentationContext, - DataSetContext, - FieldsContext, - DownstreamContext, -}; - -export default { - Core, - Representations, - Contexts, -}; diff --git a/src/representations/PointCloudRepresentation.js b/src/representations/PointCloudRepresentation.js deleted file mode 100644 index 8f78fbb..0000000 --- a/src/representations/PointCloudRepresentation.js +++ /dev/null @@ -1,137 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -import GeometryRepresentation from '../core/GeometryRepresentation'; -import PolyData from '../core/PolyData'; -import PointData from '../core/PointData'; -import DataArray from '../core/DataArray'; - -/** - * PointCloudRepresentation expect the following set of properties - * - xyz: [x0, y0, z0, x1, ..., zn] - * - rgb: [...] - * - rgba: [...] - * - scalars: [...] - */ -export default function PointCloudRepresentation(props) { - let nbComponents = 0; - let values = null; - let type = null; - if (props.rgb) { - values = props.rgb; - nbComponents = 3; - type = 'Uint8Array'; - } - if (props.rgba) { - values = props.rgb; - nbComponents = 4; - type = 'Uint8Array'; - } - if (props.scalars) { - values = props.scalars; - nbComponents = 1; - type = 'Float32Array'; - } - console.log('nbComponents', nbComponents); - return ( - - - {nbComponents && ( - - - - )} - - - ); -} - -PointCloudRepresentation.defaultProps = { - xyz: [0, 0, 0], - colorMapPreset: 'erdc_rainbow_bright', - colorDataRange: [0, 1], - showCubeAxes: false, - showScalarBar: false, - scalarBarTitle: '', -}; - -PointCloudRepresentation.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - /** - * Points coordinates - */ - xyz: PropTypes.arrayOf(PropTypes.number), - /** - * Use RGB values to attach to the points/vertex - */ - rgb: PropTypes.arrayOf(PropTypes.number), - /** - * Use RGBA values to attach to the points/vertex - */ - rgba: PropTypes.arrayOf(PropTypes.number), - - /** - * Field values to attach to the points - */ - scalars: PropTypes.arrayOf(PropTypes.number), - - /** - * Preset name for the lookup table color map - */ - colorMapPreset: PropTypes.string, - - /** - * Data range use for the colorMap - */ - colorDataRange: PropTypes.arrayOf(PropTypes.number), - - /** - * Properties to set to the actor.property - */ - property: PropTypes.object, - - /** - * Show/Hide Cube Axes for the given representation - */ - showCubeAxes: PropTypes.bool, - - /** - * Configure cube Axes style by overriding the set of properties defined - * https://github.com/Kitware/vtk-js/blob/HEAD/Sources/Rendering/Core/CubeAxesActor/index.js#L703-L719 - */ - cubeAxesStyle: PropTypes.object, - - /** - * Show hide scalar bar for that representation - */ - showScalarBar: PropTypes.bool, - - /** - * Use given string as title for scalar bar. By default it is empty (no title). - */ - scalarBarTitle: PropTypes.string, - - /** - * Configure scalar bar style by overriding the set of properties defined - * https://github.com/Kitware/vtk-js/blob/master/Sources/Rendering/Core/ScalarBarActor/index.js#L776-L796 - */ - scalarBarStyle: PropTypes.object, -}; diff --git a/src/representations/VolumeDataRepresentation.js b/src/representations/VolumeDataRepresentation.js deleted file mode 100644 index 6e18e2f..0000000 --- a/src/representations/VolumeDataRepresentation.js +++ /dev/null @@ -1,162 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -import VolumeRepresentation from '../core/VolumeRepresentation'; -import ImageData from '../core/ImageData'; -import PointData from '../core/PointData'; -import DataArray from '../core/DataArray'; -import VolumeController from '../core/VolumeController'; - -/** - * VolumneDataRepresentation expect the following set of properties - * - dimensions: [10, 20, 5] - * - spacing: [1, 1, 1] - * - origin: [0, 0, 0] - * - rgb: [...] - * - rgba: [...] - * - scalars: [...] - * - scalarsType: Float32Array - */ -export default function VolumneDataRepresentation(props) { - let nbComponents = 0; - let values = null; - let type = null; - if (props.rgb) { - values = props.rgb; - nbComponents = 3; - type = 'Uint8Array'; - } - if (props.rgba) { - values = props.rgb; - nbComponents = 4; - type = 'Uint8Array'; - } - if (props.scalars) { - values = props.scalars; - nbComponents = 1; - type = props.scalarsType; - } - return ( - - {props.volumeController && ( - - )} - - - - - - - ); -} - -VolumneDataRepresentation.defaultProps = { - scalarsType: 'Float32Array', - colorMapPreset: 'erdc_rainbow_bright', - colorDataRange: 'auto', - volumeController: true, - rescaleColorMap: true, - controllerSize: [400, 150], -}; - -VolumneDataRepresentation.propTypes = { - /** - * The ID used to identify this component. - */ - id: PropTypes.string, - /** - * Number of points along x, y, z - */ - dimensions: PropTypes.arrayOf(PropTypes.number), - - /** - * Spacing along x, y, z between points in world coordinates - */ - spacing: PropTypes.arrayOf(PropTypes.number), - - /** - * World coordinate of the lower left corner of your vtkImageData (i=0, j=0, k=0). - */ - origin: PropTypes.arrayOf(PropTypes.number), - - /** - * Use RGB values to attach to the points/vertex - */ - rgb: PropTypes.arrayOf(PropTypes.number), - /** - * Use RGBA values to attach to the points/vertex - */ - rgba: PropTypes.arrayOf(PropTypes.number), - - /** - * Field values to attach to the points - */ - scalars: PropTypes.arrayOf(PropTypes.number), - - /** - * Types of numbers provided in scalars - */ - scalarsType: PropTypes.string, - - /** - * Properties to set to the mapper - */ - mapper: PropTypes.object, - - /** - * Properties to set to the volume - */ - volume: PropTypes.object, - - /** - * Properties to set to the volume.property - */ - property: PropTypes.object, - - /** - * Preset name for the lookup table color map - */ - colorMapPreset: PropTypes.string, - - /** - * Show volumeController - */ - volumeController: PropTypes.bool, - - /** - * Controller size in pixels - */ - controllerSize: PropTypes.arrayOf(PropTypes.number), - - /** - * Use opacity range to rescale color map - */ - rescaleColorMap: PropTypes.bool, - - /** - * Data range use for the colorMap - */ - colorDataRange: PropTypes.oneOfType([ - PropTypes.arrayOf(PropTypes.number), - PropTypes.string, - ]), -}; diff --git a/src/representations/index.js b/src/representations/index.js deleted file mode 100644 index 484c9a7..0000000 --- a/src/representations/index.js +++ /dev/null @@ -1,10 +0,0 @@ -import vtkPointCloudRepresentation from './PointCloudRepresentation'; -import vtkVolumeDataRepresentation from './VolumeDataRepresentation'; - -export const PointCloudRepresentation = vtkPointCloudRepresentation; -export const VolumeDataRepresentation = vtkVolumeDataRepresentation; - -export default { - PointCloudRepresentation: vtkPointCloudRepresentation, - VolumeDataRepresentation: vtkVolumeDataRepresentation, -}; diff --git a/src/utils.js b/src/utils.js deleted file mode 100644 index d1a51ba..0000000 --- a/src/utils.js +++ /dev/null @@ -1,84 +0,0 @@ -import Base64 from '@kitware/vtk.js/Common/Core/Base64.js'; - -const NUMPY_DTYPES = { - int32: Int32Array, - int16: Int16Array, - int8: Int8Array, - uint32: Uint32Array, - uint16: Uint16Array, - uint8: Uint8Array, - float32: Float32Array, - float64: Float64Array, -}; - -export function toTypedArray(values, TypedArray) { - if (!values) { - return null; - } - - if (Array.isArray(values)) { - return TypedArray.from(values); - } - - if (values.dtype) { - const { bvals, dtype } = values; - const arrayBuffer = Base64.toArrayBuffer(bvals); - return new NUMPY_DTYPES[dtype](arrayBuffer); - } - - return values; -} - -export function vec2Equals(v1, v2) { - if (!v1 || v1.length !== 2 || !v2 || v2.length !== 2) { - return false; - } - return v1[0] === v2[0] && v1[1] === v2[1]; -} - -// assumes two not null objects -function objSubsetEquals(a, b) { - for (const k in a) { - if (!(k in b) || a[k] !== b[k]) { - return false; - } - } - return true; -} - -// assumes two array-like objects -export function arrayEquals(a, b) { - if (a.length !== b.length) { - return false; - } - for (let i = 0; i < a.length; i++) { - if (a[i] !== b[i]) { - return false; - } - } - return true; -} - -// array-like: Arrays or TypedArrays -export function isArrayLike(a) { - return ( - Array.isArray(a) || (ArrayBuffer.isView(a) && !(a instanceof DataView)) - ); -} - -// performs shallow equality checks for arrays and objects. -// regular equality check otherwise. -export function smartEqualsShallow(a, b) { - if (typeof a !== typeof b) { - return false; - } - // handle arrays - if (isArrayLike(a) && isArrayLike(b)) { - return arrayEquals(a, b); - } - // handle objects - if (typeof a === 'object' && a && b) { - return objSubsetEquals(a, b) && objSubsetEquals(b, a); - } - return a === b; -} From 2df6b7580d44dab9de840bbb8f6ddb6af9727d20 Mon Sep 17 00:00:00 2001 From: Forrest Date: Fri, 20 Jan 2023 11:50:50 -0500 Subject: [PATCH 035/110] style(View): clarify SingleView and ParentedView --- src/core-ts/View.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/core-ts/View.tsx b/src/core-ts/View.tsx index ab0c3de..bc0424f 100644 --- a/src/core-ts/View.tsx +++ b/src/core-ts/View.tsx @@ -66,6 +66,9 @@ interface Props // showOrientationAxes?: boolean; } +/** + * A standalone View (not within a MultiViewRoot). + */ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { // view API just exposes the render window + renderer const openGLRenderWindowRef = useRef(null); @@ -120,6 +123,9 @@ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { ); }); +/** + * A View that is within a MultiViewRoot. + */ const ParentedView = forwardRef(function ParentedView(props: Props, fwdRef) { const containerRef = useRef(null); const rendererRef = useRef(null); From ee76d855b5ca63d751f3b6df458a67a29abf52d4 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 13:32:23 -0500 Subject: [PATCH 036/110] feat(View): move interactor style up to View The View component controls the interactor style, as that's the primary component for working with multiple views. Other changes: - Fixes the interactor style being deleted before it gets removed from the interactor. --- src/core-ts/RenderWindow.tsx | 67 ++---------------- src/core-ts/View.tsx | 84 +++++++++++++++++++++-- src/core-ts/modules/useInteractor.ts | 2 +- src/core-ts/modules/useInteractorStyle.ts | 20 ++++-- src/types.ts | 6 +- 5 files changed, 97 insertions(+), 82 deletions(-) diff --git a/src/core-ts/RenderWindow.tsx b/src/core-ts/RenderWindow.tsx index 3928f10..6484808 100644 --- a/src/core-ts/RenderWindow.tsx +++ b/src/core-ts/RenderWindow.tsx @@ -17,62 +17,10 @@ import useResizeObserver from '../utils-ts/useResizeObserver'; import useUnmount from '../utils-ts/useUnmount'; import { OpenGLRenderWindowContext, RenderWindowContext } from './contexts'; import useInteractor from './modules/useInteractor'; -import { - ManipulatorSettings, - useInteractorStyle, - useInteractorStyleManipulatorSettings, -} from './modules/useInteractorStyle'; - -export interface Props extends PropsWithChildren { - /** - * Configure the interactions - */ - interactorSettings?: ManipulatorSettings[]; -} - -const DefaultProps = { - interactorSettings: [ - { - button: 1, - action: 'Rotate', - }, - { - button: 2, - action: 'Pan', - }, - { - button: 3, - action: 'Zoom', - scrollEnabled: true, - }, - { - button: 1, - action: 'Pan', - alt: true, - }, - { - button: 1, - action: 'Zoom', - control: true, - }, - { - button: 1, - action: 'Select', - shift: true, - }, - { - button: 1, - action: 'Roll', - alt: true, - shift: true, - }, - ] as ManipulatorSettings[], -}; - -// TODO Wrap in OpenGLRenderWindow by default -export default forwardRef(function RenderWindow(props: Props, fwdRef) { - const { interactorSettings = DefaultProps.interactorSettings } = props; +export type Props = PropsWithChildren; + +export default forwardRef(function RenderWindow(props: Props, fwdRef) { const openGLRenderWindow = useContext(OpenGLRenderWindowContext); if (!openGLRenderWindow) throw new Error('No OpenGL Render Window!'); @@ -110,11 +58,6 @@ export default forwardRef(function RenderWindow(props: Props, fwdRef) { getRenderWindow().setInteractor(getInteractor()); }); - const [getInteractorStyle, setInteractorStyle] = - useInteractorStyle(getInteractor); - - useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); - // --- rendering --- // const [renderRequested, setRenderRequested] = useState(false); @@ -153,11 +96,9 @@ export default forwardRef(function RenderWindow(props: Props, fwdRef) { () => ({ get: getRenderWindow, getInteractor, - getInteractorStyle, - setInteractorStyle, requestRender: queueRender, }), - [getRenderWindow, getInteractor, getInteractorStyle, setInteractorStyle] + [getRenderWindow, getInteractor] ); useImperativeHandle(fwdRef, () => api); diff --git a/src/core-ts/View.tsx b/src/core-ts/View.tsx index bc0424f..25640d1 100644 --- a/src/core-ts/View.tsx +++ b/src/core-ts/View.tsx @@ -1,3 +1,4 @@ +import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; import { FixedVTKRenderWindowInteractor } from '@kitware/vtk.js/type-patches'; import { Bounds } from '@kitware/vtk.js/types'; import { @@ -21,6 +22,11 @@ import { OpenGLRenderWindowContext, RenderWindowContext, } from './contexts'; +import { + ManipulatorSettings, + useInteractorStyle, + useInteractorStyleManipulatorSettings, +} from './modules/useInteractorStyle'; import OpenGLRenderWindow, { Props as OpenGLRenderWindowProps, } from './OpenGLRenderWindow'; @@ -64,8 +70,51 @@ interface Props * Show/Hide orientation axes. */ // showOrientationAxes?: boolean; + /** + * Configure the interactions + */ + interactorSettings?: ManipulatorSettings[]; } +const DefaultProps = { + interactorSettings: [ + { + button: 1, + action: 'Rotate', + }, + { + button: 2, + action: 'Pan', + }, + { + button: 3, + action: 'Zoom', + scrollEnabled: true, + }, + { + button: 1, + action: 'Pan', + alt: true, + }, + { + button: 1, + action: 'Zoom', + control: true, + }, + { + button: 1, + action: 'Select', + shift: true, + }, + { + button: 1, + action: 'Roll', + alt: true, + shift: true, + }, + ] as ManipulatorSettings[], +}; + /** * A standalone View (not within a MultiViewRoot). */ @@ -75,7 +124,6 @@ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { const renderWindowRef = useRef(null); const rendererRef = useRef(null); - const renderWindowProps = pick(props, 'interactorSettings'); const rendererProps = pick( props, 'background', @@ -87,24 +135,38 @@ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { const openGLRenderWindowProps = omit( props, - ...([ - ...Object.keys(renderWindowProps), - ...Object.keys(rendererProps), - ] as (keyof Props)[]) + ...([...Object.keys(rendererProps)] as (keyof Props)[]) ); + // --- interactor style --- // + + const getInteractor = useCallback( + () => renderWindowRef.current?.getInteractor() ?? null, + [] + ); + + const [getInteractorStyle, setInteractorStyle] = + useInteractorStyle(getInteractor); + + const { interactorSettings = DefaultProps.interactorSettings } = props; + useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); + + // --- api --- // + const api = useMemo( () => ({ isInMultiViewRoot: () => false, getOpenGLRenderWindow: () => openGLRenderWindowRef.current, getRenderWindow: () => renderWindowRef.current, getRenderer: () => rendererRef.current, + getInteractorStyle: () => getInteractorStyle(), + setInteractorStyle: (style) => setInteractorStyle(style), requestRender: () => rendererRef.current?.requestRender(), getCamera: () => rendererRef.current?.get().getActiveCamera() ?? null, resetCamera: (boundsToUse?: Bounds) => rendererRef.current?.resetCamera(boundsToUse), }), - [] + [getInteractorStyle, setInteractorStyle] ); useImperativeHandle(fwdRef, () => api); @@ -114,7 +176,7 @@ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { {...openGLRenderWindowProps} ref={openGLRenderWindowRef} > - + {props.children} @@ -225,6 +287,12 @@ const ParentedView = forwardRef(function ParentedView(props: Props, fwdRef) { getOpenGLRenderWindow: () => openGLRenderWindowAPI, getRenderWindow: () => renderWindowAPI, getRenderer: () => rendererRef.current, + // TODO + getInteractorStyle: () => ({} as unknown as vtkInteractorStyle), + // TODO + setInteractorStyle: (style) => { + console.log(style); + }, requestRender: () => rendererRef.current?.requestRender(), getCamera: () => rendererRef.current?.get().getActiveCamera() ?? null, resetCamera: (boundsToUse?: Bounds) => @@ -271,6 +339,8 @@ export default forwardRef(function View(props: Props, fwdRef) { getOpenGLRenderWindow: () => getView()?.getOpenGLRenderWindow() ?? null, getRenderWindow: () => getView()?.getRenderWindow() ?? null, getRenderer: () => getView()?.getRenderer() ?? null, + getInteractorStyle: () => getView()?.getInteractorStyle() ?? null, + setInteractorStyle: (style) => getView()?.setInteractorStyle(style), requestRender: () => getView()?.requestRender(), getCamera: () => getView()?.getCamera() ?? null, resetCamera: (boundsToUse?: Bounds) => diff --git a/src/core-ts/modules/useInteractor.ts b/src/core-ts/modules/useInteractor.ts index c7660aa..5d58632 100644 --- a/src/core-ts/modules/useInteractor.ts +++ b/src/core-ts/modules/useInteractor.ts @@ -1,9 +1,9 @@ import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; import { useEffect } from 'react'; +import { IOpenGLRenderWindow } from '../../types'; import deletionRegistry from '../../utils-ts/DeletionRegistry'; import useGetterRef from '../../utils-ts/useGetterRef'; import useUnmount from '../../utils-ts/useUnmount'; -import { IOpenGLRenderWindow } from '../OpenGLRenderWindow'; export default function useInteractor(openglRenderWindow: IOpenGLRenderWindow) { const [interactorRef, getInteractor] = useGetterRef(() => { diff --git a/src/core-ts/modules/useInteractorStyle.ts b/src/core-ts/modules/useInteractorStyle.ts index 0bb3e82..2cd7c4e 100644 --- a/src/core-ts/modules/useInteractorStyle.ts +++ b/src/core-ts/modules/useInteractorStyle.ts @@ -23,7 +23,6 @@ import vtkMouseCameraTrackballZoomToMouseManipulator, { import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; import vtkInteractorStyleManipulator from '@kitware/vtk.js/Interaction/Style/InteractorStyleManipulator'; import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; -import { Nullable } from '@kitware/vtk.js/types'; import deepEqual from 'deep-equal'; import { useCallback, useEffect, useState } from 'react'; import deletionRegistry from '../../utils-ts/DeletionRegistry'; @@ -116,10 +115,11 @@ export function useInteractorStyleManipulatorSettings( } export function useInteractorStyle( - getInteractor: () => vtkRenderWindowInteractor + getInteractor: () => vtkRenderWindowInteractor | null ) { - const [externalStyle, setExternalStyle] = - useState>(null); + const [externalStyle, setExternalStyle] = useState( + null + ); const [styleRef, getStyle] = useGetterRef(() => { setExternalStyle(null); @@ -130,16 +130,22 @@ export function useInteractorStyle( useEffect(() => { const interactor = getInteractor(); - const style = getStyle(); - deletionRegistry.incRefCount(interactor); + if (!interactor) return; + + const style = externalStyle ?? getStyle(); interactor.setInteractorStyle(style); + + deletionRegistry.incRefCount(interactor); + deletionRegistry.incRefCount(style); + return () => { if (interactor.getInteractorStyle() === style) { interactor.setInteractorStyle(null); } deletionRegistry.decRefCount(interactor); + deletionRegistry.incRefCount(style); }; - }, [getInteractor, getStyle]); + }); useUnmount(() => { if (styleRef.current && !externalStyle) { diff --git a/src/types.ts b/src/types.ts index 3089167..be5ae09 100644 --- a/src/types.ts +++ b/src/types.ts @@ -43,8 +43,6 @@ export interface IOpenGLRenderWindow { export interface IRenderWindow { get(): vtkRenderWindow; getInteractor(): vtkRenderWindowInteractor; - getInteractorStyle(): vtkInteractorStyle; - setInteractorStyle(style: vtkInteractorStyle): void; requestRender(): void; } @@ -61,8 +59,8 @@ export interface IView { getOpenGLRenderWindow(): IOpenGLRenderWindow | null; // getAPISpecificRenderWindow(): vtkOpenGLRenderWindow; // getInteractor(): vtkRenderWindowInteractor; - // getInteractorStyle(): vtkInteractorStyle; - // setInteractorStyle(style: vtkInteractorStyle): void; + getInteractorStyle(): vtkInteractorStyle | null; + setInteractorStyle(style: vtkInteractorStyle): void; requestRender(): void; getCamera(): vtkCamera | null; resetCamera(boundsToUse?: Bounds): void; From 9735f163b830dd8a955dab3bdf8d26ed95a8fa03 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 13:59:29 -0500 Subject: [PATCH 037/110] feat(View): View handles center of rotation Since the View now handles the interactor style, it should also handle the autoCenterOfRotation flag. --- src/core-ts/Renderer.tsx | 22 ++--------- src/core-ts/View.tsx | 22 ++++++++++- .../modules/useApplyCenterOfRotation.ts | 39 +++++++++++++++++++ src/global.d.ts | 13 +++++++ 4 files changed, 75 insertions(+), 21 deletions(-) create mode 100644 src/core-ts/modules/useApplyCenterOfRotation.ts diff --git a/src/core-ts/Renderer.tsx b/src/core-ts/Renderer.tsx index 0067e8d..5bf3353 100644 --- a/src/core-ts/Renderer.tsx +++ b/src/core-ts/Renderer.tsx @@ -1,4 +1,3 @@ -import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; import { ICameraInitialValues } from '@kitware/vtk.js/Rendering/Core/Camera'; import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; import { Bounds, Vector3, Vector4 } from '@kitware/vtk.js/types'; @@ -47,20 +46,12 @@ export interface Props extends PropsWithChildren { * still occur upon component mount. */ autoResetCamera?: boolean; - - /** - * Whether to automatically re-set the interactor style's center of rotation. (default: true) - * - * This is a convenience property for interactor styles that support setCenterOfRotation(). - */ - autoCenterOfRotation?: boolean; } export const DefaultProps = { background: [0.2, 0.3, 0.4] as Vector3, interactive: true, autoResetCamera: true, - autoCenterOfRotation: true, }; export default forwardRef(function Renderer(props: Props, fwdRef) { @@ -102,22 +93,15 @@ export default forwardRef(function Renderer(props: Props, fwdRef) { const { camera: cameraProps, autoResetCamera = DefaultProps.autoResetCamera, - autoCenterOfRotation = DefaultProps.autoCenterOfRotation, } = props; - const getCamera = useCamera(getRenderer, cameraProps, trackModified); + + useCamera(getRenderer, cameraProps, trackModified); const resetCamera = useCallback( (boundsToUse?: Bounds) => { - const interactorStyle = renderWindow.getInteractorStyle(); getRenderer().resetCamera(boundsToUse); - if (autoCenterOfRotation && 'setCenterOfRotation' in interactorStyle) { - const style = interactorStyle as vtkInteractorStyle & { - setCenterOfRotation(center: Vector3): boolean; - }; - style.setCenterOfRotation(getCamera().getFocalPoint()); - } }, - [autoCenterOfRotation, renderWindow, getRenderer, getCamera] + [getRenderer] ); // --- cleanup --- // diff --git a/src/core-ts/View.tsx b/src/core-ts/View.tsx index 25640d1..ec0c074 100644 --- a/src/core-ts/View.tsx +++ b/src/core-ts/View.tsx @@ -22,6 +22,7 @@ import { OpenGLRenderWindowContext, RenderWindowContext, } from './contexts'; +import useApplyCenterOfRotation from './modules/useApplyCenterOfRotation'; import { ManipulatorSettings, useInteractorStyle, @@ -70,10 +71,18 @@ interface Props * Show/Hide orientation axes. */ // showOrientationAxes?: boolean; + /** * Configure the interactions */ interactorSettings?: ManipulatorSettings[]; + + /** + * Whether to automatically re-set the interactor style's center of rotation. (default: true) + * + * This is a convenience property for interactor styles that support setCenterOfRotation(). + */ + autoCenterOfRotation?: boolean; } const DefaultProps = { @@ -113,6 +122,7 @@ const DefaultProps = { shift: true, }, ] as ManipulatorSettings[], + autoCenterOfRotation: true, }; /** @@ -129,8 +139,7 @@ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { 'background', 'interactive', 'camera', - 'autoResetCamera', - 'autoCenterOfRotation' + 'autoResetCamera' ); const openGLRenderWindowProps = omit( @@ -151,6 +160,15 @@ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { const { interactorSettings = DefaultProps.interactorSettings } = props; useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); + // --- reset camera --- // + + const { autoCenterOfRotation = DefaultProps.autoCenterOfRotation } = props; + useApplyCenterOfRotation( + rendererRef, + getInteractorStyle, + autoCenterOfRotation + ); + // --- api --- // const api = useMemo( diff --git a/src/core-ts/modules/useApplyCenterOfRotation.ts b/src/core-ts/modules/useApplyCenterOfRotation.ts new file mode 100644 index 0000000..0e296c9 --- /dev/null +++ b/src/core-ts/modules/useApplyCenterOfRotation.ts @@ -0,0 +1,39 @@ +import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; +import { + FixedVTKRenderer, + VtkRendererEvent, +} from '@kitware/vtk.js/type-patches'; +import { Vector3 } from '@kitware/vtk.js/types'; +import { RefObject, useEffect } from 'react'; +import { IRenderer } from '../../types'; + +export default function useApplyCenterOfRotation( + rendererRef: RefObject, + getInteractorStyle: () => vtkInteractorStyle, + autoCenterOfRotation: boolean +) { + // This runs every react render, since I'm not sure what deps would + // trigger whenever the underlying renderer changes. + useEffect(() => { + const ren = rendererRef.current; + if (!ren) return; + + const sub = (ren.get() as FixedVTKRenderer).onEvent((ev) => { + const rendererEvent = ev as VtkRendererEvent; + if (rendererEvent.type === 'ResetCameraEvent') { + const style = getInteractorStyle() as vtkInteractorStyle & { + setCenterOfRotation?(center: Vector3): boolean; + }; + if (!autoCenterOfRotation || !style.setCenterOfRotation) { + return; + } + + const center = rendererEvent.renderer.getActiveCamera().getFocalPoint(); + style.setCenterOfRotation(center); + } + }); + return () => { + sub.unsubscribe(); + }; + }); +} diff --git a/src/global.d.ts b/src/global.d.ts index 501169f..1bde375 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -1,4 +1,5 @@ declare module '@kitware/vtk.js/type-patches' { + import { EventHandler, vtkSubscription } from '@kitware/vtk.js/interfaces'; import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; @@ -6,6 +7,18 @@ declare module '@kitware/vtk.js/type-patches' { extends vtkRenderWindowInteractor { setCurrentRenderer(ren: vtkRenderer): void; } + + export interface VtkRendererEvent { + type: + | 'ComputeVisiblePropBoundsEvent' + | 'ResetCameraClippingRangeEvent' + | 'ResetCameraEvent'; + renderer: vtkRenderer; + } + + export interface FixedVTKRenderer extends vtkRenderer { + onEvent(cb: EventHandler, priority?: number): Readonly; + } } declare module '@kitware/vtk.js/Rendering/Core/CubeAxesActor' { From af7462a5f14ae58b762854bff27cf278d3df2d6e Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 14:25:37 -0500 Subject: [PATCH 038/110] feat(ParentedView): handle custom interactor style --- src/core-ts/View.tsx | 57 +++++++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/src/core-ts/View.tsx b/src/core-ts/View.tsx index ec0c074..18e16a7 100644 --- a/src/core-ts/View.tsx +++ b/src/core-ts/View.tsx @@ -1,4 +1,3 @@ -import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; import { FixedVTKRenderWindowInteractor } from '@kitware/vtk.js/type-patches'; import { Bounds } from '@kitware/vtk.js/types'; import { @@ -157,12 +156,12 @@ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { const [getInteractorStyle, setInteractorStyle] = useInteractorStyle(getInteractor); - const { interactorSettings = DefaultProps.interactorSettings } = props; + const { + interactorSettings = DefaultProps.interactorSettings, + autoCenterOfRotation = DefaultProps.autoCenterOfRotation, + } = props; useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); - // --- reset camera --- // - - const { autoCenterOfRotation = DefaultProps.autoCenterOfRotation } = props; useApplyCenterOfRotation( rendererRef, getInteractorStyle, @@ -215,8 +214,7 @@ const ParentedView = forwardRef(function ParentedView(props: Props, fwdRef) { 'background', 'interactive', 'camera', - 'autoResetCamera', - 'autoCenterOfRotation' + 'autoResetCamera' ); const openGLRenderWindowAPI = useContext(OpenGLRenderWindowContext); @@ -229,16 +227,42 @@ const ParentedView = forwardRef(function ParentedView(props: Props, fwdRef) { throw new Error('RenderWindow is missing inside the MultiViewRoot'); } - // --- interactor binding --- // + // --- interactor & style binding --- // + + const getInteractor = useCallback( + () => renderWindowAPI.getInteractor(), + [renderWindowAPI] + ); + const [getInteractorStyle, setInteractorStyle] = + useInteractorStyle(getInteractor); + + const { + interactorSettings = DefaultProps.interactorSettings, + autoCenterOfRotation = DefaultProps.autoCenterOfRotation, + } = props; + useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); + + useApplyCenterOfRotation( + rendererRef, + getInteractorStyle, + autoCenterOfRotation + ); + + /** + * 1. Switch to targeted renderer. + * 2. Switch to this View's interactor style. + */ useEventListener(containerRef, 'pointerenter', (ev: PointerEvent) => { const rendererAPI = rendererRef.current; if (!rendererAPI) return; - const interactor = renderWindowAPI.getInteractor(); + const interactor = getInteractor(); + (interactor as FixedVTKRenderWindowInteractor).setCurrentRenderer( rendererAPI.get() ); + interactor.setInteractorStyle(getInteractorStyle()); const oldContainer = interactor.getContainer(); const newContainer = containerRef.current; @@ -305,18 +329,19 @@ const ParentedView = forwardRef(function ParentedView(props: Props, fwdRef) { getOpenGLRenderWindow: () => openGLRenderWindowAPI, getRenderWindow: () => renderWindowAPI, getRenderer: () => rendererRef.current, - // TODO - getInteractorStyle: () => ({} as unknown as vtkInteractorStyle), - // TODO - setInteractorStyle: (style) => { - console.log(style); - }, + getInteractorStyle: () => getInteractorStyle(), + setInteractorStyle: (style) => setInteractorStyle(style), requestRender: () => rendererRef.current?.requestRender(), getCamera: () => rendererRef.current?.get().getActiveCamera() ?? null, resetCamera: (boundsToUse?: Bounds) => rendererRef.current?.resetCamera(boundsToUse), }), - [openGLRenderWindowAPI, renderWindowAPI] + [ + openGLRenderWindowAPI, + renderWindowAPI, + getInteractorStyle, + setInteractorStyle, + ] ); useImperativeHandle(fwdRef, () => api); From fb15fa0d245c5e0e4d85e96de907fd21540503b5 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 14:38:19 -0500 Subject: [PATCH 039/110] refactor(View): split out Parented and Single View --- src/core-ts/View.tsx | 366 +------------------------- src/core-ts/internal/ParentedView.tsx | 193 ++++++++++++++ src/core-ts/internal/SingleView.tsx | 104 ++++++++ src/core-ts/internal/view-shared.ts | 96 +++++++ 4 files changed, 398 insertions(+), 361 deletions(-) create mode 100644 src/core-ts/internal/ParentedView.tsx create mode 100644 src/core-ts/internal/SingleView.tsx create mode 100644 src/core-ts/internal/view-shared.ts diff --git a/src/core-ts/View.tsx b/src/core-ts/View.tsx index 18e16a7..89413c0 100644 --- a/src/core-ts/View.tsx +++ b/src/core-ts/View.tsx @@ -1,372 +1,16 @@ -import { FixedVTKRenderWindowInteractor } from '@kitware/vtk.js/type-patches'; import { Bounds } from '@kitware/vtk.js/types'; import { - CSSProperties, forwardRef, - PropsWithChildren, - useCallback, useContext, - useEffect, useImperativeHandle, useMemo, useRef, } from 'react'; -import { IOpenGLRenderWindow, IRenderer, IRenderWindow, IView } from '../types'; -import { omit, pick } from '../utils-ts'; -import { ResizeWatcherContext } from '../utils-ts/ResizeWatcher'; -import { useEventListener } from '../utils-ts/useEventListener'; -import useMount from '../utils-ts/useMount'; -import { - MultiViewRootContext, - OpenGLRenderWindowContext, - RenderWindowContext, -} from './contexts'; -import useApplyCenterOfRotation from './modules/useApplyCenterOfRotation'; -import { - ManipulatorSettings, - useInteractorStyle, - useInteractorStyleManipulatorSettings, -} from './modules/useInteractorStyle'; -import OpenGLRenderWindow, { - Props as OpenGLRenderWindowProps, -} from './OpenGLRenderWindow'; -import Renderer, { Props as RendererProps } from './Renderer'; -import RenderWindow, { Props as RenderWindowProps } from './RenderWindow'; - -interface Props - extends PropsWithChildren, - OpenGLRenderWindowProps, - RenderWindowProps, - RendererProps { - /** - * List of picking listeners to bind. By default it is disabled (empty array). - */ - // pickingModes?: 'click' | 'hover' | 'select' | 'mouseDown' | 'mouseUp'; - /** - * User callback function for click - */ - // onClick?: () => void; - /** - * User callback function for mouse down - */ - // onMouseDown?: () => void; - /** - * User callback function for mouse up - */ - // onMouseUp?: () => void; - /** - * User callback function for hover - */ - // onHover?: () => void; - /** - * User callback function for box select - */ - // onSelect?: () => void; - /** - * Defines the tolerance of the click and hover selection. - */ - // pointerSize?: number; - /** - * Show/Hide orientation axes. - */ - // showOrientationAxes?: boolean; - - /** - * Configure the interactions - */ - interactorSettings?: ManipulatorSettings[]; - - /** - * Whether to automatically re-set the interactor style's center of rotation. (default: true) - * - * This is a convenience property for interactor styles that support setCenterOfRotation(). - */ - autoCenterOfRotation?: boolean; -} - -const DefaultProps = { - interactorSettings: [ - { - button: 1, - action: 'Rotate', - }, - { - button: 2, - action: 'Pan', - }, - { - button: 3, - action: 'Zoom', - scrollEnabled: true, - }, - { - button: 1, - action: 'Pan', - alt: true, - }, - { - button: 1, - action: 'Zoom', - control: true, - }, - { - button: 1, - action: 'Select', - shift: true, - }, - { - button: 1, - action: 'Roll', - alt: true, - shift: true, - }, - ] as ManipulatorSettings[], - autoCenterOfRotation: true, -}; - -/** - * A standalone View (not within a MultiViewRoot). - */ -const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { - // view API just exposes the render window + renderer - const openGLRenderWindowRef = useRef(null); - const renderWindowRef = useRef(null); - const rendererRef = useRef(null); - - const rendererProps = pick( - props, - 'background', - 'interactive', - 'camera', - 'autoResetCamera' - ); - - const openGLRenderWindowProps = omit( - props, - ...([...Object.keys(rendererProps)] as (keyof Props)[]) - ); - - // --- interactor style --- // - - const getInteractor = useCallback( - () => renderWindowRef.current?.getInteractor() ?? null, - [] - ); - - const [getInteractorStyle, setInteractorStyle] = - useInteractorStyle(getInteractor); - - const { - interactorSettings = DefaultProps.interactorSettings, - autoCenterOfRotation = DefaultProps.autoCenterOfRotation, - } = props; - useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); - - useApplyCenterOfRotation( - rendererRef, - getInteractorStyle, - autoCenterOfRotation - ); - - // --- api --- // - - const api = useMemo( - () => ({ - isInMultiViewRoot: () => false, - getOpenGLRenderWindow: () => openGLRenderWindowRef.current, - getRenderWindow: () => renderWindowRef.current, - getRenderer: () => rendererRef.current, - getInteractorStyle: () => getInteractorStyle(), - setInteractorStyle: (style) => setInteractorStyle(style), - requestRender: () => rendererRef.current?.requestRender(), - getCamera: () => rendererRef.current?.get().getActiveCamera() ?? null, - resetCamera: (boundsToUse?: Bounds) => - rendererRef.current?.resetCamera(boundsToUse), - }), - [getInteractorStyle, setInteractorStyle] - ); - - useImperativeHandle(fwdRef, () => api); - - return ( - - - - {props.children} - - - - ); -}); - -/** - * A View that is within a MultiViewRoot. - */ -const ParentedView = forwardRef(function ParentedView(props: Props, fwdRef) { - const containerRef = useRef(null); - const rendererRef = useRef(null); - - const rendererProps = pick( - props, - 'background', - 'interactive', - 'camera', - 'autoResetCamera' - ); - - const openGLRenderWindowAPI = useContext(OpenGLRenderWindowContext); - if (!openGLRenderWindowAPI) { - throw new Error('OpenGLRenderWindow is missing inside the MultiViewRoot'); - } - - const renderWindowAPI = useContext(RenderWindowContext); - if (!renderWindowAPI) { - throw new Error('RenderWindow is missing inside the MultiViewRoot'); - } - - // --- interactor & style binding --- // - - const getInteractor = useCallback( - () => renderWindowAPI.getInteractor(), - [renderWindowAPI] - ); - - const [getInteractorStyle, setInteractorStyle] = - useInteractorStyle(getInteractor); - - const { - interactorSettings = DefaultProps.interactorSettings, - autoCenterOfRotation = DefaultProps.autoCenterOfRotation, - } = props; - useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); - - useApplyCenterOfRotation( - rendererRef, - getInteractorStyle, - autoCenterOfRotation - ); - - /** - * 1. Switch to targeted renderer. - * 2. Switch to this View's interactor style. - */ - useEventListener(containerRef, 'pointerenter', (ev: PointerEvent) => { - const rendererAPI = rendererRef.current; - if (!rendererAPI) return; - - const interactor = getInteractor(); - - (interactor as FixedVTKRenderWindowInteractor).setCurrentRenderer( - rendererAPI.get() - ); - interactor.setInteractorStyle(getInteractorStyle()); - - const oldContainer = interactor.getContainer(); - const newContainer = containerRef.current; - if (oldContainer !== newContainer) { - if (oldContainer) { - interactor.unbindEvents(); - } - if (newContainer) { - interactor.bindEvents(newContainer); - } - - // forward event to interactor - interactor.handlePointerEnter(ev); - } - }); - - // --- resize handling --- // - - const resizeWatcher = useContext(ResizeWatcherContext); - - const onResize = useCallback(() => { - const renderer = rendererRef.current; - const viewContainer = openGLRenderWindowAPI.getContainer(); - const rendererContainer = containerRef.current; - - if (!renderer || !viewContainer || !rendererContainer) return; - - const viewBox = viewContainer.getBoundingClientRect(); - const rendererBox = rendererContainer.getBoundingClientRect(); - - const top = rendererBox.top - viewBox.top; - const left = rendererBox.left - viewBox.left; - - const xmin = left / viewBox.width; - const xmax = (left + rendererBox.width) / viewBox.width; - const ymin = 1 - (top + rendererBox.height) / viewBox.height; - const ymax = 1 - top / viewBox.height; - - renderer.get().setViewport(xmin, ymin, xmax, ymax); - renderer.requestRender(); - }, [openGLRenderWindowAPI]); - - useMount(() => onResize()); - - useEffect(() => { - const rendererContainer = containerRef.current; - const renderer = rendererRef.current; - const viewContainer = openGLRenderWindowAPI.getContainer(); - if (resizeWatcher && rendererContainer && renderer && viewContainer) { - resizeWatcher.watch(rendererContainer, onResize); - resizeWatcher.watch(viewContainer, onResize); - return () => { - resizeWatcher.unwatch(rendererContainer, onResize); - resizeWatcher.unwatch(viewContainer, onResize); - }; - } - }, [onResize, openGLRenderWindowAPI, resizeWatcher]); - - // --- api --- // - - const api = useMemo( - () => ({ - isInMultiViewRoot: () => true, - getOpenGLRenderWindow: () => openGLRenderWindowAPI, - getRenderWindow: () => renderWindowAPI, - getRenderer: () => rendererRef.current, - getInteractorStyle: () => getInteractorStyle(), - setInteractorStyle: (style) => setInteractorStyle(style), - requestRender: () => rendererRef.current?.requestRender(), - getCamera: () => rendererRef.current?.get().getActiveCamera() ?? null, - resetCamera: (boundsToUse?: Bounds) => - rendererRef.current?.resetCamera(boundsToUse), - }), - [ - openGLRenderWindowAPI, - renderWindowAPI, - getInteractorStyle, - setInteractorStyle, - ] - ); - - useImperativeHandle(fwdRef, () => api); - - const style = useMemo( - () => ({ - position: 'relative', - width: '100%', - height: '100%', - overflow: 'hidden', - touchAction: 'none', - userSelect: 'none', - WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)', - }), - [] - ); - - return ( -
- - {props.children} - -
- ); -}); +import { IView } from '../types'; +import { MultiViewRootContext } from './contexts'; +import ParentedView from './internal/ParentedView'; +import SingleView from './internal/SingleView'; +import { Props } from './internal/view-shared'; export default forwardRef(function View(props: Props, fwdRef) { const singleViewRef = useRef(null); diff --git a/src/core-ts/internal/ParentedView.tsx b/src/core-ts/internal/ParentedView.tsx new file mode 100644 index 0000000..11c1b42 --- /dev/null +++ b/src/core-ts/internal/ParentedView.tsx @@ -0,0 +1,193 @@ +import { FixedVTKRenderWindowInteractor } from '@kitware/vtk.js/type-patches'; +import { Bounds } from '@kitware/vtk.js/types'; +import { + CSSProperties, + forwardRef, + useCallback, + useContext, + useEffect, + useImperativeHandle, + useMemo, + useRef, +} from 'react'; +import { IRenderer, IView } from '../../types'; +import { pick } from '../../utils-ts'; +import { ResizeWatcherContext } from '../../utils-ts/ResizeWatcher'; +import { useEventListener } from '../../utils-ts/useEventListener'; +import useMount from '../../utils-ts/useMount'; +import { OpenGLRenderWindowContext, RenderWindowContext } from '../contexts'; +import useApplyCenterOfRotation from '../modules/useApplyCenterOfRotation'; +import { + useInteractorStyle, + useInteractorStyleManipulatorSettings, +} from '../modules/useInteractorStyle'; +import Renderer from '../Renderer'; +import { DefaultProps, Props } from './view-shared'; + +/** + * A View that is within a MultiViewRoot. + */ +const ParentedView = forwardRef(function ParentedView(props: Props, fwdRef) { + const containerRef = useRef(null); + const rendererRef = useRef(null); + + const rendererProps = pick( + props, + 'background', + 'interactive', + 'camera', + 'autoResetCamera' + ); + + const openGLRenderWindowAPI = useContext(OpenGLRenderWindowContext); + if (!openGLRenderWindowAPI) { + throw new Error('OpenGLRenderWindow is missing inside the MultiViewRoot'); + } + + const renderWindowAPI = useContext(RenderWindowContext); + if (!renderWindowAPI) { + throw new Error('RenderWindow is missing inside the MultiViewRoot'); + } + + // --- interactor & style binding --- // + + const getInteractor = useCallback( + () => renderWindowAPI.getInteractor(), + [renderWindowAPI] + ); + + const [getInteractorStyle, setInteractorStyle] = + useInteractorStyle(getInteractor); + + const { + interactorSettings = DefaultProps.interactorSettings, + autoCenterOfRotation = DefaultProps.autoCenterOfRotation, + } = props; + useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); + + useApplyCenterOfRotation( + rendererRef, + getInteractorStyle, + autoCenterOfRotation + ); + + /** + * 1. Switch to targeted renderer. + * 2. Switch to this View's interactor style. + */ + useEventListener(containerRef, 'pointerenter', (ev: PointerEvent) => { + const rendererAPI = rendererRef.current; + if (!rendererAPI) return; + + const interactor = getInteractor(); + + (interactor as FixedVTKRenderWindowInteractor).setCurrentRenderer( + rendererAPI.get() + ); + interactor.setInteractorStyle(getInteractorStyle()); + + const oldContainer = interactor.getContainer(); + const newContainer = containerRef.current; + if (oldContainer !== newContainer) { + if (oldContainer) { + interactor.unbindEvents(); + } + if (newContainer) { + interactor.bindEvents(newContainer); + } + + // forward event to interactor + interactor.handlePointerEnter(ev); + } + }); + + // --- resize handling --- // + + const resizeWatcher = useContext(ResizeWatcherContext); + + const onResize = useCallback(() => { + const renderer = rendererRef.current; + const viewContainer = openGLRenderWindowAPI.getContainer(); + const rendererContainer = containerRef.current; + + if (!renderer || !viewContainer || !rendererContainer) return; + + const viewBox = viewContainer.getBoundingClientRect(); + const rendererBox = rendererContainer.getBoundingClientRect(); + + const top = rendererBox.top - viewBox.top; + const left = rendererBox.left - viewBox.left; + + const xmin = left / viewBox.width; + const xmax = (left + rendererBox.width) / viewBox.width; + const ymin = 1 - (top + rendererBox.height) / viewBox.height; + const ymax = 1 - top / viewBox.height; + + renderer.get().setViewport(xmin, ymin, xmax, ymax); + renderer.requestRender(); + }, [openGLRenderWindowAPI]); + + useMount(() => onResize()); + + useEffect(() => { + const rendererContainer = containerRef.current; + const renderer = rendererRef.current; + const viewContainer = openGLRenderWindowAPI.getContainer(); + if (resizeWatcher && rendererContainer && renderer && viewContainer) { + resizeWatcher.watch(rendererContainer, onResize); + resizeWatcher.watch(viewContainer, onResize); + return () => { + resizeWatcher.unwatch(rendererContainer, onResize); + resizeWatcher.unwatch(viewContainer, onResize); + }; + } + }, [onResize, openGLRenderWindowAPI, resizeWatcher]); + + // --- api --- // + + const api = useMemo( + () => ({ + isInMultiViewRoot: () => true, + getOpenGLRenderWindow: () => openGLRenderWindowAPI, + getRenderWindow: () => renderWindowAPI, + getRenderer: () => rendererRef.current, + getInteractorStyle: () => getInteractorStyle(), + setInteractorStyle: (style) => setInteractorStyle(style), + requestRender: () => rendererRef.current?.requestRender(), + getCamera: () => rendererRef.current?.get().getActiveCamera() ?? null, + resetCamera: (boundsToUse?: Bounds) => + rendererRef.current?.resetCamera(boundsToUse), + }), + [ + openGLRenderWindowAPI, + renderWindowAPI, + getInteractorStyle, + setInteractorStyle, + ] + ); + + useImperativeHandle(fwdRef, () => api); + + const style = useMemo( + () => ({ + position: 'relative', + width: '100%', + height: '100%', + overflow: 'hidden', + touchAction: 'none', + userSelect: 'none', + WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)', + }), + [] + ); + + return ( +
+ + {props.children} + +
+ ); +}); + +export default ParentedView; diff --git a/src/core-ts/internal/SingleView.tsx b/src/core-ts/internal/SingleView.tsx new file mode 100644 index 0000000..9114c2f --- /dev/null +++ b/src/core-ts/internal/SingleView.tsx @@ -0,0 +1,104 @@ +import { Bounds } from '@kitware/vtk.js/types'; +import { + forwardRef, + useCallback, + useImperativeHandle, + useMemo, + useRef, +} from 'react'; +import { + IOpenGLRenderWindow, + IRenderer, + IRenderWindow, + IView, +} from '../../types'; +import { omit, pick } from '../../utils-ts'; +import useApplyCenterOfRotation from '../modules/useApplyCenterOfRotation'; +import { + useInteractorStyle, + useInteractorStyleManipulatorSettings, +} from '../modules/useInteractorStyle'; +import OpenGLRenderWindow from '../OpenGLRenderWindow'; +import Renderer from '../Renderer'; +import RenderWindow from '../RenderWindow'; +import { DefaultProps, Props } from './view-shared'; + +/** + * A standalone View (not within a MultiViewRoot). + */ +const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { + // view API just exposes the render window + renderer + const openGLRenderWindowRef = useRef(null); + const renderWindowRef = useRef(null); + const rendererRef = useRef(null); + + const rendererProps = pick( + props, + 'background', + 'interactive', + 'camera', + 'autoResetCamera' + ); + + const openGLRenderWindowProps = omit( + props, + ...([...Object.keys(rendererProps)] as (keyof Props)[]) + ); + + // --- interactor style --- // + + const getInteractor = useCallback( + () => renderWindowRef.current?.getInteractor() ?? null, + [] + ); + + const [getInteractorStyle, setInteractorStyle] = + useInteractorStyle(getInteractor); + + const { + interactorSettings = DefaultProps.interactorSettings, + autoCenterOfRotation = DefaultProps.autoCenterOfRotation, + } = props; + useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); + + useApplyCenterOfRotation( + rendererRef, + getInteractorStyle, + autoCenterOfRotation + ); + + // --- api --- // + + const api = useMemo( + () => ({ + isInMultiViewRoot: () => false, + getOpenGLRenderWindow: () => openGLRenderWindowRef.current, + getRenderWindow: () => renderWindowRef.current, + getRenderer: () => rendererRef.current, + getInteractorStyle: () => getInteractorStyle(), + setInteractorStyle: (style) => setInteractorStyle(style), + requestRender: () => rendererRef.current?.requestRender(), + getCamera: () => rendererRef.current?.get().getActiveCamera() ?? null, + resetCamera: (boundsToUse?: Bounds) => + rendererRef.current?.resetCamera(boundsToUse), + }), + [getInteractorStyle, setInteractorStyle] + ); + + useImperativeHandle(fwdRef, () => api); + + return ( + + + + {props.children} + + + + ); +}); + +export default SingleView; diff --git a/src/core-ts/internal/view-shared.ts b/src/core-ts/internal/view-shared.ts new file mode 100644 index 0000000..3fc5533 --- /dev/null +++ b/src/core-ts/internal/view-shared.ts @@ -0,0 +1,96 @@ +import { PropsWithChildren } from 'react'; +import { ManipulatorSettings } from '../modules/useInteractorStyle'; +import { Props as OpenGLRenderWindowProps } from '../OpenGLRenderWindow'; +import { Props as RendererProps } from '../Renderer'; +import { Props as RenderWindowProps } from '../RenderWindow'; + +export interface Props + extends PropsWithChildren, + OpenGLRenderWindowProps, + RenderWindowProps, + RendererProps { + /** + * List of picking listeners to bind. By default it is disabled (empty array). + */ + // pickingModes?: 'click' | 'hover' | 'select' | 'mouseDown' | 'mouseUp'; + /** + * User callback function for click + */ + // onClick?: () => void; + /** + * User callback function for mouse down + */ + // onMouseDown?: () => void; + /** + * User callback function for mouse up + */ + // onMouseUp?: () => void; + /** + * User callback function for hover + */ + // onHover?: () => void; + /** + * User callback function for box select + */ + // onSelect?: () => void; + /** + * Defines the tolerance of the click and hover selection. + */ + // pointerSize?: number; + /** + * Show/Hide orientation axes. + */ + // showOrientationAxes?: boolean; + + /** + * Configure the interactions + */ + interactorSettings?: ManipulatorSettings[]; + + /** + * Whether to automatically re-set the interactor style's center of rotation. (default: true) + * + * This is a convenience property for interactor styles that support setCenterOfRotation(). + */ + autoCenterOfRotation?: boolean; +} + +export const DefaultProps = { + interactorSettings: [ + { + button: 1, + action: 'Rotate', + }, + { + button: 2, + action: 'Pan', + }, + { + button: 3, + action: 'Zoom', + scrollEnabled: true, + }, + { + button: 1, + action: 'Pan', + alt: true, + }, + { + button: 1, + action: 'Zoom', + control: true, + }, + { + button: 1, + action: 'Select', + shift: true, + }, + { + button: 1, + action: 'Roll', + alt: true, + shift: true, + }, + ] as ManipulatorSettings[], + autoCenterOfRotation: true, +}; From b5d9e8c2ddf796a4a959d7570ba445b1a90f643f Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 20:30:58 -0500 Subject: [PATCH 040/110] feat(View): expose container on API Pass the View API down to descendants. --- src/core-ts/View.tsx | 1 + src/core-ts/contexts.ts | 3 +++ src/core-ts/internal/ParentedView.tsx | 19 +++++++++++++------ src/core-ts/internal/SingleView.tsx | 25 +++++++++++++++---------- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/core-ts/View.tsx b/src/core-ts/View.tsx index 89413c0..4eabb37 100644 --- a/src/core-ts/View.tsx +++ b/src/core-ts/View.tsx @@ -23,6 +23,7 @@ export default forwardRef(function View(props: Props, fwdRef) { multiViewRoot ? parentedViewRef.current : singleViewRef.current; return { isInMultiViewRoot: () => multiViewRoot, + getViewContainer: () => getView()?.getViewContainer() ?? null, getOpenGLRenderWindow: () => getView()?.getOpenGLRenderWindow() ?? null, getRenderWindow: () => getView()?.getRenderWindow() ?? null, getRenderer: () => getView()?.getRenderer() ?? null, diff --git a/src/core-ts/contexts.ts b/src/core-ts/contexts.ts index d7c26f6..3a69ffa 100644 --- a/src/core-ts/contexts.ts +++ b/src/core-ts/contexts.ts @@ -11,6 +11,7 @@ import { IRenderWindow, IRepresentation, IShareDataset, + IView, } from '../types'; export const OpenGLRenderWindowContext = @@ -34,6 +35,8 @@ export const ShareDataSetContext = createContext>(null); export const MultiViewRootContext = createContext(false); +export const ViewContext = createContext(null); + export function useRenderWindowContext() { const rw = useContext(RenderWindowContext); if (!rw) throw new Error('No RenderWindow context!'); diff --git a/src/core-ts/internal/ParentedView.tsx b/src/core-ts/internal/ParentedView.tsx index 11c1b42..09baaa6 100644 --- a/src/core-ts/internal/ParentedView.tsx +++ b/src/core-ts/internal/ParentedView.tsx @@ -15,7 +15,11 @@ import { pick } from '../../utils-ts'; import { ResizeWatcherContext } from '../../utils-ts/ResizeWatcher'; import { useEventListener } from '../../utils-ts/useEventListener'; import useMount from '../../utils-ts/useMount'; -import { OpenGLRenderWindowContext, RenderWindowContext } from '../contexts'; +import { + OpenGLRenderWindowContext, + RenderWindowContext, + ViewContext, +} from '../contexts'; import useApplyCenterOfRotation from '../modules/useApplyCenterOfRotation'; import { useInteractorStyle, @@ -148,6 +152,7 @@ const ParentedView = forwardRef(function ParentedView(props: Props, fwdRef) { const api = useMemo( () => ({ isInMultiViewRoot: () => true, + getViewContainer: () => containerRef.current, getOpenGLRenderWindow: () => openGLRenderWindowAPI, getRenderWindow: () => renderWindowAPI, getRenderer: () => rendererRef.current, @@ -182,11 +187,13 @@ const ParentedView = forwardRef(function ParentedView(props: Props, fwdRef) { ); return ( -
- - {props.children} - -
+ +
+ + {props.children} + +
+
); }); diff --git a/src/core-ts/internal/SingleView.tsx b/src/core-ts/internal/SingleView.tsx index 9114c2f..cc2df49 100644 --- a/src/core-ts/internal/SingleView.tsx +++ b/src/core-ts/internal/SingleView.tsx @@ -13,6 +13,7 @@ import { IView, } from '../../types'; import { omit, pick } from '../../utils-ts'; +import { ViewContext } from '../contexts'; import useApplyCenterOfRotation from '../modules/useApplyCenterOfRotation'; import { useInteractorStyle, @@ -72,6 +73,8 @@ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { const api = useMemo( () => ({ isInMultiViewRoot: () => false, + getViewContainer: () => + openGLRenderWindowRef.current?.getContainer() ?? null, getOpenGLRenderWindow: () => openGLRenderWindowRef.current, getRenderWindow: () => renderWindowRef.current, getRenderer: () => rendererRef.current, @@ -88,16 +91,18 @@ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { useImperativeHandle(fwdRef, () => api); return ( - - - - {props.children} - - - + + + + + {props.children} + + + + ); }); From 277ed9db877ce19c7de3f1503d226c6cb538cf7e Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 20:31:25 -0500 Subject: [PATCH 041/110] refactor: remove unused files --- src/core-ts/modules/useViewResize.ts | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 src/core-ts/modules/useViewResize.ts diff --git a/src/core-ts/modules/useViewResize.ts b/src/core-ts/modules/useViewResize.ts deleted file mode 100644 index 1eb871f..0000000 --- a/src/core-ts/modules/useViewResize.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Nullable } from '@kitware/vtk.js/types'; -import { RefObject, useCallback } from 'react'; -import { IView } from '../../types'; -import useMount from '../../utils-ts/useMount'; -import useResizeObserver from '../../utils-ts/useResizeObserver'; - -export function useViewResize( - containerRef: RefObject>, - view: IView -) { - const updateViewSize = useCallback(() => { - const container = containerRef.current; - if (!container) return; - - const renderWindowView = view.getAPISpecificRenderWindow(); - const renderWindow = view.getRenderWindow(); - const devicePixelRatio = window.devicePixelRatio || 1; - const { width, height } = container.getBoundingClientRect(); - const w = Math.floor(width * devicePixelRatio); - const h = Math.floor(height * devicePixelRatio); - renderWindowView.setSize(Math.max(w, 10), Math.max(h, 10)); - renderWindow.render(); - }, [containerRef, view]); - - useResizeObserver(containerRef.current, updateViewSize); - useMount(() => updateViewSize()); -} From 3f1034ebff4a34bfb5ad2aa15b3548009a0b06bf Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 20:31:56 -0500 Subject: [PATCH 042/110] fix(View): add getViewContainer to view API --- src/types.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/types.ts b/src/types.ts index be5ae09..3430ebc 100644 --- a/src/types.ts +++ b/src/types.ts @@ -54,6 +54,7 @@ export interface IRenderer { export interface IView { isInMultiViewRoot(): boolean; + getViewContainer(): HTMLElement | null; getRenderer(): IRenderer | null; getRenderWindow(): IRenderWindow | null; getOpenGLRenderWindow(): IOpenGLRenderWindow | null; From 26f1139cade38f6086cdabe5a63de16863f28391 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 20:32:27 -0500 Subject: [PATCH 043/110] feat: add more vtk.js types --- src/global.d.ts | 437 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 437 insertions(+) diff --git a/src/global.d.ts b/src/global.d.ts index 1bde375..e76039b 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -1511,3 +1511,440 @@ declare module '@kitware/vtk.js/Interaction/Manipulators/GestureCameraManipulato export default vtkGestureCameraManipulator; } + +declare module '@kitware/vtk.js/Common/DataModel/SelectionNode' { + import { vtkObject } from '@kitware/vtk.js/interfaces'; + import vtkProp from '@kitware/vtk.js/Rendering/Core/Prop'; + import { Bounds, Vector3 } from '@kitware/vtk.js/types'; + + export enum SelectionContent { + GLOBALIDS, + PEDIGREEIDS, + VALUES, + INDICES, + FRUSTUM, + LOCATIONS, + THRESHOLDS, + BLOCKS, + QUERY, + } + + export enum SelectionField { + CELL, + POINT, + FIELD, + VERTEX, + EDGE, + ROW, + } + + export interface SelectionProperties { + propID: number; + prop: vtkProp | null; + compositeID: number; + attributeID: number; + pixelCount: number; + displayPosition?: Vector3; + worldPosition?: Vector3; + } + + export interface ISelectionNodeInitialValues { + contentType?: SelectionContent; + fieldType?: SelectionField; + } + + export interface vtkSelectionNode extends vtkObject { + getBounds(): Bounds; + setContentType(type: SelectionContent): boolean; + getContentType(): number; + setFieldType(type: SelectionField): boolean; + getFieldType(): SelectionField; + setProperties(properties: SelectionProperties): boolean; + getProperties(): SelectionProperties; + setSelectionList(selections: number[]): boolean; + getSelectionList(): number[]; + } + + /** + * Method used to decorate a given object (publicAPI+model) with vtkSelectionNode characteristics. + * + * @param publicAPI object on which methods will be bounds (public) + * @param model object on which data structure will be bounds (protected) + * @param {ISelectionNodeInitialValues} [initialValues] (default: {}) + */ + export function extend( + publicAPI: object, + model: object, + initialValues?: ISelectionNodeInitialValues + ): void; + + /** + * Method used to create a new instance of vtkSelectionNode. + * @param {ISelectionNodeInitialValues} [initialValues] for pre-setting some of its content + */ + export function newInstance( + initialValues?: ISelectionNodeInitialValues + ): vtkSelectionNode; + + /** + * vtkSelectionNode represents a 2D n-sided polygon. + * + * The polygons cannot have any internal holes, and cannot self-intersect. + * Define the polygon with n-points ordered in the counter-clockwise direction. + * Do not repeat the last point. + */ + export const vtkSelectionNode: { + newInstance: typeof newInstance; + extend: typeof extend; + }; + export default vtkSelectionNode; +} + +declare module '@kitware/vtk.js/Rendering/Core/HardwareSelector' { + import { FieldAssociations } from '@kitware/vtk.js/Common/DataModel/DataSet/Constants'; + import vtkSelectionNode from '@kitware/vtk.js/Common/DataModel/SelectionNode'; + import { vtkObject } from '@kitware/vtk.js/interfaces'; + import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; + + export interface vtkHardwareSelector extends vtkObject { + /** + * Get the picking source data. + * + * @param {vtkRenderer} renderer + * @param {number} fx1 bottom left x coord + * @param {number} fy1 bottom right x coord + * @param {number} fx2 bottom left y coord + * @param {number} fy2 bottom right y coord + */ + getSourceDataAsync( + renderer: vtkRenderer, + fx1: number, + fy1: number, + fx2: number, + fy2: number + ): Promise; + + /** + * Generates a selection. + * + * @param {vtkRenderer} renderer + * @param {number} fx1 bottom left x coord + * @param {number} fy1 bottom right x coord + * @param {number} fx2 bottom left y coord + * @param {number} fy2 bottom right y coord + */ + selectAsync( + renderer: vtkRenderer, + fx1: number, + fy1: number, + fx2: number, + fy2: number + ): Promise; + + /** + * Sets the field association. + * @param {FieldAssociations} assoc + */ + setFieldAssociation(assoc: FieldAssociations): boolean; + + /** + * Gets the field association. + */ + getFieldAssociation(): FieldAssociations; + + /** + * Sets whether to capture Z values. + * @param {boolean} capture + */ + setCaptureZValues(capture: boolean): boolean; + + /** + * Gets whether to capture Z values. + */ + getCaptureZValues(): boolean; + } + + export interface IHardwareSelectorInitialValues { + fieldAssociation?: FieldAssociations; + captureZValues?: boolean; + } + + export function newInstance( + initialValues?: IHardwareSelectorInitialValues + ): vtkHardwareSelector; + + export function extend( + publicAPI: object, + model: object, + initialValues?: IHardwareSelectorInitialValues + ): void; + + export const vtkHardwareSelector: { + newInstance: typeof newInstance; + extend: typeof extend; + }; + + export default vtkHardwareSelector; +} + +declare module '@kitware/vtk.js/Rendering/OpenGL/HardwareSelector' { + import vtkSelectionNode from '@kitware/vtk.js/Common/DataModel/SelectionNode'; + import { + IHardwareSelectorInitialValues, + vtkHardwareSelector, + } from '@kitware/vtk.js/Rendering/Core/HardwareSelector'; + import vtkProp from '@kitware/vtk.js/Rendering/Core/Prop'; + import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; + import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; + import { Vector2 } from '@kitware/vtk.js/types'; + + type Area = [number, number, number, number]; + + export interface BufferData { + area: Area; + pixBuffer: Uint8Array[]; + } + + export interface SourceData { + area: Area; + pixBuffer: Uint8Array[]; + captureZValues: boolean; + zBuffer: Uint8Array; + props: vtkProp[]; + fieldAssociation: unknown; + renderer: vtkRenderer; + openGLRenderWindow: vtkOpenGLRenderWindow; + generateSelection( + buffdata: BufferData, + fx1: number, + fy1: number, + fx2: number, + fy2: number + ): vtkSelectionNode[]; + } + + export interface PixelInformation { + valid: boolean; + prop: vtkProp; + propID: number; + compositeID: number; + zValue: number; + displayPosition: Vector2; + attributeID?: number; + } + + // TODO extends vtkHardwareSelector + export interface vtkOpenGLHardwareSelector extends vtkHardwareSelector { + /** + * Releases internal pixel buffer memory. + */ + releasePixBuffers(): void; + + /** + * Preps for picking the scene. + * + * Call endSelection() afterwards. + */ + beginSelection(): void; + + /** + * Cleans up picking state. + * + * Should be after a call to beginSelection(); + */ + endSelection(): void; + + /** + * Runs a pre-capture pass. + */ + preCapturePass(): void; + + /** + * Runs a post-capture pass. + */ + postCapturePass(): void; + + /** + * Generates a selection. + */ + select(): unknown; + + /** + * Get the picking source data. + * + * @param {vtkRenderer} renderer + * @param {number} fx1 bottom left x coord + * @param {number} fy1 bottom right x coord + * @param {number} fx2 bottom left y coord + * @param {number} fy2 bottom right y coord + */ + getSourceDataAsync( + renderer: vtkRenderer, + fx1: number, + fy1: number, + fx2: number, + fy2: number + ): Promise; + + /** + * Captures the scene for picking. + * @returns whether the capture succeeded. + */ + captureBuffers(): boolean; + + /** + * Processes the pixel buffers for actors. + */ + processPixelBuffers(): void; + + /** + * Determines if a pass is required. + * @param {PassTypes} pass + */ + passRequired(pass: unknown): void; + + /** + * Saves the pixel buffer from the view. + * @param {PassTypes} pass + */ + savePixelBuffer(pass: unknown): void; + + /** + * Builds the prop hit list. + * @param {Uint8Array} pixelBuffer + */ + buildPropHitList(pixelBuffer: Uint8Array): void; + + /** + * Renders a prop for picking. + * @param {vtkProp} prop + */ + renderProp(prop: vtkProp): void; + + /** + * Sets the current prop's color value for the composite index. + * @param {number} index + */ + renderCompositeIndex(index: number): void; + + /** + * Renders an attribute ID. + * @param {number} attribId + */ + renderAttributeId(attribId: number): void; + + /** + * Returns the pass type name as a string. + * @param {PassTypes} type + */ + passTypeToString(type: unknown): string; + + /** + * Has the prop with the given internal ID been hit. + * @param {number} id + */ + isPropHit(id: number): boolean; + + /** + * Sets the internal color used for coloring the current prop. + * @param {number} val + */ + setPropColorValueFromInt(val: number): void; + + /** + * Gets the selection information for a given pixel. + * + * @param inDispPos The input diplay position. + * @param maxDistance The max distance to consider from the input position. + * @param outDispPos The output display position. + */ + getPixelInformation( + inDispPos: Vector2, + maxDistance: number, + outDispPos: Vector2 + ): PixelInformation | null; + + /** + * Generates selections in a given area. + * + * @param {number} fx1 bottom left x coord + * @param {number} fy1 bottom right x coord + * @param {number} fx2 bottom left y coord + * @param {number} fy2 bottom right y coord + */ + generateSelection( + fx1: number, + fy1: number, + fx2: number, + fy2: number + ): vtkSelectionNode[]; + // generateSelection + // getRawPixelBuffer + // getPixelBuffer + + /** + * Attaches a render window + renderer to this hardware selector. + * @param {vtkOpenGLRenderWindow | null} openglRenderWindow + * @param {vtkRenderer | null} renderer + */ + attach( + openglRenderWindow: vtkOpenGLRenderWindow | null, + renderer: vtkRenderer | null + ): void; + + // setRenderer + // getRenderer + // setCurrentPass + // getCurrentPass + // setOpenGLRenderWindow + // getOpenGLRenderWindow + // setMaximumPointId + // getMaximumPointId + // setMaximumCellId + // getMaximumCellId + // setPropColorValue (array) + // getPropColorValue (array) + + /** + * Sets the selection area. + * + * @param area An area bounding box + */ + setArea(area: Area): boolean; + + /** + * Sets the selection area. + * @param {number} fx1 bottom left x coord + * @param {number} fy1 bottom right x coord + * @param {number} fx2 bottom left y coord + * @param {number} fy2 bottom right y coord + */ + setArea(fx1: number, fy1: number, fx2: number, fy2: number): boolean; + + // getArea (array) + // onEvent ({type: 'StartEvent' | 'EndEvent' }) + } + export interface IOpenGLHardwareSelectorInitialValues + extends IHardwareSelectorInitialValues { + maximumPointId?: number; + maximumCellId?: number; + idOffset?: number; + } + + export function newInstance( + initialValues?: IOpenGLHardwareSelectorInitialValues + ): vtkOpenGLHardwareSelector; + + export function extend( + publicAPI: object, + model: object, + initialValues?: IOpenGLHardwareSelectorInitialValues + ): void; + + export const vtkOpenGLHardwareSelector: { + newInstance: typeof newInstance; + extend: typeof extend; + }; + + export default vtkOpenGLHardwareSelector; +} From 02f6d7ba36dcc03941932ee541788e410542132e Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 20:33:01 -0500 Subject: [PATCH 044/110] feat(Picking): add Picking implementation --- src/core-ts/Picking.ts | 416 +++++++++++++++++++++++++++++++ src/index.ts | 10 +- src/utils-ts/useDebounce.ts | 16 ++ src/utils-ts/useEventListener.ts | 52 +++- 4 files changed, 484 insertions(+), 10 deletions(-) create mode 100644 src/core-ts/Picking.ts create mode 100644 src/utils-ts/useDebounce.ts diff --git a/src/core-ts/Picking.ts b/src/core-ts/Picking.ts new file mode 100644 index 0000000..0eb9cdb --- /dev/null +++ b/src/core-ts/Picking.ts @@ -0,0 +1,416 @@ +import { FieldAssociations } from '@kitware/vtk.js/Common/DataModel/DataSet/Constants.js'; +import vtkOpenGLHardwareSelector from '@kitware/vtk.js/Rendering/OpenGL/HardwareSelector'; +import { Vector2, Vector3 } from '@kitware/vtk.js/types'; +import { + forwardRef, + useCallback, + useContext, + useImperativeHandle, + useMemo, +} from 'react'; +import deletionRegistry from '../utils-ts/DeletionRegistry'; +import useDebounce from '../utils-ts/useDebounce'; +import { useEventListener } from '../utils-ts/useEventListener'; +import useGetterRef from '../utils-ts/useGetterRef'; +import useMount from '../utils-ts/useMount'; +import useUnmount from '../utils-ts/useUnmount'; +import { + OpenGLRenderWindowContext, + RendererContext, + ViewContext, +} from './contexts'; + +export interface PickResult { + representationID?: string; + worldPosition: Vector3; + displayPosition: Vector3; + compositeID: number; + ray: [Vector3, Vector3]; +} + +export interface FrustumPickResult { + frustum: number[][]; + representationIds: string[]; +} + +function useOpenGLHardwareSelector() { + const [selectorRef, getSelector] = useGetterRef(() => { + const selector = vtkOpenGLHardwareSelector.newInstance({ + captureZValues: true, + }); + deletionRegistry.register(selector, () => selector.delete()); + return selector; + }); + + useUnmount(() => { + if (selectorRef.current) { + deletionRegistry.markForDeletion(selectorRef.current); + selectorRef.current = null; + } + }); + + return getSelector; +} + +interface Props { + /** + * Whether to enable picking and callbacks. + * + * Defaults to true. + */ + enabled?: boolean; + + /** + * Callback when an actor is hovered. + * + * @param selection Selection info + * @param event the originating pointer event + */ + onHover?: (selection: PickResult, event: PointerEvent) => void; + + /** + * Callback when a box select occurs. + * + * @param selection Selection info + * @param event the originating pointer event + */ + onSelect?: (selection: FrustumPickResult, event: PointerEvent) => void; + + /** + * Callback when an actor is clicked with a mouse. + * + * @param selection Selection info + * @param event the originating mouse event + */ + onClick?: (selection: PickResult, event: MouseEvent) => void; + + /** + * Callback when the pointer is pressed down on an actor. + * + * @param selection Selection info + * @param event the originating pointer event + */ + onPointerDown?: (selection: PickResult, event: PointerEvent) => void; + + /** + * Callback when the pointer is pressed up on an actor. + * + * @param selection Selection info + * @param event the originating pointer event + */ + onPointerUp?: (selection: PickResult, event: PointerEvent) => void; + + /** + * Defines the tolerance of the click and hover selection. + */ + pointerSize?: number; + + /** + * Sets the debounce wait for onHover calls. + * + * This is only useful if you desire to reduce the frequency + * at which onHover is called. + */ + onHoverDebounceWait?: number; +} + +const DefaultProps = { + enabled: true, + pointerSize: 0, + onHoverDebounceWait: 4, +}; + +export default forwardRef(function ViewPicking(props: Props, fwdRef) { + const openGLRenderWindowAPI = useContext(OpenGLRenderWindowContext); + const rendererAPI = useContext(RendererContext); + const viewAPI = useContext(ViewContext); + + if (!openGLRenderWindowAPI || !rendererAPI || !viewAPI) { + throw new Error(' must have a ancestor'); + } + + const getSelector = useOpenGLHardwareSelector(); + + useMount(() => { + const selector = getSelector(); + selector.setFieldAssociation(FieldAssociations.FIELD_ASSOCIATION_POINTS); + selector.attach(openGLRenderWindowAPI.get(), rendererAPI.get()); + + return () => { + // avoids keeping refs to the openglrenderwindow and renderer + selector.attach(null, null); + }; + }); + + // --- Props --- // + + const { + enabled = DefaultProps.enabled, + pointerSize = DefaultProps.pointerSize, + } = props; + + const getPointerSizeTolerance = useCallback( + () => pointerSize / 2, + [pointerSize] + ); + + // --- API --- // + + const pickClosest = useCallback( + (xp: number, yp: number, tolerance: number) => { + const x1 = Math.floor(xp - tolerance); + const y1 = Math.floor(yp - tolerance); + const x2 = Math.ceil(xp + tolerance); + const y2 = Math.ceil(yp + tolerance); + + const selector = getSelector(); + const openGLRenderWindow = openGLRenderWindowAPI.get(); + const renderer = rendererAPI.get(); + + selector.setArea(x1, y1, x2, y2); + + if (selector.captureBuffers()) { + const pos: Vector2 = [xp, yp]; + const outSelectedPosition: Vector2 = [0, 0]; + const info = selector.getPixelInformation( + pos, + tolerance, + outSelectedPosition + ); + + if (info == null || info.prop == null) return []; + + const startPoint = openGLRenderWindow.displayToWorld( + Math.round((x1 + x2) / 2), + Math.round((y1 + y2) / 2), + 0, + renderer + ); + + const endPoint = openGLRenderWindow.displayToWorld( + Math.round((x1 + x2) / 2), + Math.round((y1 + y2) / 2), + 1, + renderer + ); + + const ray = [Array.from(startPoint), Array.from(endPoint)]; + + const worldPosition = Array.from( + openGLRenderWindow.displayToWorld( + info.displayPosition[0], + info.displayPosition[1], + info.zValue, + renderer + ) + ); + + const displayPosition = [ + info.displayPosition[0], + info.displayPosition[1], + info.zValue, + ]; + + return [ + { + worldPosition, + displayPosition, + compositeID: info.compositeID, + ...info.prop.get('representationID'), + ray, + }, + ] as PickResult[]; + } + return []; + }, + [rendererAPI, openGLRenderWindowAPI, getSelector] + ); + + const pick = useCallback( + ( + x1: number, + y1: number, + x2: number, + y2: number, + useFrustrum = false + ): PickResult[] | FrustumPickResult => { + const selector = getSelector(); + const openGLRenderWindow = openGLRenderWindowAPI.get(); + const renderer = rendererAPI.get(); + + selector.setArea(x1, y1, x2, y2); + + if (selector.captureBuffers()) { + const selections = selector.generateSelection(x1, y1, x2, y2) || []; + if (useFrustrum) { + const frustum = [ + Array.from(openGLRenderWindow.displayToWorld(x1, y1, 0, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x2, y1, 0, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x2, y2, 0, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x1, y2, 0, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x1, y1, 1, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x2, y1, 1, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x2, y2, 1, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x1, y2, 1, renderer)), + ]; + const representationIds: string[] = []; + selections.forEach((v) => { + const { prop } = v.getProperties(); + const getterResult: + | { + representationID?: string; + } + | undefined = prop?.get('representationID'); + const representationId = getterResult?.representationID; + if (representationId) { + representationIds.push(representationId); + } + }); + return { frustum, representationIds }; + } + const ray = [ + Array.from( + openGLRenderWindow.displayToWorld( + Math.round((x1 + x2) / 2), + Math.round((y1 + y2) / 2), + 0, + renderer + ) + ), + Array.from( + openGLRenderWindow.displayToWorld( + Math.round((x1 + x2) / 2), + Math.round((y1 + y2) / 2), + 1, + renderer + ) + ), + ]; + return selections + .map((v) => { + const { prop, compositeID, displayPosition } = v.getProperties(); + + // Return false to mark this item for removal + if (prop == null || !displayPosition) return false; + + return { + worldPosition: Array.from( + openGLRenderWindow.displayToWorld( + displayPosition[0], + displayPosition[1], + displayPosition[2], + renderer + ) + ), + displayPosition, + compositeID, // Not yet useful unless GlyphRepresentation + ...prop.get('representationID'), + ray, + }; + }) + .filter(Boolean) as PickResult[]; + } + return []; + }, + [rendererAPI, openGLRenderWindowAPI, getSelector] + ); + + const api = useMemo( + () => ({ + pick, + pickClosest, + }), + [pick, pickClosest] + ); + + useImperativeHandle(fwdRef, () => api); + + // --- Pointer event handling --- // + + const getScreenEventPositionFor = useCallback( + (source: MouseEvent) => { + const rw = openGLRenderWindowAPI.get(); + const bounds = rw.getCanvas().getBoundingClientRect(); + const [canvasWidth, canvasHeight] = rw.getSize(); + const scaleX = canvasWidth / bounds.width; + const scaleY = canvasHeight / bounds.height; + const position = { + x: scaleX * (source.clientX - bounds.left), + y: scaleY * (bounds.height - source.clientY + bounds.top), + z: 0, + }; + return position; + }, + [openGLRenderWindowAPI] + ); + + const { onHover, onPointerDown, onPointerUp, onClick } = props; + + const makeSelection = useCallback( + (ev: T) => { + const { x, y } = getScreenEventPositionFor(ev); + const tolerance = getPointerSizeTolerance(); + const selections = pickClosest(Math.floor(x), Math.floor(y), tolerance); + return selections[0]; + }, + [getScreenEventPositionFor, getPointerSizeTolerance, pickClosest] + ); + + // --- register event handlers --- // + + const { onHoverDebounceWait = DefaultProps.onHoverDebounceWait } = props; + + // TODO last selection? (see View.js) + useEventListener( + viewAPI.getViewContainer, + 'pointermove', + useDebounce( + useCallback( + (ev: PointerEvent) => { + if (!enabled || !onHover) return; + onHover(makeSelection(ev), ev); + }, + [makeSelection, onHover, enabled] + ), + onHoverDebounceWait + ) + ); + + useEventListener( + viewAPI.getViewContainer, + 'pointerdown', + useCallback( + (ev: PointerEvent) => { + if (!enabled || !onPointerDown) return; + onPointerDown(makeSelection(ev), ev); + }, + [makeSelection, onPointerDown, enabled] + ) + ); + + useEventListener( + viewAPI.getViewContainer, + 'pointerup', + useCallback( + (ev: PointerEvent) => { + if (!enabled || !onPointerUp) return; + onPointerUp(makeSelection(ev), ev); + }, + [makeSelection, onPointerUp, enabled] + ) + ); + + useEventListener( + viewAPI.getViewContainer, + 'click', + useCallback( + (ev: MouseEvent) => { + if (!enabled || !onClick) return; + onClick(makeSelection(ev), ev); + }, + [makeSelection, onClick, enabled] + ) + ); + + return null; +}); diff --git a/src/index.ts b/src/index.ts index bb7a8e8..465a423 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,11 +10,10 @@ export { default as Geometry2DRepresentation } from './core-ts/Geometry2DReprese export { default as GeometryRepresentation } from './core-ts/GeometryRepresentation'; export { default as ImageData } from './core-ts/ImageData'; export { default as MultiViewRoot } from './core-ts/MultiViewRoot'; -export { default as OpenGLRenderWindow } from './core-ts/OpenGLRenderWindow'; +export * from './core-ts/Picking'; +export { default as Picking } from './core-ts/Picking'; export { default as PointData } from './core-ts/PointData'; export { default as PolyData } from './core-ts/PolyData'; -export { default as Renderer } from './core-ts/Renderer'; -export { default as RenderWindow } from './core-ts/RenderWindow'; export { RegisterDataSet, ShareDataSetRoot, @@ -22,3 +21,8 @@ export { } from './core-ts/ShareDataSet'; export { default as SliceRepresentation } from './core-ts/SliceRepresentation'; export { default as View } from './core-ts/View'; + +// TODO should we expose these? +// export { default as OpenGLRenderWindow } from './core-ts/OpenGLRenderWindow'; +// export { default as Renderer } from './core-ts/Renderer'; +// export { default as RenderWindow } from './core-ts/RenderWindow'; diff --git a/src/utils-ts/useDebounce.ts b/src/utils-ts/useDebounce.ts new file mode 100644 index 0000000..86d5d8e --- /dev/null +++ b/src/utils-ts/useDebounce.ts @@ -0,0 +1,16 @@ +import { vtkDebouncedFunction } from '@kitware/vtk.js/interfaces'; +import { debounce } from '@kitware/vtk.js/macros'; +import { useCallback, useEffect, useRef } from 'react'; + +export default function useDebounce(fn: CallableFunction, threshold: number) { + const ref = useRef( + debounce(fn as vtkDebouncedFunction, threshold) + ); + + useEffect(() => { + ref.current = debounce(fn as vtkDebouncedFunction, threshold); + }, [fn, threshold]); + + const wrapper = useCallback((...args: unknown[]) => ref.current(...args), []); + return wrapper; +} diff --git a/src/utils-ts/useEventListener.ts b/src/utils-ts/useEventListener.ts index cf1cdee..5df6216 100644 --- a/src/utils-ts/useEventListener.ts +++ b/src/utils-ts/useEventListener.ts @@ -1,6 +1,38 @@ -import { RefObject, useEffect } from 'react'; +import { RefObject, useEffect, useRef } from 'react'; type EventCallback = (this: HTMLElement, ev: E) => void; +type Target = (() => T | null) | RefObject | HTMLElement | null; + +function getElementTarget(target: Target) { + if (typeof target === 'function') { + return target(); + } + if (target && 'current' in target) { + return target.current; + } + return target; +} + +export function useEventListener( + target: () => HTMLElement | null, + eventName: E, + callback: EventCallback, + options?: AddEventListenerOptions | boolean +): void; + +export function useEventListener( + target: RefObject, + eventName: E, + callback: EventCallback, + options?: AddEventListenerOptions | boolean +): void; + +export function useEventListener( + target: HTMLElement | null, + eventName: E, + callback: EventCallback, + options?: AddEventListenerOptions | boolean +): void; /** * Event Listener. @@ -8,18 +40,24 @@ type EventCallback = (this: HTMLElement, ev: E) => void; * The typing currently only supports HTMLElement targets. */ export function useEventListener( - targetRef: RefObject, + target: Target, eventName: E, callback: EventCallback, options?: AddEventListenerOptions | boolean ) { + // avoid add/remove listener whenever callback changes + const cachedCallback = useRef(callback); + useEffect(() => { + cachedCallback.current = callback; + }, [callback]); + useEffect(() => { - const target = targetRef.current; - if (target) { - target.addEventListener(eventName, callback, options); + const el = getElementTarget(target); + if (el) { + el.addEventListener(eventName, cachedCallback.current, options); return () => { - target.removeEventListener(eventName, callback, options); + el.removeEventListener(eventName, cachedCallback.current, options); }; } - }, [eventName, callback, options, targetRef]); + }, [eventName, options, target]); } From e887c9da953646b3ad12bb967f5d02f3988bf142 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 21:58:48 -0500 Subject: [PATCH 045/110] fix(Picking): remove onSelect and split pick func --- src/core-ts/Picking.ts | 265 +++++++++++++++++++++-------------------- 1 file changed, 138 insertions(+), 127 deletions(-) diff --git a/src/core-ts/Picking.ts b/src/core-ts/Picking.ts index 0eb9cdb..6d3fc6d 100644 --- a/src/core-ts/Picking.ts +++ b/src/core-ts/Picking.ts @@ -68,14 +68,6 @@ interface Props { */ onHover?: (selection: PickResult, event: PointerEvent) => void; - /** - * Callback when a box select occurs. - * - * @param selection Selection info - * @param event the originating pointer event - */ - onSelect?: (selection: FrustumPickResult, event: PointerEvent) => void; - /** * Callback when an actor is clicked with a mouse. * @@ -157,7 +149,7 @@ export default forwardRef(function ViewPicking(props: Props, fwdRef) { // --- API --- // const pickClosest = useCallback( - (xp: number, yp: number, tolerance: number) => { + (xp: number, yp: number, tolerance: number): PickResult[] => { const x1 = Math.floor(xp - tolerance); const y1 = Math.floor(yp - tolerance); const x2 = Math.ceil(xp + tolerance); @@ -169,148 +161,166 @@ export default forwardRef(function ViewPicking(props: Props, fwdRef) { selector.setArea(x1, y1, x2, y2); - if (selector.captureBuffers()) { - const pos: Vector2 = [xp, yp]; - const outSelectedPosition: Vector2 = [0, 0]; - const info = selector.getPixelInformation( - pos, - tolerance, - outSelectedPosition - ); - - if (info == null || info.prop == null) return []; - - const startPoint = openGLRenderWindow.displayToWorld( - Math.round((x1 + x2) / 2), - Math.round((y1 + y2) / 2), - 0, - renderer - ); + if (!selector.captureBuffers()) { + return []; + } - const endPoint = openGLRenderWindow.displayToWorld( - Math.round((x1 + x2) / 2), - Math.round((y1 + y2) / 2), - 1, + const pos: Vector2 = [xp, yp]; + const outSelectedPosition: Vector2 = [0, 0]; + const info = selector.getPixelInformation( + pos, + tolerance, + outSelectedPosition + ); + + if (info == null || info.prop == null) return []; + + const startPoint = openGLRenderWindow.displayToWorld( + Math.round((x1 + x2) / 2), + Math.round((y1 + y2) / 2), + 0, + renderer + ); + + const endPoint = openGLRenderWindow.displayToWorld( + Math.round((x1 + x2) / 2), + Math.round((y1 + y2) / 2), + 1, + renderer + ); + + const ray = [Array.from(startPoint), Array.from(endPoint)]; + + const worldPosition = Array.from( + openGLRenderWindow.displayToWorld( + info.displayPosition[0], + info.displayPosition[1], + info.zValue, renderer - ); + ) + ); + + const displayPosition = [ + info.displayPosition[0], + info.displayPosition[1], + info.zValue, + ]; + + return [ + { + worldPosition, + displayPosition, + compositeID: info.compositeID, + ...info.prop.get('representationID'), + ray, + }, + ] as PickResult[]; + }, + [rendererAPI, openGLRenderWindowAPI, getSelector] + ); + + const pick = useCallback( + (x1: number, y1: number, x2: number, y2: number): PickResult[] => { + const selector = getSelector(); + const openGLRenderWindow = openGLRenderWindowAPI.get(); + const renderer = rendererAPI.get(); - const ray = [Array.from(startPoint), Array.from(endPoint)]; + selector.setArea(x1, y1, x2, y2); + + if (!selector.captureBuffers()) { + return []; + } - const worldPosition = Array.from( + const ray = [ + Array.from( openGLRenderWindow.displayToWorld( - info.displayPosition[0], - info.displayPosition[1], - info.zValue, + Math.round((x1 + x2) / 2), + Math.round((y1 + y2) / 2), + 0, renderer ) - ); - - const displayPosition = [ - info.displayPosition[0], - info.displayPosition[1], - info.zValue, - ]; - - return [ - { - worldPosition, + ), + Array.from( + openGLRenderWindow.displayToWorld( + Math.round((x1 + x2) / 2), + Math.round((y1 + y2) / 2), + 1, + renderer + ) + ), + ]; + + const selections = selector.generateSelection(x1, y1, x2, y2) || []; + return selections + .map((v) => { + const { prop, compositeID, displayPosition } = v.getProperties(); + + // Return false to mark this item for removal + if (prop == null || !displayPosition) return false; + + return { + worldPosition: Array.from( + openGLRenderWindow.displayToWorld( + displayPosition[0], + displayPosition[1], + displayPosition[2], + renderer + ) + ), displayPosition, - compositeID: info.compositeID, - ...info.prop.get('representationID'), + compositeID, // Not yet useful unless GlyphRepresentation + ...prop.get('representationID'), ray, - }, - ] as PickResult[]; - } - return []; + }; + }) + .filter(Boolean) as PickResult[]; }, [rendererAPI, openGLRenderWindowAPI, getSelector] ); - const pick = useCallback( + const pickWithFrustum = useCallback( ( x1: number, y1: number, x2: number, - y2: number, - useFrustrum = false - ): PickResult[] | FrustumPickResult => { + y2: number + ): FrustumPickResult | null => { const selector = getSelector(); const openGLRenderWindow = openGLRenderWindowAPI.get(); const renderer = rendererAPI.get(); selector.setArea(x1, y1, x2, y2); - if (selector.captureBuffers()) { - const selections = selector.generateSelection(x1, y1, x2, y2) || []; - if (useFrustrum) { - const frustum = [ - Array.from(openGLRenderWindow.displayToWorld(x1, y1, 0, renderer)), - Array.from(openGLRenderWindow.displayToWorld(x2, y1, 0, renderer)), - Array.from(openGLRenderWindow.displayToWorld(x2, y2, 0, renderer)), - Array.from(openGLRenderWindow.displayToWorld(x1, y2, 0, renderer)), - Array.from(openGLRenderWindow.displayToWorld(x1, y1, 1, renderer)), - Array.from(openGLRenderWindow.displayToWorld(x2, y1, 1, renderer)), - Array.from(openGLRenderWindow.displayToWorld(x2, y2, 1, renderer)), - Array.from(openGLRenderWindow.displayToWorld(x1, y2, 1, renderer)), - ]; - const representationIds: string[] = []; - selections.forEach((v) => { - const { prop } = v.getProperties(); - const getterResult: - | { - representationID?: string; - } - | undefined = prop?.get('representationID'); - const representationId = getterResult?.representationID; - if (representationId) { - representationIds.push(representationId); + if (!selector.captureBuffers()) { + return null; + } + + const frustum = [ + Array.from(openGLRenderWindow.displayToWorld(x1, y1, 0, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x2, y1, 0, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x2, y2, 0, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x1, y2, 0, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x1, y1, 1, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x2, y1, 1, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x2, y2, 1, renderer)), + Array.from(openGLRenderWindow.displayToWorld(x1, y2, 1, renderer)), + ]; + + const representationIds: string[] = []; + const selections = selector.generateSelection(x1, y1, x2, y2) || []; + selections.forEach((v) => { + const { prop } = v.getProperties(); + const getterResult: + | { + representationID?: string; } - }); - return { frustum, representationIds }; + | undefined = prop?.get('representationID'); + const representationId = getterResult?.representationID; + if (representationId) { + representationIds.push(representationId); } - const ray = [ - Array.from( - openGLRenderWindow.displayToWorld( - Math.round((x1 + x2) / 2), - Math.round((y1 + y2) / 2), - 0, - renderer - ) - ), - Array.from( - openGLRenderWindow.displayToWorld( - Math.round((x1 + x2) / 2), - Math.round((y1 + y2) / 2), - 1, - renderer - ) - ), - ]; - return selections - .map((v) => { - const { prop, compositeID, displayPosition } = v.getProperties(); - - // Return false to mark this item for removal - if (prop == null || !displayPosition) return false; - - return { - worldPosition: Array.from( - openGLRenderWindow.displayToWorld( - displayPosition[0], - displayPosition[1], - displayPosition[2], - renderer - ) - ), - displayPosition, - compositeID, // Not yet useful unless GlyphRepresentation - ...prop.get('representationID'), - ray, - }; - }) - .filter(Boolean) as PickResult[]; - } - return []; + }); + return { frustum, representationIds }; }, [rendererAPI, openGLRenderWindowAPI, getSelector] ); @@ -318,9 +328,10 @@ export default forwardRef(function ViewPicking(props: Props, fwdRef) { const api = useMemo( () => ({ pick, + pickWithFrustum, pickClosest, }), - [pick, pickClosest] + [pick, pickWithFrustum, pickClosest] ); useImperativeHandle(fwdRef, () => api); From 6ae9b984cc00d048c515d7dc20f24fe2db9f56a5 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 22:07:23 -0500 Subject: [PATCH 046/110] refactor: strip -ts folder suffix --- src/{core-ts => core}/Algorithm.tsx | 8 ++--- src/{core-ts => core}/DataArray.ts | 10 +++--- .../Geometry2DRepresentation.tsx | 6 ++-- .../GeometryRepresentation.tsx | 6 ++-- src/{core-ts => core}/ImageData.tsx | 6 ++-- src/{core-ts => core}/MultiViewRoot.tsx | 2 +- src/{core-ts => core}/OpenGLRenderWindow.tsx | 6 ++-- src/{core-ts => core}/Picking.ts | 12 +++---- src/{core-ts => core}/PointData.tsx | 0 src/{core-ts => core}/PolyData.tsx | 10 +++--- src/{core-ts => core}/RenderWindow.tsx | 10 +++--- src/{core-ts => core}/Renderer.tsx | 8 ++--- src/{core-ts => core}/ShareDataSet.tsx | 2 +- src/{core-ts => core}/SliceRepresentation.tsx | 6 ++-- src/{core-ts => core}/View.tsx | 0 src/{core-ts => core}/contexts.ts | 0 .../internal/ParentedView.tsx | 8 ++--- src/{core-ts => core}/internal/SingleView.tsx | 2 +- src/{core-ts => core}/internal/view-shared.ts | 0 .../modules/useApplyCenterOfRotation.ts | 0 src/{core-ts => core}/modules/useCamera.ts | 6 ++-- .../modules/useColorTransferFunction.ts | 12 +++---- .../modules/useCoordinate.ts | 12 +++---- .../modules/useInteractor.ts | 6 ++-- .../modules/useInteractorStyle.ts | 8 ++--- src/{core-ts => core}/modules/useMapper.ts | 12 +++---- src/{core-ts => core}/modules/useProp.ts | 12 +++---- src/index.ts | 34 +++++++++---------- src/types.ts | 2 +- src/{utils-ts => utils}/DeletionRegistry.ts | 0 src/{utils-ts => utils}/ResizeWatcher.ts | 0 src/{utils-ts => utils}/comparators.ts | 0 src/{utils-ts => utils}/index.ts | 4 +++ src/{utils-ts => utils}/numpy.ts | 0 .../useBooleanAccumulator.ts | 0 .../useComparableEffect.ts | 0 src/{utils-ts => utils}/useDebounce.ts | 0 src/{utils-ts => utils}/useEventListener.ts | 0 src/{utils-ts => utils}/useGetterRef.ts | 0 src/{utils-ts => utils}/useMount.ts | 0 src/{utils-ts => utils}/usePrevious.ts | 0 src/{utils-ts => utils}/useResizeObserver.ts | 0 src/{utils-ts => utils}/useUnmount.ts | 0 43 files changed, 107 insertions(+), 103 deletions(-) rename src/{core-ts => core}/Algorithm.tsx (93%) rename src/{core-ts => core}/DataArray.ts (91%) rename src/{core-ts => core}/Geometry2DRepresentation.tsx (95%) rename src/{core-ts => core}/GeometryRepresentation.tsx (95%) rename src/{core-ts => core}/ImageData.tsx (93%) rename src/{core-ts => core}/MultiViewRoot.tsx (98%) rename src/{core-ts => core}/OpenGLRenderWindow.tsx (93%) rename src/{core-ts => core}/Picking.ts (97%) rename src/{core-ts => core}/PointData.tsx (100%) rename src/{core-ts => core}/PolyData.tsx (95%) rename src/{core-ts => core}/RenderWindow.tsx (91%) rename src/{core-ts => core}/Renderer.tsx (93%) rename src/{core-ts => core}/ShareDataSet.tsx (99%) rename src/{core-ts => core}/SliceRepresentation.tsx (96%) rename src/{core-ts => core}/View.tsx (100%) rename src/{core-ts => core}/contexts.ts (100%) rename src/{core-ts => core}/internal/ParentedView.tsx (96%) rename src/{core-ts => core}/internal/SingleView.tsx (98%) rename src/{core-ts => core}/internal/view-shared.ts (100%) rename src/{core-ts => core}/modules/useApplyCenterOfRotation.ts (100%) rename src/{core-ts => core}/modules/useCamera.ts (86%) rename src/{core-ts => core}/modules/useColorTransferFunction.ts (75%) rename src/{core-ts => core}/modules/useCoordinate.ts (67%) rename src/{core-ts => core}/modules/useInteractor.ts (87%) rename src/{core-ts => core}/modules/useInteractorStyle.ts (95%) rename src/{core-ts => core}/modules/useMapper.ts (67%) rename src/{core-ts => core}/modules/useProp.ts (80%) rename src/{utils-ts => utils}/DeletionRegistry.ts (100%) rename src/{utils-ts => utils}/ResizeWatcher.ts (100%) rename src/{utils-ts => utils}/comparators.ts (100%) rename src/{utils-ts => utils}/index.ts (96%) rename src/{utils-ts => utils}/numpy.ts (100%) rename src/{utils-ts => utils}/useBooleanAccumulator.ts (100%) rename src/{utils-ts => utils}/useComparableEffect.ts (100%) rename src/{utils-ts => utils}/useDebounce.ts (100%) rename src/{utils-ts => utils}/useEventListener.ts (100%) rename src/{utils-ts => utils}/useGetterRef.ts (100%) rename src/{utils-ts => utils}/useMount.ts (100%) rename src/{utils-ts => utils}/usePrevious.ts (100%) rename src/{utils-ts => utils}/useResizeObserver.ts (100%) rename src/{utils-ts => utils}/useUnmount.ts (100%) diff --git a/src/core-ts/Algorithm.tsx b/src/core/Algorithm.tsx similarity index 93% rename from src/core-ts/Algorithm.tsx rename to src/core/Algorithm.tsx index 99e6a0d..b6c0187 100644 --- a/src/core-ts/Algorithm.tsx +++ b/src/core/Algorithm.tsx @@ -2,10 +2,10 @@ import { vtkAlgorithm, vtkObject } from '@kitware/vtk.js/interfaces'; import vtk from '@kitware/vtk.js/vtk'; import { PropsWithChildren, useCallback, useEffect, useMemo } from 'react'; import { IDownstream, VtkConstructor } from '../types'; -import deletionRegistry from '../utils-ts/DeletionRegistry'; -import useGetterRef from '../utils-ts/useGetterRef'; -import { usePrevious } from '../utils-ts/usePrevious'; -import useUnmount from '../utils-ts/useUnmount'; +import deletionRegistry from '../utils/DeletionRegistry'; +import useGetterRef from '../utils/useGetterRef'; +import { usePrevious } from '../utils/usePrevious'; +import useUnmount from '../utils/useUnmount'; import { DownstreamContext, useDownstream, diff --git a/src/core-ts/DataArray.ts b/src/core/DataArray.ts similarity index 91% rename from src/core-ts/DataArray.ts rename to src/core/DataArray.ts index 94c1064..7311ce7 100644 --- a/src/core-ts/DataArray.ts +++ b/src/core/DataArray.ts @@ -3,11 +3,11 @@ import { vtkRange } from '@kitware/vtk.js/interfaces'; import { TYPED_ARRAYS } from '@kitware/vtk.js/macros'; import { useEffect } from 'react'; import { DataArrayValues } from '../types'; -import { toTypedArray, TypedArrayLookup } from '../utils-ts'; -import deletionRegistry from '../utils-ts/DeletionRegistry'; -import useGetterRef from '../utils-ts/useGetterRef'; -import { usePrevious } from '../utils-ts/usePrevious'; -import useUnmount from '../utils-ts/useUnmount'; +import { toTypedArray, TypedArrayLookup } from '../utils'; +import deletionRegistry from '../utils/DeletionRegistry'; +import useGetterRef from '../utils/useGetterRef'; +import { usePrevious } from '../utils/usePrevious'; +import useUnmount from '../utils/useUnmount'; import { useDataset, useFieldData } from './contexts'; interface Props { diff --git a/src/core-ts/Geometry2DRepresentation.tsx b/src/core/Geometry2DRepresentation.tsx similarity index 95% rename from src/core-ts/Geometry2DRepresentation.tsx rename to src/core/Geometry2DRepresentation.tsx index b50ef10..f8aaaee 100644 --- a/src/core-ts/Geometry2DRepresentation.tsx +++ b/src/core/Geometry2DRepresentation.tsx @@ -17,9 +17,9 @@ import { useState, } from 'react'; import { IDownstream, IRepresentation } from '../types'; -import { compareShallowObject } from '../utils-ts/comparators'; -import useBooleanAccumulator from '../utils-ts/useBooleanAccumulator'; -import useComparableEffect from '../utils-ts/useComparableEffect'; +import { compareShallowObject } from '../utils/comparators'; +import useBooleanAccumulator from '../utils/useBooleanAccumulator'; +import useComparableEffect from '../utils/useComparableEffect'; import { DownstreamContext, RepresentationContext, diff --git a/src/core-ts/GeometryRepresentation.tsx b/src/core/GeometryRepresentation.tsx similarity index 95% rename from src/core-ts/GeometryRepresentation.tsx rename to src/core/GeometryRepresentation.tsx index 62219fe..db515b3 100644 --- a/src/core-ts/GeometryRepresentation.tsx +++ b/src/core/GeometryRepresentation.tsx @@ -15,9 +15,9 @@ import { useState, } from 'react'; import { IDownstream, IRepresentation } from '../types'; -import { compareShallowObject } from '../utils-ts/comparators'; -import useBooleanAccumulator from '../utils-ts/useBooleanAccumulator'; -import useComparableEffect from '../utils-ts/useComparableEffect'; +import { compareShallowObject } from '../utils/comparators'; +import useBooleanAccumulator from '../utils/useBooleanAccumulator'; +import useComparableEffect from '../utils/useComparableEffect'; import { DownstreamContext, RepresentationContext, diff --git a/src/core-ts/ImageData.tsx b/src/core/ImageData.tsx similarity index 93% rename from src/core-ts/ImageData.tsx rename to src/core/ImageData.tsx index fb88bce..cd05b2a 100644 --- a/src/core-ts/ImageData.tsx +++ b/src/core/ImageData.tsx @@ -8,9 +8,9 @@ import { useMemo, } from 'react'; import { IDataset } from '../types'; -import deletionRegistry from '../utils-ts/DeletionRegistry'; -import useGetterRef from '../utils-ts/useGetterRef'; -import useUnmount from '../utils-ts/useUnmount'; +import deletionRegistry from '../utils/DeletionRegistry'; +import useGetterRef from '../utils/useGetterRef'; +import useUnmount from '../utils/useUnmount'; import { DatasetContext, useDownstream, useRepresentation } from './contexts'; interface Props extends PropsWithChildren { diff --git a/src/core-ts/MultiViewRoot.tsx b/src/core/MultiViewRoot.tsx similarity index 98% rename from src/core-ts/MultiViewRoot.tsx rename to src/core/MultiViewRoot.tsx index c40f533..185662a 100644 --- a/src/core-ts/MultiViewRoot.tsx +++ b/src/core/MultiViewRoot.tsx @@ -10,7 +10,7 @@ import { IResizeWatcher, ResizeWatcher, ResizeWatcherContext, -} from '../utils-ts/ResizeWatcher'; +} from '../utils/ResizeWatcher'; import { MultiViewRootContext } from './contexts'; import OpenGLRenderWindow, { Props as OpenGLRenderWindowProps, diff --git a/src/core-ts/OpenGLRenderWindow.tsx b/src/core/OpenGLRenderWindow.tsx similarity index 93% rename from src/core-ts/OpenGLRenderWindow.tsx rename to src/core/OpenGLRenderWindow.tsx index 00864d5..3be72e4 100644 --- a/src/core-ts/OpenGLRenderWindow.tsx +++ b/src/core/OpenGLRenderWindow.tsx @@ -10,9 +10,9 @@ import { useRef, } from 'react'; import { IOpenGLRenderWindow } from '../types'; -import deletionRegistry from '../utils-ts/DeletionRegistry'; -import useGetterRef from '../utils-ts/useGetterRef'; -import useUnmount from '../utils-ts/useUnmount'; +import deletionRegistry from '../utils/DeletionRegistry'; +import useGetterRef from '../utils/useGetterRef'; +import useUnmount from '../utils/useUnmount'; import { OpenGLRenderWindowContext } from './contexts'; const RENDERWINDOW_STYLE: CSSProperties = { diff --git a/src/core-ts/Picking.ts b/src/core/Picking.ts similarity index 97% rename from src/core-ts/Picking.ts rename to src/core/Picking.ts index 6d3fc6d..7c63897 100644 --- a/src/core-ts/Picking.ts +++ b/src/core/Picking.ts @@ -8,12 +8,12 @@ import { useImperativeHandle, useMemo, } from 'react'; -import deletionRegistry from '../utils-ts/DeletionRegistry'; -import useDebounce from '../utils-ts/useDebounce'; -import { useEventListener } from '../utils-ts/useEventListener'; -import useGetterRef from '../utils-ts/useGetterRef'; -import useMount from '../utils-ts/useMount'; -import useUnmount from '../utils-ts/useUnmount'; +import deletionRegistry from '../utils/DeletionRegistry'; +import useDebounce from '../utils/useDebounce'; +import { useEventListener } from '../utils/useEventListener'; +import useGetterRef from '../utils/useGetterRef'; +import useMount from '../utils/useMount'; +import useUnmount from '../utils/useUnmount'; import { OpenGLRenderWindowContext, RendererContext, diff --git a/src/core-ts/PointData.tsx b/src/core/PointData.tsx similarity index 100% rename from src/core-ts/PointData.tsx rename to src/core/PointData.tsx diff --git a/src/core-ts/PolyData.tsx b/src/core/PolyData.tsx similarity index 95% rename from src/core-ts/PolyData.tsx rename to src/core/PolyData.tsx index 31aaea0..31402f4 100644 --- a/src/core-ts/PolyData.tsx +++ b/src/core/PolyData.tsx @@ -12,11 +12,11 @@ import { NumpyEncodedArray, TypedArrayConstructor, } from '../types'; -import { dataArraySize, toTypedArray } from '../utils-ts'; -import deletionRegistry from '../utils-ts/DeletionRegistry'; -import useGetterRef from '../utils-ts/useGetterRef'; -import { usePrevious } from '../utils-ts/usePrevious'; -import useUnmount from '../utils-ts/useUnmount'; +import { dataArraySize, toTypedArray } from '../utils'; +import deletionRegistry from '../utils/DeletionRegistry'; +import useGetterRef from '../utils/useGetterRef'; +import { usePrevious } from '../utils/usePrevious'; +import useUnmount from '../utils/useUnmount'; import { DatasetContext, useDownstream, useRepresentation } from './contexts'; interface Props extends PropsWithChildren { diff --git a/src/core-ts/RenderWindow.tsx b/src/core/RenderWindow.tsx similarity index 91% rename from src/core-ts/RenderWindow.tsx rename to src/core/RenderWindow.tsx index 6484808..64a2e02 100644 --- a/src/core-ts/RenderWindow.tsx +++ b/src/core/RenderWindow.tsx @@ -10,11 +10,11 @@ import { useState, } from 'react'; import { IRenderWindow } from '../types'; -import deletionRegistry from '../utils-ts/DeletionRegistry'; -import useGetterRef from '../utils-ts/useGetterRef'; -import useMount from '../utils-ts/useMount'; -import useResizeObserver from '../utils-ts/useResizeObserver'; -import useUnmount from '../utils-ts/useUnmount'; +import deletionRegistry from '../utils/DeletionRegistry'; +import useGetterRef from '../utils/useGetterRef'; +import useMount from '../utils/useMount'; +import useResizeObserver from '../utils/useResizeObserver'; +import useUnmount from '../utils/useUnmount'; import { OpenGLRenderWindowContext, RenderWindowContext } from './contexts'; import useInteractor from './modules/useInteractor'; diff --git a/src/core-ts/Renderer.tsx b/src/core/Renderer.tsx similarity index 93% rename from src/core-ts/Renderer.tsx rename to src/core/Renderer.tsx index 5bf3353..915c33a 100644 --- a/src/core-ts/Renderer.tsx +++ b/src/core/Renderer.tsx @@ -10,10 +10,10 @@ import { useMemo, } from 'react'; import { IRenderer } from '../types'; -import deletionRegistry from '../utils-ts/DeletionRegistry'; -import useBooleanAccumulator from '../utils-ts/useBooleanAccumulator'; -import useGetterRef from '../utils-ts/useGetterRef'; -import useUnmount from '../utils-ts/useUnmount'; +import deletionRegistry from '../utils/DeletionRegistry'; +import useBooleanAccumulator from '../utils/useBooleanAccumulator'; +import useGetterRef from '../utils/useGetterRef'; +import useUnmount from '../utils/useUnmount'; import { RendererContext, useRenderWindowContext } from './contexts'; import useCamera from './modules/useCamera'; diff --git a/src/core-ts/ShareDataSet.tsx b/src/core/ShareDataSet.tsx similarity index 99% rename from src/core-ts/ShareDataSet.tsx rename to src/core/ShareDataSet.tsx index 2ba3c48..1010ed1 100644 --- a/src/core-ts/ShareDataSet.tsx +++ b/src/core/ShareDataSet.tsx @@ -22,7 +22,7 @@ import { IRepresentation, IShareDataset, } from '../types'; -import useUnmount from '../utils-ts/useUnmount'; +import useUnmount from '../utils/useUnmount'; import { DownstreamContext, RepresentationContext, diff --git a/src/core-ts/SliceRepresentation.tsx b/src/core/SliceRepresentation.tsx similarity index 96% rename from src/core-ts/SliceRepresentation.tsx rename to src/core/SliceRepresentation.tsx index e0d322e..3a35ed4 100644 --- a/src/core-ts/SliceRepresentation.tsx +++ b/src/core/SliceRepresentation.tsx @@ -15,9 +15,9 @@ import { useState, } from 'react'; import { IDownstream, IRepresentation } from '../types'; -import { compareShallowObject } from '../utils-ts/comparators'; -import useBooleanAccumulator from '../utils-ts/useBooleanAccumulator'; -import useComparableEffect from '../utils-ts/useComparableEffect'; +import { compareShallowObject } from '../utils/comparators'; +import useBooleanAccumulator from '../utils/useBooleanAccumulator'; +import useComparableEffect from '../utils/useComparableEffect'; import { DownstreamContext, RepresentationContext, diff --git a/src/core-ts/View.tsx b/src/core/View.tsx similarity index 100% rename from src/core-ts/View.tsx rename to src/core/View.tsx diff --git a/src/core-ts/contexts.ts b/src/core/contexts.ts similarity index 100% rename from src/core-ts/contexts.ts rename to src/core/contexts.ts diff --git a/src/core-ts/internal/ParentedView.tsx b/src/core/internal/ParentedView.tsx similarity index 96% rename from src/core-ts/internal/ParentedView.tsx rename to src/core/internal/ParentedView.tsx index 09baaa6..b6a4dbd 100644 --- a/src/core-ts/internal/ParentedView.tsx +++ b/src/core/internal/ParentedView.tsx @@ -11,10 +11,10 @@ import { useRef, } from 'react'; import { IRenderer, IView } from '../../types'; -import { pick } from '../../utils-ts'; -import { ResizeWatcherContext } from '../../utils-ts/ResizeWatcher'; -import { useEventListener } from '../../utils-ts/useEventListener'; -import useMount from '../../utils-ts/useMount'; +import { pick } from '../../utils'; +import { ResizeWatcherContext } from '../../utils/ResizeWatcher'; +import { useEventListener } from '../../utils/useEventListener'; +import useMount from '../../utils/useMount'; import { OpenGLRenderWindowContext, RenderWindowContext, diff --git a/src/core-ts/internal/SingleView.tsx b/src/core/internal/SingleView.tsx similarity index 98% rename from src/core-ts/internal/SingleView.tsx rename to src/core/internal/SingleView.tsx index cc2df49..bbb0f77 100644 --- a/src/core-ts/internal/SingleView.tsx +++ b/src/core/internal/SingleView.tsx @@ -12,7 +12,7 @@ import { IRenderWindow, IView, } from '../../types'; -import { omit, pick } from '../../utils-ts'; +import { omit, pick } from '../../utils'; import { ViewContext } from '../contexts'; import useApplyCenterOfRotation from '../modules/useApplyCenterOfRotation'; import { diff --git a/src/core-ts/internal/view-shared.ts b/src/core/internal/view-shared.ts similarity index 100% rename from src/core-ts/internal/view-shared.ts rename to src/core/internal/view-shared.ts diff --git a/src/core-ts/modules/useApplyCenterOfRotation.ts b/src/core/modules/useApplyCenterOfRotation.ts similarity index 100% rename from src/core-ts/modules/useApplyCenterOfRotation.ts rename to src/core/modules/useApplyCenterOfRotation.ts diff --git a/src/core-ts/modules/useCamera.ts b/src/core/modules/useCamera.ts similarity index 86% rename from src/core-ts/modules/useCamera.ts rename to src/core/modules/useCamera.ts index bb86736..d3775b9 100644 --- a/src/core-ts/modules/useCamera.ts +++ b/src/core/modules/useCamera.ts @@ -2,9 +2,9 @@ import { ICameraInitialValues } from '@kitware/vtk.js/Rendering/Core/Camera'; import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; import { Vector3 } from '@kitware/vtk.js/types'; import { useCallback } from 'react'; -import { compareShallowObject } from '../../utils-ts/comparators'; -import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; -import useComparableEffect from '../../utils-ts/useComparableEffect'; +import { compareShallowObject } from '../../utils/comparators'; +import { BooleanAccumulator } from '../../utils/useBooleanAccumulator'; +import useComparableEffect from '../../utils/useComparableEffect'; export default function useCamera( getRenderer: () => vtkRenderer, diff --git a/src/core-ts/modules/useColorTransferFunction.ts b/src/core/modules/useColorTransferFunction.ts similarity index 75% rename from src/core-ts/modules/useColorTransferFunction.ts rename to src/core/modules/useColorTransferFunction.ts index 5d45f80..7a1235c 100644 --- a/src/core-ts/modules/useColorTransferFunction.ts +++ b/src/core/modules/useColorTransferFunction.ts @@ -1,12 +1,12 @@ import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'; import { Vector2 } from '@kitware/vtk.js/types'; -import { compareVector2 } from '../../utils-ts/comparators'; -import deletionRegistry from '../../utils-ts/DeletionRegistry'; -import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; -import useComparableEffect from '../../utils-ts/useComparableEffect'; -import useGetterRef from '../../utils-ts/useGetterRef'; -import useUnmount from '../../utils-ts/useUnmount'; +import { compareVector2 } from '../../utils/comparators'; +import deletionRegistry from '../../utils/DeletionRegistry'; +import { BooleanAccumulator } from '../../utils/useBooleanAccumulator'; +import useComparableEffect from '../../utils/useComparableEffect'; +import useGetterRef from '../../utils/useGetterRef'; +import useUnmount from '../../utils/useUnmount'; export default function useColorTransferFunction( presetName: string, diff --git a/src/core-ts/modules/useCoordinate.ts b/src/core/modules/useCoordinate.ts similarity index 67% rename from src/core-ts/modules/useCoordinate.ts rename to src/core/modules/useCoordinate.ts index f4a7fc0..7801e9b 100644 --- a/src/core-ts/modules/useCoordinate.ts +++ b/src/core/modules/useCoordinate.ts @@ -1,12 +1,12 @@ import vtkCoordinate, { ICoordinateInitialValues, } from '@kitware/vtk.js/Rendering/Core/Coordinate'; -import { compareShallowObject } from '../../utils-ts/comparators'; -import deletionRegistry from '../../utils-ts/DeletionRegistry'; -import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; -import useComparableEffect from '../../utils-ts/useComparableEffect'; -import useGetterRef from '../../utils-ts/useGetterRef'; -import useUnmount from '../../utils-ts/useUnmount'; +import { compareShallowObject } from '../../utils/comparators'; +import deletionRegistry from '../../utils/DeletionRegistry'; +import { BooleanAccumulator } from '../../utils/useBooleanAccumulator'; +import useComparableEffect from '../../utils/useComparableEffect'; +import useGetterRef from '../../utils/useGetterRef'; +import useUnmount from '../../utils/useUnmount'; export default function useCoordinate( props: ICoordinateInitialValues, diff --git a/src/core-ts/modules/useInteractor.ts b/src/core/modules/useInteractor.ts similarity index 87% rename from src/core-ts/modules/useInteractor.ts rename to src/core/modules/useInteractor.ts index 5d58632..b8f2f22 100644 --- a/src/core-ts/modules/useInteractor.ts +++ b/src/core/modules/useInteractor.ts @@ -1,9 +1,9 @@ import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; import { useEffect } from 'react'; import { IOpenGLRenderWindow } from '../../types'; -import deletionRegistry from '../../utils-ts/DeletionRegistry'; -import useGetterRef from '../../utils-ts/useGetterRef'; -import useUnmount from '../../utils-ts/useUnmount'; +import deletionRegistry from '../../utils/DeletionRegistry'; +import useGetterRef from '../../utils/useGetterRef'; +import useUnmount from '../../utils/useUnmount'; export default function useInteractor(openglRenderWindow: IOpenGLRenderWindow) { const [interactorRef, getInteractor] = useGetterRef(() => { diff --git a/src/core-ts/modules/useInteractorStyle.ts b/src/core/modules/useInteractorStyle.ts similarity index 95% rename from src/core-ts/modules/useInteractorStyle.ts rename to src/core/modules/useInteractorStyle.ts index 2cd7c4e..2f0bada 100644 --- a/src/core-ts/modules/useInteractorStyle.ts +++ b/src/core/modules/useInteractorStyle.ts @@ -25,10 +25,10 @@ import vtkInteractorStyleManipulator from '@kitware/vtk.js/Interaction/Style/Int import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; import deepEqual from 'deep-equal'; import { useCallback, useEffect, useState } from 'react'; -import deletionRegistry from '../../utils-ts/DeletionRegistry'; -import useComparableEffect from '../../utils-ts/useComparableEffect'; -import useGetterRef from '../../utils-ts/useGetterRef'; -import useUnmount from '../../utils-ts/useUnmount'; +import deletionRegistry from '../../utils/DeletionRegistry'; +import useComparableEffect from '../../utils/useComparableEffect'; +import useGetterRef from '../../utils/useGetterRef'; +import useUnmount from '../../utils/useUnmount'; interface PanSettings extends IMouseCameraTrackballPanManipulatorInitialValues { action: 'Pan'; diff --git a/src/core-ts/modules/useMapper.ts b/src/core/modules/useMapper.ts similarity index 67% rename from src/core-ts/modules/useMapper.ts rename to src/core/modules/useMapper.ts index 8002302..98cc6bf 100644 --- a/src/core-ts/modules/useMapper.ts +++ b/src/core/modules/useMapper.ts @@ -1,10 +1,10 @@ import vtkAbstractMapper from '@kitware/vtk.js/Rendering/Core/AbstractMapper'; -import { compareShallowObject } from '../../utils-ts/comparators'; -import deletionRegistry from '../../utils-ts/DeletionRegistry'; -import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; -import useComparableEffect from '../../utils-ts/useComparableEffect'; -import useGetterRef from '../../utils-ts/useGetterRef'; -import useUnmount from '../../utils-ts/useUnmount'; +import { compareShallowObject } from '../../utils/comparators'; +import deletionRegistry from '../../utils/DeletionRegistry'; +import { BooleanAccumulator } from '../../utils/useBooleanAccumulator'; +import useComparableEffect from '../../utils/useComparableEffect'; +import useGetterRef from '../../utils/useGetterRef'; +import useUnmount from '../../utils/useUnmount'; /** * Returns a mapper getter. diff --git a/src/core-ts/modules/useProp.ts b/src/core/modules/useProp.ts similarity index 80% rename from src/core-ts/modules/useProp.ts rename to src/core/modules/useProp.ts index 930f1db..258c3b6 100644 --- a/src/core-ts/modules/useProp.ts +++ b/src/core/modules/useProp.ts @@ -2,12 +2,12 @@ import vtkProp, { IPropInitialValues, } from '@kitware/vtk.js/Rendering/Core/Prop'; import { useEffect } from 'react'; -import { compareShallowObject } from '../../utils-ts/comparators'; -import deletionRegistry from '../../utils-ts/DeletionRegistry'; -import { BooleanAccumulator } from '../../utils-ts/useBooleanAccumulator'; -import useComparableEffect from '../../utils-ts/useComparableEffect'; -import useGetterRef from '../../utils-ts/useGetterRef'; -import useUnmount from '../../utils-ts/useUnmount'; +import { compareShallowObject } from '../../utils/comparators'; +import deletionRegistry from '../../utils/DeletionRegistry'; +import { BooleanAccumulator } from '../../utils/useBooleanAccumulator'; +import useComparableEffect from '../../utils/useComparableEffect'; +import useGetterRef from '../../utils/useGetterRef'; +import useUnmount from '../../utils/useUnmount'; import { useRendererContext } from '../contexts'; /** diff --git a/src/index.ts b/src/index.ts index 465a423..9fc8307 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,26 +3,26 @@ import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Geometry'; import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Glyph'; import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Volume'; -export { default as Algorithm } from './core-ts/Algorithm'; -export * as Contexts from './core-ts/contexts'; -export { default as DataArray } from './core-ts/DataArray'; -export { default as Geometry2DRepresentation } from './core-ts/Geometry2DRepresentation'; -export { default as GeometryRepresentation } from './core-ts/GeometryRepresentation'; -export { default as ImageData } from './core-ts/ImageData'; -export { default as MultiViewRoot } from './core-ts/MultiViewRoot'; -export * from './core-ts/Picking'; -export { default as Picking } from './core-ts/Picking'; -export { default as PointData } from './core-ts/PointData'; -export { default as PolyData } from './core-ts/PolyData'; +export { default as Algorithm } from './core/Algorithm'; +export * as Contexts from './core/contexts'; +export { default as DataArray } from './core/DataArray'; +export { default as Geometry2DRepresentation } from './core/Geometry2DRepresentation'; +export { default as GeometryRepresentation } from './core/GeometryRepresentation'; +export { default as ImageData } from './core/ImageData'; +export { default as MultiViewRoot } from './core/MultiViewRoot'; +export * from './core/Picking'; +export { default as Picking } from './core/Picking'; +export { default as PointData } from './core/PointData'; +export { default as PolyData } from './core/PolyData'; export { RegisterDataSet, ShareDataSetRoot, UseDataSet, -} from './core-ts/ShareDataSet'; -export { default as SliceRepresentation } from './core-ts/SliceRepresentation'; -export { default as View } from './core-ts/View'; +} from './core/ShareDataSet'; +export { default as SliceRepresentation } from './core/SliceRepresentation'; +export { default as View } from './core/View'; // TODO should we expose these? -// export { default as OpenGLRenderWindow } from './core-ts/OpenGLRenderWindow'; -// export { default as Renderer } from './core-ts/Renderer'; -// export { default as RenderWindow } from './core-ts/RenderWindow'; +// export { default as OpenGLRenderWindow } from './core/OpenGLRenderWindow'; +// export { default as Renderer } from './core/Renderer'; +// export { default as RenderWindow } from './core/RenderWindow'; diff --git a/src/types.ts b/src/types.ts index 3430ebc..95402fd 100644 --- a/src/types.ts +++ b/src/types.ts @@ -10,7 +10,7 @@ import { TypedArray, vtkPipelineConnection, } from '@kitware/vtk.js/types'; -import { NUMPY_DTYPES } from './utils-ts/numpy'; +import { NUMPY_DTYPES } from './utils/numpy'; export type NumpyEncodedArray = { bvals: string; diff --git a/src/utils-ts/DeletionRegistry.ts b/src/utils/DeletionRegistry.ts similarity index 100% rename from src/utils-ts/DeletionRegistry.ts rename to src/utils/DeletionRegistry.ts diff --git a/src/utils-ts/ResizeWatcher.ts b/src/utils/ResizeWatcher.ts similarity index 100% rename from src/utils-ts/ResizeWatcher.ts rename to src/utils/ResizeWatcher.ts diff --git a/src/utils-ts/comparators.ts b/src/utils/comparators.ts similarity index 100% rename from src/utils-ts/comparators.ts rename to src/utils/comparators.ts diff --git a/src/utils-ts/index.ts b/src/utils/index.ts similarity index 96% rename from src/utils-ts/index.ts rename to src/utils/index.ts index 9d1c5f5..1572772 100644 --- a/src/utils-ts/index.ts +++ b/src/utils/index.ts @@ -3,6 +3,10 @@ import { TYPED_ARRAYS } from '@kitware/vtk.js/macros'; import { DataArrayValues, TypedArrayConstructor } from '../types'; import { NUMPY_DTYPES } from './numpy'; +export const noop = Object.freeze(() => { + /* noop */ +}); + export const TypedArrayLookup: Record = { [TYPED_ARRAYS.Uint8Array]: Uint8Array, [TYPED_ARRAYS.Uint16Array]: Uint16Array, diff --git a/src/utils-ts/numpy.ts b/src/utils/numpy.ts similarity index 100% rename from src/utils-ts/numpy.ts rename to src/utils/numpy.ts diff --git a/src/utils-ts/useBooleanAccumulator.ts b/src/utils/useBooleanAccumulator.ts similarity index 100% rename from src/utils-ts/useBooleanAccumulator.ts rename to src/utils/useBooleanAccumulator.ts diff --git a/src/utils-ts/useComparableEffect.ts b/src/utils/useComparableEffect.ts similarity index 100% rename from src/utils-ts/useComparableEffect.ts rename to src/utils/useComparableEffect.ts diff --git a/src/utils-ts/useDebounce.ts b/src/utils/useDebounce.ts similarity index 100% rename from src/utils-ts/useDebounce.ts rename to src/utils/useDebounce.ts diff --git a/src/utils-ts/useEventListener.ts b/src/utils/useEventListener.ts similarity index 100% rename from src/utils-ts/useEventListener.ts rename to src/utils/useEventListener.ts diff --git a/src/utils-ts/useGetterRef.ts b/src/utils/useGetterRef.ts similarity index 100% rename from src/utils-ts/useGetterRef.ts rename to src/utils/useGetterRef.ts diff --git a/src/utils-ts/useMount.ts b/src/utils/useMount.ts similarity index 100% rename from src/utils-ts/useMount.ts rename to src/utils/useMount.ts diff --git a/src/utils-ts/usePrevious.ts b/src/utils/usePrevious.ts similarity index 100% rename from src/utils-ts/usePrevious.ts rename to src/utils/usePrevious.ts diff --git a/src/utils-ts/useResizeObserver.ts b/src/utils/useResizeObserver.ts similarity index 100% rename from src/utils-ts/useResizeObserver.ts rename to src/utils/useResizeObserver.ts diff --git a/src/utils-ts/useUnmount.ts b/src/utils/useUnmount.ts similarity index 100% rename from src/utils-ts/useUnmount.ts rename to src/utils/useUnmount.ts From 7825dddacfa4f9479c93ca579e2cecfe5eea53c6 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 22:08:55 -0500 Subject: [PATCH 047/110] feat(FieldData): add component --- src/core/FieldData.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/core/FieldData.tsx diff --git a/src/core/FieldData.tsx b/src/core/FieldData.tsx new file mode 100644 index 0000000..3a55dda --- /dev/null +++ b/src/core/FieldData.tsx @@ -0,0 +1,14 @@ +import { PropsWithChildren, useCallback } from 'react'; +import { FieldDataContext, useDataset } from './contexts'; + +export default function FieldData(props: PropsWithChildren) { + const dataset = useDataset(); + const getFieldData = useCallback(() => { + return dataset.getDataSet().getFieldData(); + }, [dataset]); + return ( + + {props.children} + + ); +} From 20d92b81cd77f89ed7736d9b581c6588aea17f45 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 22:09:58 -0500 Subject: [PATCH 048/110] feat(CellData): add component --- src/core/CellData.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/core/CellData.tsx diff --git a/src/core/CellData.tsx b/src/core/CellData.tsx new file mode 100644 index 0000000..2302bfb --- /dev/null +++ b/src/core/CellData.tsx @@ -0,0 +1,14 @@ +import { PropsWithChildren, useCallback } from 'react'; +import { FieldDataContext, useDataset } from './contexts'; + +export default function CellData(props: PropsWithChildren) { + const dataset = useDataset(); + const getCellData = useCallback(() => { + return dataset.getDataSet().getCellData(); + }, [dataset]); + return ( + + {props.children} + + ); +} From 7ac39a99372c7fe2d2e9768ba186ba993157aa2d Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 22:51:56 -0500 Subject: [PATCH 049/110] docs: update exampleship Some examples don't work with the rewrite yet. --- usage/src/App.jsx | 82 ++++++++++++++-------- usage/src/Geometry/Picking.jsx | 84 +++++++++++++++-------- usage/src/Geometry/PolyDataViewer.jsx | 3 +- usage/src/Geometry/SourceViewer.jsx | 17 +++-- usage/src/Geometry/TubeExample.jsx | 10 +-- usage/src/MultiView.jsx | 30 ++++---- usage/src/Tests/CameraTest.jsx | 45 ++++++++++++ usage/src/Tests/ChangeInteractorStyle.jsx | 36 ++++++++++ usage/src/Tests/PropertyUpdate.jsx | 75 ++++++++++++++++++++ usage/src/Tests/ShareGeometry.jsx | 39 +++++++++++ usage/src/Tests/SimpleSliceRendering.jsx | 50 ++++++++++++++ usage/src/styles.css | 3 + 12 files changed, 391 insertions(+), 83 deletions(-) create mode 100644 usage/src/Tests/CameraTest.jsx create mode 100644 usage/src/Tests/ChangeInteractorStyle.jsx create mode 100644 usage/src/Tests/PropertyUpdate.jsx create mode 100644 usage/src/Tests/ShareGeometry.jsx create mode 100644 usage/src/Tests/SimpleSliceRendering.jsx create mode 100644 usage/src/styles.css diff --git a/usage/src/App.jsx b/usage/src/App.jsx index 4f681e5..6cb0699 100644 --- a/usage/src/App.jsx +++ b/usage/src/App.jsx @@ -1,24 +1,34 @@ -import React, { lazy, Suspense } from 'react'; +import { lazy, StrictMode, Suspense } from 'react'; + +import './styles.css'; import useQueryString from './useQueryString'; const Picking = lazy(() => import('./Geometry/Picking')); -const OBJViewer = lazy(() => import('./Geometry/OBJViewer')); -const PointCloud = lazy(() => import('./Geometry/PointCloud')); +// const OBJViewer = lazy(() => import('./Geometry/OBJViewer')); +// const PointCloud = lazy(() => import('./Geometry/PointCloud')); const PolyDataViewer = lazy(() => import('./Geometry/PolyDataViewer')); const PolyDataWithData = lazy(() => import('./Geometry/PolyDataWithData')); -const ProcessingPipeline = lazy(() => import('./Geometry/ProcessingPipeline')); +// const ProcessingPipeline = lazy(() => import('./Geometry/ProcessingPipeline')); const SourceViewer = lazy(() => import('./Geometry/SourceViewer')); -const Glyph = lazy(() => import('./Geometry/Glyph')); -const CutterExample = lazy(() => import('./Geometry/CutterExample')); -const SliceRendering = lazy(() => import('./Volume/SliceRendering')); -const ImageSeriesRendering = lazy(() => import('./Volume/ImageSeriesRendering')); -const SyntheticVolumeRendering = lazy(() => - import('./Volume/SyntheticVolumeRendering') -); -const VolumeRendering = lazy(() => import('./Volume/VolumeRendering')); -const DynamicUpdate = lazy(() => import('./Volume/DynamicUpdate')); +const TubeExample = lazy(() => import('./Geometry/TubeExample')); +// const Glyph = lazy(() => import('./Geometry/Glyph')); +// const CutterExample = lazy(() => import('./Geometry/CutterExample')); +// const SliceRendering = lazy(() => import('./Volume/SliceRendering')); +// const ImageSeriesRendering = lazy(() => import('./Volume/ImageSeriesRendering')); +// const SyntheticVolumeRendering = lazy(() => +// import('./Volume/SyntheticVolumeRendering') +// ); +// const VolumeRendering = lazy(() => import('./Volume/VolumeRendering')); +// const DynamicUpdate = lazy(() => import('./Volume/DynamicUpdate')); const MultiView = lazy(() => import('./MultiView')); +const PropertyUpdate = lazy(() => import('./Tests/PropertyUpdate')); +const CameraTest = lazy(() => import('./Tests/CameraTest')); +const ShareGeometry = lazy(() => import('./Tests/ShareGeometry')); +const SimpleSliceRendering = lazy(() => import('./Tests/SimpleSliceRendering')); +const ChangeInteractorStyle = lazy(() => + import('./Tests/ChangeInteractorStyle') +); const demos = [ 'Geometry/Picking', @@ -30,19 +40,25 @@ const demos = [ 'Geometry/SourceViewer', 'Geometry/Glyph', 'Geometry/CutterExample', + 'Geometry/TubeExample', 'Volume/SliceRendering', 'Volume/ImageSeriesRendering', 'Volume/SyntheticVolumeRendering', 'Volume/VolumeRendering', 'Volume/DynamicUpdate', + 'Tests/PropertyUpdate', + 'Tests/CameraTest', + 'Tests/ShareGeometry', + 'Tests/SimpleSliceRendering', + 'Tests/ChangeInteractorStyle', 'MultiView', ]; function App() { - const [example, setExample] = useQueryString('demo', 'Geometry/Picking'); + const [example, setExample] = useQueryString('demo', 'Tests/PropertyUpdate'); return ( - <> +
@@ -77,31 +93,39 @@ function App() { border: 0, margin: 0, padding: 0, - width: '100vw', - height: '100vh', + width: example === 'MultiView' ? 'unset' : '100vw', + height: example === 'MultiView' ? 'unset' : '100vh', }} > Loading
}> + {example === 'MultiView' && } {example === 'Geometry/Picking' && } - {example === 'Geometry/OBJViewer' && } - {example === 'Geometry/PointCloud' && } {example === 'Geometry/PolyDataViewer' && } {example === 'Geometry/PolyDataWithData' && } - {example === 'Geometry/ProcessingPipeline' && } + {/* {example === 'Geometry/OBJViewer' && } */} + {/* {example === 'Geometry/PointCloud' && } */} + {/* example === 'Geometry/ProcessingPipeline' && */} {example === 'Geometry/SourceViewer' && } - {example === 'Geometry/Glyph' && } - {example === 'Geometry/CutterExample' && } - {example === 'Volume/SliceRendering' && } - {example === 'Volume/ImageSeriesRendering' && } - {example === 'Volume/SyntheticVolumeRendering' && ( + {example === 'Geometry/TubeExample' && } + {/* {example === 'Geometry/Glyph' && } */} + {/* {example === 'Geometry/CutterExample' && } */} + {/* {example === 'Volume/SliceRendering' && } */} + {/* example === 'Volume/ImageSeriesRendering' && */} + {/* example === 'Volume/SyntheticVolumeRendering' && ( + ) */} + {/* {example === 'Volume/VolumeRendering' && } */} + {/* {example === 'Volume/DynamicUpdate' && } */} + {example === 'Tests/PropertyUpdate' && } + {example === 'Tests/CameraTest' && } + {example === 'Tests/ShareGeometry' && } + {example === 'Tests/SimpleSliceRendering' && } + {example === 'Tests/ChangeInteractorStyle' && ( + )} - {example === 'Volume/VolumeRendering' && } - {example === 'Volume/DynamicUpdate' && } - {example === 'MultiView' && }
- + ); } diff --git a/usage/src/Geometry/Picking.jsx b/usage/src/Geometry/Picking.jsx index c53206c..24178d0 100644 --- a/usage/src/Geometry/Picking.jsx +++ b/usage/src/Geometry/Picking.jsx @@ -1,11 +1,12 @@ -import React, { useRef } from 'react'; +import { useCallback, useEffect, useRef } from 'react'; import { - View, + DataArray, GeometryRepresentation, - PolyData, + Picking, PointData, - DataArray, + PolyData, + View, } from 'react-vtk-js'; const points = []; @@ -17,14 +18,61 @@ for (let i = 0; i < 1000; i++) { points.push(Math.random() - 0.5); } -let isSelecting = 0; - // React complains about unique key prop but I don't see why -function Example(props) { +function Example() { const tooltip = useRef(null); + const viewRef = useRef(null); + const pickRef = useRef(null); + const isSelecting = useRef(0); + const toTooltip = (txt) => { tooltip.current.innerHTML = txt; }; + + const onHover = useCallback( + (e) => { + if (isSelecting.current) return; + toTooltip(`Hover: ${JSON.stringify(e, null, 2)}`); + }, + [isSelecting] + ); + + const onClick = useCallback( + (e) => { + if (isSelecting.current) { + isSelecting.current--; + } else { + toTooltip(`Click: ${JSON.stringify(e, null, 2)}`); + } + }, + [isSelecting] + ); + + const onSelect = useCallback((e) => { + // releasing the selection box triggers onClick + isSelecting.current = 2; + toTooltip(`Select: ${JSON.stringify(e, null, 2)}`); + }, []); + + // This is the alternative to onSelect from older versions of react-vtk-js. + useEffect(() => { + const style = viewRef.current.getInteractorStyle(); + // assumption: style is a vtkInteractorStyleManipulator + const mouseSelect = style + .getMouseManipulators() + .find((m) => m.isA('vtkMouseBoxSelectionManipulator')); + + if (mouseSelect) { + const sub = mouseSelect.onBoxSelectChange((ev) => { + const [x1, x2, y1, y2] = ev.selection; + onSelect(pickRef.current.pickWithFrustum(x1, y1, x2, y2)); + }); + return () => { + sub.unsubscribe(); + }; + } + }); + return (
-       {
-          if (isSelecting) {
-            isSelecting--;
-            return;
-          }
-          toTooltip(`Click: ${JSON.stringify(e, null, 2)}`);
-        }}
-        onHover={(e) => {
-          if (isSelecting) {
-            return;
-          }
-          toTooltip(`Hover: ${JSON.stringify(e, null, 2)}`);
-        }}
-        onSelect={(e) => {
-          isSelecting = 2;
-          toTooltip(`Select: ${JSON.stringify(e, null, 2)}`);
-        }}
-      >
+      
+        
         
       
diff --git a/usage/src/Geometry/SourceViewer.jsx b/usage/src/Geometry/SourceViewer.jsx
index dd5b587..c3f8eaa 100644
--- a/usage/src/Geometry/SourceViewer.jsx
+++ b/usage/src/Geometry/SourceViewer.jsx
@@ -1,18 +1,20 @@
-import React, { useState, useContext } from 'react';
+import vtkConeSource from '@kitware/vtk.js/Filters/Sources/ConeSource';
+import { useContext, useState } from 'react';
 
 import {
-  View,
-  GeometryRepresentation,
   Algorithm,
   Contexts,
+  GeometryRepresentation,
+  View,
 } from 'react-vtk-js';
 
 function Slider(props) {
   const view = useContext(Contexts.ViewContext);
+
   const onChange = (e) => {
     const value = Number(e.currentTarget.value);
     props.setValue(value);
-    setTimeout(view.renderView, 0);
+    view.requestRender();
   };
   return (
     
-      
+      
         
         
           
       
@@ -16,7 +16,7 @@ function Example(props) {
           }}
         >
           
       
- +
- + +
+
+
- +
- + +
+
+
- +
diff --git a/usage/src/Tests/CameraTest.jsx b/usage/src/Tests/CameraTest.jsx new file mode 100644 index 0000000..5b70438 --- /dev/null +++ b/usage/src/Tests/CameraTest.jsx @@ -0,0 +1,45 @@ +import { Algorithm, GeometryRepresentation, View } from 'react-vtk-js'; + +import vtkConeSource from '@kitware/vtk.js/Filters/Sources/ConeSource'; +import { useRef, useState } from 'react'; + +function Example() { + const [dop, setDOP] = useState([0, 0, -1]); + const [pos, setPosition] = useState([0, 0, 5]); + const [vup, setVUP] = useState([0, 1, 0]); + + const randomize = () => { + const flip = Math.random() < 0.5; + setDOP([0, 0, flip ? 1 : -1]); + const posOffset = Math.random() * 10 + 5; + setPosition([0, 0, flip ? -posOffset : posOffset]); + setVUP(Math.random() < 0.5 ? [1, 0, 0] : [0, 1, 0]); + }; + + const view = useRef(null); + + return ( +
+ + + + + +
+ +
+
+ ); +} + +export default Example; diff --git a/usage/src/Tests/ChangeInteractorStyle.jsx b/usage/src/Tests/ChangeInteractorStyle.jsx new file mode 100644 index 0000000..77a2042 --- /dev/null +++ b/usage/src/Tests/ChangeInteractorStyle.jsx @@ -0,0 +1,36 @@ +import { Algorithm, GeometryRepresentation, View } from 'react-vtk-js'; + +import vtkConeSource from '@kitware/vtk.js/Filters/Sources/ConeSource'; +import vtkInteractorStyleTrackballCamera from '@kitware/vtk.js/Interaction/Style/InteractorStyleTrackballCamera'; + +import { useRef, useState } from 'react'; + +function Example() { + const view = useRef(null); + + const [disabled, setDisabled] = useState(false); + + const settrackball = () => { + view.current.setInteractorStyle( + vtkInteractorStyleTrackballCamera.newInstance() + ); + setDisabled(true); + }; + + return ( +
+ + + + + +
+ +
+
+ ); +} + +export default Example; diff --git a/usage/src/Tests/PropertyUpdate.jsx b/usage/src/Tests/PropertyUpdate.jsx new file mode 100644 index 0000000..83d3fa9 --- /dev/null +++ b/usage/src/Tests/PropertyUpdate.jsx @@ -0,0 +1,75 @@ +import { useRef, useState } from 'react'; + +import { + Algorithm, + DataArray, + GeometryRepresentation, + PointData, + PolyData, + View, +} from 'react-vtk-js'; + +import vtkConeSource from '@kitware/vtk.js/Filters/Sources/ConeSource'; + +// React complains about unique key prop but I don't see why +function Example() { + const view = useRef(); + const rep = useRef(); + + const [height, setHeight] = useState(1); + const [colorByName, setColorByName] = useState('Temperature'); + const [preset, setPreset] = useState('Black-Body Radiation'); + const [range, setRange] = useState([0, 0.7]); + + const randomize = () => { + setHeight(Math.random() * 3); + setColorByName(Math.random() < 0.5 ? 'Temperature' : 'Pressure'); + setPreset(Math.random() < 0.5 ? 'Black-Body Radiation' : 'Cool to Warm'); + setRange([0, Math.random()]); + }; + + return ( +
+ + + + + + + + + + + + + +
+ +
+
+ ); +} + +export default Example; diff --git a/usage/src/Tests/ShareGeometry.jsx b/usage/src/Tests/ShareGeometry.jsx new file mode 100644 index 0000000..be16671 --- /dev/null +++ b/usage/src/Tests/ShareGeometry.jsx @@ -0,0 +1,39 @@ +import { + Algorithm, + GeometryRepresentation, + RegisterDataSet, + ShareDataSetRoot, + UseDataSet, + View, +} from 'react-vtk-js'; + +import vtkConeSource from '@kitware/vtk.js/Filters/Sources/ConeSource'; + +function Example() { + return ( +
+ + + + + + + + + + + + + +
+
+ ); +} + +export default Example; diff --git a/usage/src/Tests/SimpleSliceRendering.jsx b/usage/src/Tests/SimpleSliceRendering.jsx new file mode 100644 index 0000000..f15dd11 --- /dev/null +++ b/usage/src/Tests/SimpleSliceRendering.jsx @@ -0,0 +1,50 @@ +import { + DataArray, + ImageData, + PointData, + SliceRepresentation, + View, +} from 'react-vtk-js'; + +function generateRandomVolumeField(iMax, jMax, kMax) { + const array = []; + for (let k = 0; k < kMax; k++) { + for (let j = 0; j < jMax; j++) { + for (let i = 0; i < iMax; i++) { + array.push(Math.random()); + } + } + } + return array; +} + +const VALUES = generateRandomVolumeField(10, 10, 10); + +function Example() { + return ( +
+ + + + + + + + + +
+ ); +} + +export default Example; diff --git a/usage/src/styles.css b/usage/src/styles.css new file mode 100644 index 0000000..47a749b --- /dev/null +++ b/usage/src/styles.css @@ -0,0 +1,3 @@ +html, body, #root { + height: 100%; +} \ No newline at end of file From 9204b1858c669ea67cd6ad84a32cb71837b20b46 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 23:05:43 -0500 Subject: [PATCH 050/110] refactor(usage/App): easier modifying example list --- usage/src/App.jsx | 116 ++++++++++++++++------------------------------ 1 file changed, 41 insertions(+), 75 deletions(-) diff --git a/usage/src/App.jsx b/usage/src/App.jsx index 6cb0699..28f159b 100644 --- a/usage/src/App.jsx +++ b/usage/src/App.jsx @@ -4,58 +4,48 @@ import './styles.css'; import useQueryString from './useQueryString'; -const Picking = lazy(() => import('./Geometry/Picking')); -// const OBJViewer = lazy(() => import('./Geometry/OBJViewer')); -// const PointCloud = lazy(() => import('./Geometry/PointCloud')); -const PolyDataViewer = lazy(() => import('./Geometry/PolyDataViewer')); -const PolyDataWithData = lazy(() => import('./Geometry/PolyDataWithData')); -// const ProcessingPipeline = lazy(() => import('./Geometry/ProcessingPipeline')); -const SourceViewer = lazy(() => import('./Geometry/SourceViewer')); -const TubeExample = lazy(() => import('./Geometry/TubeExample')); -// const Glyph = lazy(() => import('./Geometry/Glyph')); -// const CutterExample = lazy(() => import('./Geometry/CutterExample')); -// const SliceRendering = lazy(() => import('./Volume/SliceRendering')); -// const ImageSeriesRendering = lazy(() => import('./Volume/ImageSeriesRendering')); -// const SyntheticVolumeRendering = lazy(() => -// import('./Volume/SyntheticVolumeRendering') -// ); -// const VolumeRendering = lazy(() => import('./Volume/VolumeRendering')); -// const DynamicUpdate = lazy(() => import('./Volume/DynamicUpdate')); -const MultiView = lazy(() => import('./MultiView')); -const PropertyUpdate = lazy(() => import('./Tests/PropertyUpdate')); -const CameraTest = lazy(() => import('./Tests/CameraTest')); -const ShareGeometry = lazy(() => import('./Tests/ShareGeometry')); -const SimpleSliceRendering = lazy(() => import('./Tests/SimpleSliceRendering')); -const ChangeInteractorStyle = lazy(() => - import('./Tests/ChangeInteractorStyle') -); - -const demos = [ - 'Geometry/Picking', - 'Geometry/OBJViewer', - 'Geometry/PointCloud', - 'Geometry/PolyDataViewer', - 'Geometry/PolyDataWithData', - 'Geometry/ProcessingPipeline', - 'Geometry/SourceViewer', - 'Geometry/Glyph', - 'Geometry/CutterExample', - 'Geometry/TubeExample', - 'Volume/SliceRendering', - 'Volume/ImageSeriesRendering', - 'Volume/SyntheticVolumeRendering', - 'Volume/VolumeRendering', - 'Volume/DynamicUpdate', - 'Tests/PropertyUpdate', - 'Tests/CameraTest', - 'Tests/ShareGeometry', - 'Tests/SimpleSliceRendering', - 'Tests/ChangeInteractorStyle', - 'MultiView', -]; +const demos = new Map([ + ['Geometry/Picking', lazy(() => import('./Geometry/Picking'))], + // ['Geometry/OBJViewer', lazy(() => import('./Geometry/OBJViewer'))], + // ['Geometry/PointCloud', lazy(() => import('./Geometry/PointCloud'))], + ['Geometry/PolyDataViewer', lazy(() => import('./Geometry/PolyDataViewer'))], + [ + 'Geometry/PolyDataWithData', + lazy(() => import('./Geometry/PolyDataWithData')), + ], + // [ + // 'Geometry/ProcessingPipeline', + // lazy(() => import('./Geometry/ProcessingPipeline')), + // ], + ['Geometry/SourceViewer', lazy(() => import('./Geometry/SourceViewer'))], + // ['Geometry/Glyph', lazy(() => import('./Geometry/Glyph'))], + // ['Geometry/CutterExample', lazy(() => import('./Geometry/CutterExample'))], + ['Geometry/TubeExample', lazy(() => import('./Geometry/TubeExample'))], + // ['Volume/SliceRendering', lazy(() => import('./Volume/SliceRendering'))], + // ['Volume/ImageSeriesRendering', lazy(() => import('./Volume/ImageSeriesRendering'))], + // [ + // 'Volume/SyntheticVolumeRendering', + // lazy(() => import('./Volume/SyntheticVolumeRendering')), + // ], + // ['Volume/VolumeRendering', lazy(() => import('./Volume/VolumeRendering'))], + // ['Volume/DynamicUpdate', lazy(() => import('./Volume/DynamicUpdate'))], + ['Tests/PropertyUpdate', lazy(() => import('./Tests/PropertyUpdate'))], + ['Tests/CameraTest', lazy(() => import('./Tests/CameraTest'))], + ['Tests/ShareGeometry', lazy(() => import('./Tests/ShareGeometry'))], + [ + 'Tests/SimpleSliceRendering', + lazy(() => import('./Tests/SimpleSliceRendering')), + ], + [ + 'Tests/ChangeInteractorStyle', + lazy(() => import('./Tests/ChangeInteractorStyle')), + ], + ['MultiView', lazy(() => import('./MultiView'))], +]); function App() { const [example, setExample] = useQueryString('demo', 'Tests/PropertyUpdate'); + const ExampleComponent = demos.get(example); return ( @@ -68,7 +58,7 @@ function App() { setExample(e.target.value); }} > - {demos.map((option) => ( + {[...demos.keys()].map((option) => ( ))} @@ -98,31 +88,7 @@ function App() { }} > Loading
}> - {example === 'MultiView' && } - {example === 'Geometry/Picking' && } - {example === 'Geometry/PolyDataViewer' && } - {example === 'Geometry/PolyDataWithData' && } - {/* {example === 'Geometry/OBJViewer' && } */} - {/* {example === 'Geometry/PointCloud' && } */} - {/* example === 'Geometry/ProcessingPipeline' && */} - {example === 'Geometry/SourceViewer' && } - {example === 'Geometry/TubeExample' && } - {/* {example === 'Geometry/Glyph' && } */} - {/* {example === 'Geometry/CutterExample' && } */} - {/* {example === 'Volume/SliceRendering' && } */} - {/* example === 'Volume/ImageSeriesRendering' && */} - {/* example === 'Volume/SyntheticVolumeRendering' && ( - - ) */} - {/* {example === 'Volume/VolumeRendering' && } */} - {/* {example === 'Volume/DynamicUpdate' && } */} - {example === 'Tests/PropertyUpdate' && } - {example === 'Tests/CameraTest' && } - {example === 'Tests/ShareGeometry' && } - {example === 'Tests/SimpleSliceRendering' && } - {example === 'Tests/ChangeInteractorStyle' && ( - - )} +
From 501e6ecf6b8422482f956d85a6329e2d90d52edf Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 23:07:33 -0500 Subject: [PATCH 051/110] fix(RenderWindow): setState race conditions It's possible for a queueRender to get batched with a setRenderRequested(false), resulting in the effect running once and caching a value of true for renderRequested. This prevents the effect from ever running again. --- src/core/RenderWindow.tsx | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/core/RenderWindow.tsx b/src/core/RenderWindow.tsx index 64a2e02..01f45e0 100644 --- a/src/core/RenderWindow.tsx +++ b/src/core/RenderWindow.tsx @@ -7,7 +7,7 @@ import { useEffect, useImperativeHandle, useMemo, - useState, + useRef, } from 'react'; import { IRenderWindow } from '../types'; import deletionRegistry from '../utils/DeletionRegistry'; @@ -60,16 +60,16 @@ export default forwardRef(function RenderWindow(props: Props, fwdRef) { // --- rendering --- // - const [renderRequested, setRenderRequested] = useState(false); - const queueRender = () => setRenderRequested(true); - - useEffect(() => { - if (renderRequested) { - setRenderRequested(false); - const renderWindow = getRenderWindow(); - renderWindow.render(); + const renderTimeoutRef = useRef(null); + const queueRender = useCallback(() => { + if (renderTimeoutRef.current == null) { + renderTimeoutRef.current = setTimeout(() => { + const renderWindow = getRenderWindow(); + renderWindow.render(); + renderTimeoutRef.current = null; + }); } - }, [renderRequested, getRenderWindow]); + }, [getRenderWindow]); // --- resize --- // @@ -98,7 +98,7 @@ export default forwardRef(function RenderWindow(props: Props, fwdRef) { getInteractor, requestRender: queueRender, }), - [getRenderWindow, getInteractor] + [getRenderWindow, getInteractor, queueRender] ); useImperativeHandle(fwdRef, () => api); From dabebc6d69e89230a18d999dcc37294488dbcf03 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 31 Jan 2023 23:42:34 -0500 Subject: [PATCH 052/110] fix(Picking): getCanvas fix --- src/core/Picking.ts | 6 +++++- src/global.d.ts | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/Picking.ts b/src/core/Picking.ts index 7c63897..827570e 100644 --- a/src/core/Picking.ts +++ b/src/core/Picking.ts @@ -1,5 +1,6 @@ import { FieldAssociations } from '@kitware/vtk.js/Common/DataModel/DataSet/Constants.js'; import vtkOpenGLHardwareSelector from '@kitware/vtk.js/Rendering/OpenGL/HardwareSelector'; +import { FixedVTKOpenGLRenderWindow } from '@kitware/vtk.js/type-patches'; import { Vector2, Vector3 } from '@kitware/vtk.js/types'; import { forwardRef, @@ -341,7 +342,10 @@ export default forwardRef(function ViewPicking(props: Props, fwdRef) { const getScreenEventPositionFor = useCallback( (source: MouseEvent) => { const rw = openGLRenderWindowAPI.get(); - const bounds = rw.getCanvas().getBoundingClientRect(); + const canvas = (rw as FixedVTKOpenGLRenderWindow).getCanvas(); + if (!canvas) return { x: 0, y: 0, z: 0 }; + + const bounds = canvas.getBoundingClientRect(); const [canvasWidth, canvasHeight] = rw.getSize(); const scaleX = canvasWidth / bounds.width; const scaleY = canvasHeight / bounds.height; diff --git a/src/global.d.ts b/src/global.d.ts index e76039b..e8ae938 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -2,12 +2,16 @@ declare module '@kitware/vtk.js/type-patches' { import { EventHandler, vtkSubscription } from '@kitware/vtk.js/interfaces'; import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; - + import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; export interface FixedVTKRenderWindowInteractor extends vtkRenderWindowInteractor { setCurrentRenderer(ren: vtkRenderer): void; } + export interface FixedVTKOpenGLRenderWindow extends vtkOpenGLRenderWindow { + getCanvas(): HTMLElement | null; + } + export interface VtkRendererEvent { type: | 'ComputeVisiblePropBoundsEvent' From 913f80b220b00d26beb2fb675d87c4187d54d31b Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 1 Feb 2023 10:08:15 -0500 Subject: [PATCH 053/110] chore: update vtk.js --- package.json | 4 ++-- usage/package-lock.json | 16 ++++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 28371c1..5951ef3 100644 --- a/package.json +++ b/package.json @@ -15,12 +15,12 @@ }, "scripts": { "prebuild": "npm run fix", - "build": "rimraf dist && rollup ./src/index.js -c", + "build": "rimraf dist && rollup -c", "prepare": "npm run build", "test": "npm run test:lint && npm run test:build", "test:build": "npm run build", "test:lint": "eslint src", - "fix:prettier": "prettier --config .prettierrc --write \"src/**/*.js\"", + "fix:prettier": "prettier --config .prettierrc --write \"src/**/*.tsx?\"", "fix:eslint": "eslint --fix src", "fix": "npm run fix:prettier && npm run fix:eslint", "predeploy": "cd usage && npm install && npm run build", diff --git a/usage/package-lock.json b/usage/package-lock.json index 986a03c..3eb99c4 100644 --- a/usage/package-lock.json +++ b/usage/package-lock.json @@ -21,7 +21,9 @@ "version": "0.0.1", "license": "BSD-3-Clause", "dependencies": { - "@babel/runtime": "^7.12.5" + "@babel/eslint-parser": "^7.19.1", + "@babel/runtime": "^7.19.0", + "deep-equal": "^2.0.5" }, "devDependencies": { "@babel/core": "^7.19.1", @@ -34,6 +36,7 @@ "@rollup/plugin-commonjs": "22.0.2", "@rollup/plugin-eslint": "^8.0.2", "@rollup/plugin-node-resolve": "^14.1.0", + "@types/deep-equal": "^1.0.1", "@types/react": "^18.0.21", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", @@ -2268,16 +2271,17 @@ "@rollup/plugin-commonjs": "22.0.2", "@rollup/plugin-eslint": "^8.0.2", "@rollup/plugin-node-resolve": "^14.1.0", + "@types/deep-equal": "^1.0.1", "@types/react": "^18.0.21", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", "commitizen": "4.2.5", "cross-env": "^7.0.2", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.7.0", - "eslint-config-standard": "^14.1.0", - "eslint-config-standard-react": "^9.2.0", - "eslint-plugin-import": "^2.18.2", + "deep-equal": "^2.0.5", + "eslint": "^8.23.1", + "eslint-config-prettier": "^8.5.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.26.0", "eslint-plugin-node": "^11.0.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.0.1", From e54e0b8a8892f0bf2af44451c5476514073f7c24 Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 1 Feb 2023 10:21:20 -0500 Subject: [PATCH 054/110] style: remove unused comments --- src/core/internal/view-shared.ts | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/src/core/internal/view-shared.ts b/src/core/internal/view-shared.ts index 3fc5533..e5d4399 100644 --- a/src/core/internal/view-shared.ts +++ b/src/core/internal/view-shared.ts @@ -9,34 +9,6 @@ export interface Props OpenGLRenderWindowProps, RenderWindowProps, RendererProps { - /** - * List of picking listeners to bind. By default it is disabled (empty array). - */ - // pickingModes?: 'click' | 'hover' | 'select' | 'mouseDown' | 'mouseUp'; - /** - * User callback function for click - */ - // onClick?: () => void; - /** - * User callback function for mouse down - */ - // onMouseDown?: () => void; - /** - * User callback function for mouse up - */ - // onMouseUp?: () => void; - /** - * User callback function for hover - */ - // onHover?: () => void; - /** - * User callback function for box select - */ - // onSelect?: () => void; - /** - * Defines the tolerance of the click and hover selection. - */ - // pointerSize?: number; /** * Show/Hide orientation axes. */ From 65fdbdf957d94655a419e152b28056d4588f7cee Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 1 Feb 2023 12:10:22 -0500 Subject: [PATCH 055/110] chore: initial typescript types gen --- package.json | 6 ++-- rollup.config.js | 74 +++++++++++------------------------------------- tsconfig.json | 7 +++-- 3 files changed, 25 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index 5951ef3..87ce6da 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "license": "BSD-3-Clause", "repository": "Kitware/react-vtk-js", "main": "dist/umd/react-vtk.js", - "module": "dist/ts/index.js", + "module": "dist/esm/index.js", "source": "src/index.ts", "dependencies": { "@babel/eslint-parser": "^7.19.1", @@ -14,7 +14,7 @@ "deep-equal": "^2.0.5" }, "scripts": { - "prebuild": "npm run fix", + "prebuild": "npm run test:lint", "build": "rimraf dist && rollup -c", "prepare": "npm run build", "test": "npm run test:lint && npm run test:build", @@ -76,4 +76,4 @@ "files": [ "dist" ] -} +} \ No newline at end of file diff --git a/rollup.config.js b/rollup.config.js index 54ab87c..24ce05b 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,16 +1,12 @@ import { babel } from '@rollup/plugin-babel'; import commonjs from '@rollup/plugin-commonjs'; -import eslint from '@rollup/plugin-eslint'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import typescript from '@rollup/plugin-typescript'; import analyze from 'rollup-plugin-analyzer'; import { terser } from 'rollup-plugin-terser'; const plugins = [ - !process.env.NOLINT && - eslint({ - include: 'src/**/*.[tj]sx?', - exclude: 'node_modules/**', - }), + typescript(), babel({ include: 'src/**', exclude: 'node_modules/**', @@ -20,7 +16,6 @@ const plugins = [ plugins: ['@babel/plugin-transform-runtime'], }), commonjs(), - terser(), analyze({ stdout: true, summaryOnly: true, @@ -28,17 +23,17 @@ const plugins = [ ]; const external = [ - '@babel/runtime', - '@kitware/vtk.js', - 'prop-types', + /^@babel\/runtime\/?/, + /^@kitware\/vtk\.js/, 'react', + 'react/jsx-runtime', 'regenerator-runtime', + 'deep-equal', ]; export default [ - /* { - input: 'src/index.js', + input: 'src/index.ts', output: [ { dir: 'dist/esm', @@ -52,10 +47,17 @@ export default [ }, ], external, - plugins, + plugins: [ + nodeResolve({ + browser: true, + preferBuiltins: false, + extensions: ['.js', '.ts', '.tsx'], + }), + ...plugins, + ], }, { - input: 'src/index.js', + input: 'src/index.ts', output: [ { file: 'dist/umd/react-vtk.js', @@ -73,49 +75,7 @@ export default [ browser: true, }), ...plugins, - ], - }, - */ - { - input: 'src/index.ts', - output: { - dir: 'dist/ts', - format: 'es', - preserveModules: true, - preserveModulesRoot: 'src', - }, - external: [ - /^@babel\/runtime\/?/, - /^@kitware\/vtk\.js/, - 'react', - 'react/jsx-runtime', - 'regenerator-runtime', - 'deep-equal', - ], - plugins: [ - nodeResolve({ - browser: true, - preferBuiltins: false, - extensions: ['.js', '.ts', '.tsx'], - }), - commonjs(), - babel({ - include: 'src/**', - exclude: '**/node_modules/**', - extensions: ['.js', '.ts', '.tsx'], - babelHelpers: 'runtime', - presets: [ - '@babel/env', - [ - '@babel/preset-react', - { - runtime: 'automatic', - }, - ], - '@babel/preset-typescript', - ], - plugins: ['@babel/plugin-transform-runtime'], - }), + terser(), ], }, ]; diff --git a/tsconfig.json b/tsconfig.json index 2bea2a2..1963ad3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,10 +7,13 @@ "lib": ["es2017", "DOM"], "strict": true, "esModuleInterop": false, - "outDir": "dist/ts", + "outDir": "dist/esm", "rootDir": "./", "jsx": "react-jsx", - "allowSyntheticDefaultImports": true + "allowSyntheticDefaultImports": true, + "declaration": true, + "declarationDir": "dist/esm", + "emitDeclarationOnly": true }, "include": ["./src/**/*.ts", "./src/**/*.tsx"] } From 29c44c36177a8b31bc7f0b19a45059609d13c4a3 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 14 Feb 2023 12:14:19 -0500 Subject: [PATCH 056/110] feat(Reader): port over this component --- src/core/Reader.tsx | 149 ++++++++++++++++++++++++++++++++++++++++++++ src/index.ts | 1 + 2 files changed, 150 insertions(+) create mode 100644 src/core/Reader.tsx diff --git a/src/core/Reader.tsx b/src/core/Reader.tsx new file mode 100644 index 0000000..71e8a39 --- /dev/null +++ b/src/core/Reader.tsx @@ -0,0 +1,149 @@ +import { toArrayBuffer } from '@kitware/vtk.js/Common/Core/Base64.js'; +import { vtkAlgorithm, vtkObject } from '@kitware/vtk.js/interfaces'; +import vtk from '@kitware/vtk.js/vtk'; +import { PropsWithChildren, useCallback, useEffect, useRef } from 'react'; +import { VtkConstructor } from '../types'; +import deletionRegistry from '../utils/DeletionRegistry'; +import { useDownstream, useRepresentation } from './contexts'; + +export interface ReaderProps extends PropsWithChildren { + /** + * Can either be a string containing the name of the vtkClass or a vtk object constructor. + * + * If a string, then that vtk class must be registered (i.e. by import). + */ + vtkClass: string | VtkConstructor; + + /** + * An optional port number for connections. + */ + port?: number; + + /** + * Download data from a URL. + * + * Must be CORS-accessible. + * + * This option is for convenience. If you want more fine-grained + * control over fetching (i.e. aborting, options, etc.) then it + * is advisable to fetch the data yourself and pass it into the + * reader via `arrayBuffer`, `base64ArrayBuffer`, or `text`. + */ + url?: string; + + /** + * An object of options passed to the reader's setUrl() function. + * + * See the reader's docs for more details. + */ + urlOptions?: object; + + /** + * ArrayBuffer containing data to parse. + */ + arrayBuffer?: ArrayBuffer; + /** + * ArrayBuffer containing data to parse, in a base64 string. + */ + base64ArrayBuffer?: string; + /** + * Textual representation of the data. + */ + text?: string; +} + +interface vtkReader extends vtkAlgorithm, vtkObject { + setUrl(url: string, options?: object): Promise; + parseAsArrayBuffer(ab: ArrayBuffer): void; + parseAsText(text: string): void; +} + +/** + * Reads data and produces vtkObjects. + */ +export default function Reader(props: ReaderProps) { + const { vtkClass, url, urlOptions, arrayBuffer, base64ArrayBuffer, text } = + props; + + if ([url, arrayBuffer, base64ArrayBuffer, text].filter(Boolean).length > 1) { + console.warn( + ': multiple data options provided. Please only provide one.' + ); + } + + const representation = useRepresentation(); + + const createReader = useCallback(() => { + if (typeof vtkClass === 'string') { + return vtk({ vtkClass }) as vtkReader; + } + return vtkClass.newInstance() as vtkReader; + }, [vtkClass]); + + // --- reader creation --- // + + const readerRef = useRef(null); + + useEffect(() => { + const reader = createReader(); + deletionRegistry.register(reader, () => reader.delete()); + readerRef.current = reader; + return () => { + deletionRegistry.markForDeletion(reader); + }; + }, [createReader]); + + // --- url handling --- // + + useEffect(() => { + const reader = readerRef.current; + if (!reader || !url) return; + + reader.setUrl(url, urlOptions).then(() => { + if (reader.isDeleted()) return; + representation.dataAvailable(); + }); + }, [url, urlOptions, representation]); + + // --- arrayBuffer --- // + + useEffect(() => { + const reader = readerRef.current; + if (!reader || !arrayBuffer) return; + + reader.parseAsArrayBuffer(arrayBuffer); + representation.dataAvailable(); + }, [arrayBuffer, representation]); + + // --- base64 string of ArrayBuffer --- // + + useEffect(() => { + const reader = readerRef.current; + if (!reader || !base64ArrayBuffer) return; + + reader.parseAsArrayBuffer(toArrayBuffer(base64ArrayBuffer)); + representation.dataAvailable(); + }, [base64ArrayBuffer, representation]); + + // --- text --- // + + useEffect(() => { + const reader = readerRef.current; + if (!reader || !text) return; + + reader.parseAsText(text); + representation.dataAvailable(); + }, [text, representation]); + + // --- downstream registration --- // + + const downstream = useDownstream(); + const { port } = props; + + useEffect(() => { + const reader = readerRef.current; + if (!reader) return; + + downstream.setInputConnection(reader.getOutputPort(), port); + }); +} diff --git a/src/index.ts b/src/index.ts index 9fc8307..af13bd8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,6 +14,7 @@ export * from './core/Picking'; export { default as Picking } from './core/Picking'; export { default as PointData } from './core/PointData'; export { default as PolyData } from './core/PolyData'; +export { default as Reader } from './core/Reader'; export { RegisterDataSet, ShareDataSetRoot, From 4fcc1922d98b07db4b3072eb812c54d926dea20c Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 14 Feb 2023 12:14:55 -0500 Subject: [PATCH 057/110] docs(usage): update Reader examples --- usage/src/App.jsx | 4 ++-- usage/src/Geometry/CutterExample.jsx | 8 +++++--- usage/src/Geometry/OBJViewer.jsx | 6 +++--- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/usage/src/App.jsx b/usage/src/App.jsx index 28f159b..a95ae75 100644 --- a/usage/src/App.jsx +++ b/usage/src/App.jsx @@ -6,7 +6,7 @@ import useQueryString from './useQueryString'; const demos = new Map([ ['Geometry/Picking', lazy(() => import('./Geometry/Picking'))], - // ['Geometry/OBJViewer', lazy(() => import('./Geometry/OBJViewer'))], + ['Geometry/OBJViewer', lazy(() => import('./Geometry/OBJViewer'))], // ['Geometry/PointCloud', lazy(() => import('./Geometry/PointCloud'))], ['Geometry/PolyDataViewer', lazy(() => import('./Geometry/PolyDataViewer'))], [ @@ -19,7 +19,7 @@ const demos = new Map([ // ], ['Geometry/SourceViewer', lazy(() => import('./Geometry/SourceViewer'))], // ['Geometry/Glyph', lazy(() => import('./Geometry/Glyph'))], - // ['Geometry/CutterExample', lazy(() => import('./Geometry/CutterExample'))], + ['Geometry/CutterExample', lazy(() => import('./Geometry/CutterExample'))], ['Geometry/TubeExample', lazy(() => import('./Geometry/TubeExample'))], // ['Volume/SliceRendering', lazy(() => import('./Volume/SliceRendering'))], // ['Volume/ImageSeriesRendering', lazy(() => import('./Volume/ImageSeriesRendering'))], diff --git a/usage/src/Geometry/CutterExample.jsx b/usage/src/Geometry/CutterExample.jsx index cf0faa2..0e70e86 100644 --- a/usage/src/Geometry/CutterExample.jsx +++ b/usage/src/Geometry/CutterExample.jsx @@ -1,8 +1,10 @@ -import React from 'react'; - import { newInstance as newVtkPlaneInstance } from '@kitware/vtk.js/Common/DataModel/Plane.js'; -import { Algorithm, View, GeometryRepresentation, Reader } from 'react-vtk-js'; +// vtkCutter +import '@kitware/vtk.js/Filters/Core/Cutter'; +// vtkOBJReader +import '@kitware/vtk.js/IO/Misc/OBJReader'; +import { Algorithm, GeometryRepresentation, Reader, View } from 'react-vtk-js'; function Example(props) { const plane = newVtkPlaneInstance({ diff --git a/usage/src/Geometry/OBJViewer.jsx b/usage/src/Geometry/OBJViewer.jsx index 5ba6c6d..fb43c97 100644 --- a/usage/src/Geometry/OBJViewer.jsx +++ b/usage/src/Geometry/OBJViewer.jsx @@ -1,6 +1,6 @@ -import React from 'react'; - -import { View, GeometryRepresentation, Reader } from 'react-vtk-js'; +// imports vtkOBJReader +import '@kitware/vtk.js/IO/Misc/OBJReader'; +import { GeometryRepresentation, Reader, View } from 'react-vtk-js'; // React complains about unique key prop but I don't see why function Example(props) { From f4b4d691027b34d3e80b14fed5f2a07d40438a66 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 14 Feb 2023 15:17:02 -0500 Subject: [PATCH 058/110] fix(useInteractorStyle): set style immediately Do not wait for a react render to set the interactor style. Additionally, do not handle reference counting externally set styles since we do not control their lifecycle. --- src/core/modules/useInteractorStyle.ts | 55 +++++++++++--------------- 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/src/core/modules/useInteractorStyle.ts b/src/core/modules/useInteractorStyle.ts index 2f0bada..26776db 100644 --- a/src/core/modules/useInteractorStyle.ts +++ b/src/core/modules/useInteractorStyle.ts @@ -24,11 +24,10 @@ import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyl import vtkInteractorStyleManipulator from '@kitware/vtk.js/Interaction/Style/InteractorStyleManipulator'; import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; import deepEqual from 'deep-equal'; -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect } from 'react'; import deletionRegistry from '../../utils/DeletionRegistry'; import useComparableEffect from '../../utils/useComparableEffect'; import useGetterRef from '../../utils/useGetterRef'; -import useUnmount from '../../utils/useUnmount'; interface PanSettings extends IMouseCameraTrackballPanManipulatorInitialValues { action: 'Pan'; @@ -117,53 +116,43 @@ export function useInteractorStyleManipulatorSettings( export function useInteractorStyle( getInteractor: () => vtkRenderWindowInteractor | null ) { - const [externalStyle, setExternalStyle] = useState( - null - ); - const [styleRef, getStyle] = useGetterRef(() => { - setExternalStyle(null); const style = vtkInteractorStyleManipulator.newInstance(); deletionRegistry.register(style, () => style.delete()); return style; }); + const setStyle = useCallback( + (style: vtkInteractorStyle) => { + const interactor = getInteractor(); + if (!interactor) return; + interactor.setInteractorStyle(style ?? styleRef.current); + }, + [getInteractor, styleRef] + ); + useEffect(() => { const interactor = getInteractor(); if (!interactor) return; - const style = externalStyle ?? getStyle(); - interactor.setInteractorStyle(style); - deletionRegistry.incRefCount(interactor); - deletionRegistry.incRefCount(style); + if (styleRef.current) { + setStyle(styleRef.current); + } return () => { - if (interactor.getInteractorStyle() === style) { - interactor.setInteractorStyle(null); - } - deletionRegistry.decRefCount(interactor); - deletionRegistry.incRefCount(style); - }; - }); - - useUnmount(() => { - if (styleRef.current && !externalStyle) { - deletionRegistry.markForDeletion(styleRef.current); - styleRef.current = null; - } - }); + if (styleRef.current) { + if (interactor.getInteractorStyle() === styleRef.current) { + interactor.setInteractorStyle(null); + } - const setStyle = useCallback( - (style: vtkInteractorStyle) => { - if (!externalStyle && styleRef.current) { deletionRegistry.markForDeletion(styleRef.current); + styleRef.current = null; } - styleRef.current = style; - setExternalStyle(style); - }, - [externalStyle, styleRef] - ); + + deletionRegistry.decRefCount(interactor); + }; + }, [getInteractor, styleRef, setStyle]); return [getStyle, setStyle] as const; } From 169c5e4b8898486e85ebd9cfa518c57104d952a9 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 14 Feb 2023 15:17:54 -0500 Subject: [PATCH 059/110] fix(useCamera): filter out any null props --- src/core/modules/useCamera.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/core/modules/useCamera.ts b/src/core/modules/useCamera.ts index d3775b9..cbb0113 100644 --- a/src/core/modules/useCamera.ts +++ b/src/core/modules/useCamera.ts @@ -22,6 +22,14 @@ export default function useCamera( const camera = getCamera(); const mtime = camera.getMTime(); + // filter out any null props + Object.keys(cameraProps).forEach((key) => { + const name = key as keyof ICameraInitialValues; + if (!cameraProps[name]) { + delete cameraProps[name]; + } + }); + camera.set(cameraProps); // force-set focal point and direction of projection, From 598be454714441d05a5c3baf9e6d514c26a2fdb3 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 14 Feb 2023 15:18:08 -0500 Subject: [PATCH 060/110] fix(SliceRepresentation): copy-paste error --- src/core/SliceRepresentation.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/SliceRepresentation.tsx b/src/core/SliceRepresentation.tsx index 3a35ed4..f682fa3 100644 --- a/src/core/SliceRepresentation.tsx +++ b/src/core/SliceRepresentation.tsx @@ -162,23 +162,23 @@ export default forwardRef(function SliceRepresentation(props: Props, fwdRef) { }, [iSlice, getMapper, trackModified]); useEffect(() => { - if (jSlice != null) trackModified(getMapper().setISlice(jSlice)); + if (jSlice != null) trackModified(getMapper().setJSlice(jSlice)); }, [jSlice, getMapper, trackModified]); useEffect(() => { - if (kSlice != null) trackModified(getMapper().setISlice(kSlice)); + if (kSlice != null) trackModified(getMapper().setKSlice(kSlice)); }, [kSlice, getMapper, trackModified]); useEffect(() => { - if (xSlice != null) trackModified(getMapper().setISlice(xSlice)); + if (xSlice != null) trackModified(getMapper().setXSlice(xSlice)); }, [xSlice, getMapper, trackModified]); useEffect(() => { - if (ySlice != null) trackModified(getMapper().setISlice(ySlice)); + if (ySlice != null) trackModified(getMapper().setYSlice(ySlice)); }, [ySlice, getMapper, trackModified]); useEffect(() => { - if (zSlice != null) trackModified(getMapper().setISlice(zSlice)); + if (zSlice != null) trackModified(getMapper().setZSlice(zSlice)); }, [zSlice, getMapper, trackModified]); // --- // From 596456e0a1fb48338295da101b0bb54adf2f331a Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 14 Feb 2023 15:18:40 -0500 Subject: [PATCH 061/110] feat(IRepresentation): expose actor and mapper --- src/core/Geometry2DRepresentation.tsx | 4 +++- src/core/GeometryRepresentation.tsx | 4 +++- src/core/ShareDataSet.tsx | 2 ++ src/core/SliceRepresentation.tsx | 4 +++- src/types.ts | 4 ++++ 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/core/Geometry2DRepresentation.tsx b/src/core/Geometry2DRepresentation.tsx index f8aaaee..95b2114 100644 --- a/src/core/Geometry2DRepresentation.tsx +++ b/src/core/Geometry2DRepresentation.tsx @@ -161,8 +161,10 @@ export default forwardRef(function Geometry2DRepresentation( setDataAvailable(true); representation.dataChanged(); }, + getActor, + getMapper, }), - [renderer] + [renderer, getActor, getMapper] ); const downstream = useMemo( diff --git a/src/core/GeometryRepresentation.tsx b/src/core/GeometryRepresentation.tsx index db515b3..2a254de 100644 --- a/src/core/GeometryRepresentation.tsx +++ b/src/core/GeometryRepresentation.tsx @@ -174,8 +174,10 @@ export default forwardRef(function GeometryRepresentation( setDataAvailable(true); representation.dataChanged(); }, + getActor, + getMapper, }), - [renderer] + [renderer, getActor, getMapper] ); const downstream = useMemo( diff --git a/src/core/ShareDataSet.tsx b/src/core/ShareDataSet.tsx index 1010ed1..7cb2a46 100644 --- a/src/core/ShareDataSet.tsx +++ b/src/core/ShareDataSet.tsx @@ -175,6 +175,8 @@ export function RegisterDataSet(props: RegisterDataSetProps) { dataAvailable() { share.dispatchDataAvailable(id); }, + getActor: () => null, + getMapper: () => null, }), [id, share] ); diff --git a/src/core/SliceRepresentation.tsx b/src/core/SliceRepresentation.tsx index f682fa3..adc9e4f 100644 --- a/src/core/SliceRepresentation.tsx +++ b/src/core/SliceRepresentation.tsx @@ -201,8 +201,10 @@ export default forwardRef(function SliceRepresentation(props: Props, fwdRef) { setDataAvailable(true); representation.dataChanged(); }, + getActor, + getMapper, }), - [renderer] + [renderer, getActor, getMapper] ); const downstream = useMemo( diff --git a/src/types.ts b/src/types.ts index 95402fd..4735aa0 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,6 +1,8 @@ import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; import { vtkObject } from '@kitware/vtk.js/interfaces'; +import vtkAbstractMapper from '@kitware/vtk.js/Rendering/Core/AbstractMapper'; import vtkCamera from '@kitware/vtk.js/Rendering/Core/Camera'; +import vtkProp from '@kitware/vtk.js/Rendering/Core/Prop'; import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow'; import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; @@ -70,6 +72,8 @@ export interface IView { export interface IRepresentation { dataAvailable(): void; dataChanged(): void; + getActor(): vtkProp | null; + getMapper(): vtkAbstractMapper | null; } // There is no sufficient type that overlaps classes like From 8020f1fe4593d6e80f407736d5b20dc36fcb88b2 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 14 Feb 2023 18:13:30 -0500 Subject: [PATCH 062/110] fix(RenderWindow): queue a render after resize --- src/core/RenderWindow.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/core/RenderWindow.tsx b/src/core/RenderWindow.tsx index 01f45e0..3136653 100644 --- a/src/core/RenderWindow.tsx +++ b/src/core/RenderWindow.tsx @@ -64,9 +64,9 @@ export default forwardRef(function RenderWindow(props: Props, fwdRef) { const queueRender = useCallback(() => { if (renderTimeoutRef.current == null) { renderTimeoutRef.current = setTimeout(() => { + renderTimeoutRef.current = null; const renderWindow = getRenderWindow(); renderWindow.render(); - renderTimeoutRef.current = null; }); } }, [getRenderWindow]); @@ -78,14 +78,13 @@ export default forwardRef(function RenderWindow(props: Props, fwdRef) { if (!container) return; const renderWindowView = openGLRenderWindow.get(); - const renderWindow = getRenderWindow(); const devicePixelRatio = window.devicePixelRatio || 1; const { width, height } = container.getBoundingClientRect(); const w = Math.floor(width * devicePixelRatio); const h = Math.floor(height * devicePixelRatio); renderWindowView.setSize(Math.max(w, 10), Math.max(h, 10)); - renderWindow.render(); - }, [openGLRenderWindow, getRenderWindow]); + queueRender(); + }, [openGLRenderWindow, queueRender]); useResizeObserver(openGLRenderWindow.get().getContainer(), updateViewSize); useMount(() => updateViewSize()); From aa9d4dc5e0b2469e8c65b863699b1b841ee17312 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 14 Feb 2023 18:13:59 -0500 Subject: [PATCH 063/110] refactor(Picking): lowercase ID -> Id Reverts back to original naming for existing implementations. --- src/core/Picking.ts | 12 ++++++------ src/core/modules/useProp.ts | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/core/Picking.ts b/src/core/Picking.ts index 827570e..52db285 100644 --- a/src/core/Picking.ts +++ b/src/core/Picking.ts @@ -22,7 +22,7 @@ import { } from './contexts'; export interface PickResult { - representationID?: string; + representationId?: string; worldPosition: Vector3; displayPosition: Vector3; compositeID: number; @@ -212,7 +212,7 @@ export default forwardRef(function ViewPicking(props: Props, fwdRef) { worldPosition, displayPosition, compositeID: info.compositeID, - ...info.prop.get('representationID'), + ...info.prop.get('representationId'), ray, }, ] as PickResult[]; @@ -270,7 +270,7 @@ export default forwardRef(function ViewPicking(props: Props, fwdRef) { ), displayPosition, compositeID, // Not yet useful unless GlyphRepresentation - ...prop.get('representationID'), + ...prop.get('representationId'), ray, }; }) @@ -313,10 +313,10 @@ export default forwardRef(function ViewPicking(props: Props, fwdRef) { const { prop } = v.getProperties(); const getterResult: | { - representationID?: string; + representationId?: string; } - | undefined = prop?.get('representationID'); - const representationId = getterResult?.representationID; + | undefined = prop?.get('representationId'); + const representationId = getterResult?.representationId; if (representationId) { representationIds.push(representationId); } diff --git a/src/core/modules/useProp.ts b/src/core/modules/useProp.ts index 258c3b6..934a401 100644 --- a/src/core/modules/useProp.ts +++ b/src/core/modules/useProp.ts @@ -38,7 +38,7 @@ export default function useProp< }); useEffect(() => { - getActor().set({ representationID: id }, true /* noWarning */); + getActor().set({ representationId: id }, true /* noWarning */); }, [id, getActor]); // add to renderer From 9ba919f304939b607a8e3f4393a6405cbb01201c Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 14 Feb 2023 18:17:15 -0500 Subject: [PATCH 064/110] fix(useInteractorStyle): improve registration Interactor style registration is now managed by the View, with handling for when setStyle() is called. --- src/core/internal/SingleView.tsx | 5 ++ src/core/modules/useInteractorStyle.ts | 65 +++++++++++++++++--------- 2 files changed, 49 insertions(+), 21 deletions(-) diff --git a/src/core/internal/SingleView.tsx b/src/core/internal/SingleView.tsx index bbb0f77..576724c 100644 --- a/src/core/internal/SingleView.tsx +++ b/src/core/internal/SingleView.tsx @@ -13,6 +13,7 @@ import { IView, } from '../../types'; import { omit, pick } from '../../utils'; +import useMount from '../../utils/useMount'; import { ViewContext } from '../contexts'; import useApplyCenterOfRotation from '../modules/useApplyCenterOfRotation'; import { @@ -56,6 +57,10 @@ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { const [getInteractorStyle, setInteractorStyle] = useInteractorStyle(getInteractor); + useMount(() => { + getInteractor()?.setInteractorStyle(getInteractorStyle()); + }); + const { interactorSettings = DefaultProps.interactorSettings, autoCenterOfRotation = DefaultProps.autoCenterOfRotation, diff --git a/src/core/modules/useInteractorStyle.ts b/src/core/modules/useInteractorStyle.ts index 26776db..be25598 100644 --- a/src/core/modules/useInteractorStyle.ts +++ b/src/core/modules/useInteractorStyle.ts @@ -24,7 +24,7 @@ import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyl import vtkInteractorStyleManipulator from '@kitware/vtk.js/Interaction/Style/InteractorStyleManipulator'; import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; import deepEqual from 'deep-equal'; -import { useCallback, useEffect } from 'react'; +import { useCallback, useEffect, useRef } from 'react'; import deletionRegistry from '../../utils/DeletionRegistry'; import useComparableEffect from '../../utils/useComparableEffect'; import useGetterRef from '../../utils/useGetterRef'; @@ -116,19 +116,50 @@ export function useInteractorStyleManipulatorSettings( export function useInteractorStyle( getInteractor: () => vtkRenderWindowInteractor | null ) { - const [styleRef, getStyle] = useGetterRef(() => { - const style = vtkInteractorStyleManipulator.newInstance(); - deletionRegistry.register(style, () => style.delete()); - return style; - }); + /** + * internalStyle: self-managed InteractorStyleManipulator + * externalStyle: user-set style + * - The external style takes precedence over the internal style in getStyle(). + * + * In a parented view, the style gets set on the interactor whenever + * the user hovers over the view. + * In a single view, the style gets set unconditionally. + * + * If the external style is updated: + * Single view: set it on the interactor unconditionally + * Parented view: set it on the interactor if the previous style + * is currently registered to the interactor. + */ + const [internalStyleRef, getInternalStyle] = useGetterRef( + () => { + const style = vtkInteractorStyleManipulator.newInstance(); + deletionRegistry.register(style, () => style.delete()); + return style; + } + ); + + const externalStyleRef = useRef(null); + + const getStyle = useCallback(() => { + return externalStyleRef.current ?? getInternalStyle(); + }, [getInternalStyle]); const setStyle = useCallback( (style: vtkInteractorStyle) => { + const currentStyle = getStyle(); const interactor = getInteractor(); if (!interactor) return; - interactor.setInteractorStyle(style ?? styleRef.current); + + // Single view: always true + // Parented view: true if we've hovered over the View + const isCurrentlySet = interactor.getInteractorStyle() === currentStyle; + if (isCurrentlySet) { + interactor.setInteractorStyle(style); + } + + externalStyleRef.current = style; }, - [getInteractor, styleRef] + [getInteractor, getStyle] ); useEffect(() => { @@ -136,23 +167,15 @@ export function useInteractorStyle( if (!interactor) return; deletionRegistry.incRefCount(interactor); - if (styleRef.current) { - setStyle(styleRef.current); - } - return () => { - if (styleRef.current) { - if (interactor.getInteractorStyle() === styleRef.current) { - interactor.setInteractorStyle(null); - } - - deletionRegistry.markForDeletion(styleRef.current); - styleRef.current = null; + if (interactor.getInteractorStyle() === getStyle()) { + interactor.setInteractorStyle(null); } - deletionRegistry.decRefCount(interactor); + deletionRegistry.markForDeletion(internalStyleRef.current); + internalStyleRef.current = null; }; - }, [getInteractor, styleRef, setStyle]); + }, [getInteractor, getStyle, internalStyleRef]); return [getStyle, setStyle] as const; } From 92412876215a748d8ed330d7757c33bc08fbed62 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 21 Feb 2023 11:46:45 -0500 Subject: [PATCH 065/110] docs: Add BREAKING_CHANGES doc --- BREAKING_CHANGES.md | 93 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 BREAKING_CHANGES.md diff --git a/BREAKING_CHANGES.md b/BREAKING_CHANGES.md new file mode 100644 index 0000000..d2c8052 --- /dev/null +++ b/BREAKING_CHANGES.md @@ -0,0 +1,93 @@ +# Breaking Changes & Migration + +## v1 to v2 + +V2 represents a major shift away from the class-based components towards functional components. There are several goals and reasons for this migration: +- Addresses some bugs inherent in how contexts were being consumed. +- Addresses a major issue with regards to parent-child unmounting order being at odds with vtk.js resource management. +- Migrates the codebase to Typescript and React 18. This also means we will expose Typescript types. +- Does some clean-up on props and some confusing component usage. +- Addresses rendering performance via batching. + +Once V2 is released, V1 will be considered legacy. Bugfixes may still be made for it, but V2 will be considered current. + +### Picking + +The `View` component no longer has any of the picking modes or picking props. Instead, a new `` component is provided. Most of the API has been moved over with no changes, except for the following: + +- `setProps` prop and the `*info` readonly props, which have been removed. +- `onSelect` has been removed. Instead, look at the Picking example for how to get the same functionality. + +There is a new `onHoverDebounceWait` parameter that determines the debounce wait threshold for the onHover event. + +`View.pick` from before has been split into `pick` and `pickWithFrustum`, since they return different types. + + +### GeometryRepresentation + +The cube axes and scalar bar have been split out into their own components. + +### Algorithm + +`` can take both a vtk.js class as a string name or as the vtk.js class directly. In both cases, you must import the class in order for it to register with the vtk string constructor. + +### ShareDataSet + +ShareDataSet is no longer global. You must specify a ShareDataSetRoot as an ancestor to the subtree in which you wish to use ShareDataSet. The new API looks like the following: + + + + + + + + + + + + +### View + +The View imperative ref API has changed completely. Refer to the `IView` type for more info. Examples of changes needed: + +- `view.camera` is now `view.getCamera()` +- `view.openglRenderWindow` is now `view.getOpenGLRenderWindow().get()` +- `view.interactor` is now `view.getRenderWindow().getInteractor()` +- `view.renderView()` is now `view.requestRender()` + +The `autoResetCamera` prop supercedes the `triggerResetCamera` prop. When `autoResetCamera` is true (by default), camera will now reset whenever the data in the scene changes. + +The `triggerRender` prop is removed in favor of using the imperative API: `viewRef.current.requestRender()`. + +The `camera` prop supercedes the old `camera*` prefixed props (i.e. cameraPosition, cameraFocalPoint, etc.). `camera` must be specified as a collection of camera properties to be set. + +The default keybinds for resetting the camera (`KeyR`) has been removed. Application developers should decide if they want this functionality back by adding a keyboard listener and calling `viewRef.current.resetCamera()`. + +All picking props have been removed. See the `` component. + +### Contexts + +The exposed contexts have changed APIs and names. The following is a list of available contexts (from `contexts.ts`): + +- OpenGLRenderWindowContext +- RenderWindowContext +- RendererContext +- FieldDataContext +- DatasetContext +- RepresentationContext +- DownstreamContext +- ShareDataSetContext +- MultiViewRootContext +- ViewContext + +### MultiViewRoot + +The `disabled` prop no longer exists. + +### Reader + +- `arrayBuffer` prop now accepts an ArrayBuffer. `base64ArrayBuffer` takes a Base64 string of an ArrayBuffer. +- `vtkClass` prop now takes a vtk class. String is still supported, but you must import to register the class first. +- `renderOnUpdate` and `resetCameraOnUpdate` no longer exist. This is automatic. +- `options` has been renamed to `urlOptions`. +- `id` is not used. From 3af670b08d461e40d86384b95dfd3404ec0d020e Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 21 Feb 2023 12:14:33 -0500 Subject: [PATCH 066/110] chore: add missing plugin and update packages --- package-lock.json | 3402 +++++++++++++++++++++++++++------------------ package.json | 21 +- 2 files changed, 2096 insertions(+), 1327 deletions(-) diff --git a/package-lock.json b/package-lock.json index 38f5da0..836d304 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,25 +24,26 @@ "@rollup/plugin-commonjs": "22.0.2", "@rollup/plugin-eslint": "^8.0.2", "@rollup/plugin-node-resolve": "^14.1.0", + "@rollup/plugin-typescript": "^11.0.0", "@types/deep-equal": "^1.0.1", "@types/react": "^18.0.21", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", "commitizen": "4.2.5", "cross-env": "^7.0.2", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.7.0", - "eslint-config-standard": "^14.1.0", - "eslint-config-standard-react": "^9.2.0", - "eslint-plugin-import": "^2.18.2", + "eslint": "^8.34.0", + "eslint-config-prettier": "^8.6.0", + "eslint-config-standard": "^17.0.0", + "eslint-config-standard-react": "^13.0.0", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-node": "^11.0.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.0.1", - "eslint-plugin-react": "^7.31.10", + "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "gh-pages": "^4.0.0", "npm-run-all": "^4.1.5", - "prettier": "^2.7.1", + "prettier": "^2.8.4", "prettier-plugin-organize-imports": "^3.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -50,8 +51,8 @@ "rollup": "^2.37.1", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-terser": "^7.0.2", - "semantic-release": "19.0.5", - "typescript": "^4.8.4" + "semantic-release": "20.1.0", + "typescript": "^4.9.5" }, "peerDependencies": { "@kitware/vtk.js": "^26.5.3", @@ -2198,11 +2199,22 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "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==", - "dev": true + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", @@ -2324,7 +2336,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2337,7 +2348,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -2346,7 +2356,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2994,6 +3003,60 @@ "rollup": "^2.78.0" } }, + "node_modules/@rollup/plugin-typescript": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.0.0.tgz", + "integrity": "sha512-goPyCWBiimk1iJgSTgsehFD5OOFHiAknrRJjqFCudcW8JtWiBlK284Xnn4flqMqg6YAjVG/EE+3aVzrL5qNSzQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript/node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript/node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, "node_modules/@rollup/pluginutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", @@ -3380,7 +3443,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "dev": true, + "optional": true }, "node_modules/@types/prop-types": { "version": "15.7.5", @@ -3674,33 +3738,6 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/@typescript-eslint/utils/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/@typescript-eslint/utils/node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -4001,6 +4038,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -4047,6 +4085,7 @@ "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" } @@ -4161,14 +4200,6 @@ "node": ">=0.10.0" } }, - "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "engines": { - "node": ">=4" - } - }, "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -4398,6 +4429,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", @@ -4497,7 +4554,8 @@ "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, "node_modules/chrome-trace-event": { "version": "1.0.3", @@ -4522,6 +4580,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, "dependencies": { "restore-cursor": "^3.1.0" }, @@ -4560,19 +4619,23 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, "engines": { "node": ">= 10" } }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/clone": { @@ -4807,6 +4870,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, + "optional": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -4864,7 +4928,6 @@ "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", @@ -5305,7 +5368,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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/emojis-list": { "version": "3.0.0", @@ -5343,17 +5407,126 @@ } }, "node_modules/env-ci": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-5.5.0.tgz", - "integrity": "sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-8.0.0.tgz", + "integrity": "sha512-W+3BqGZozFua9MPeXpmTm5eYEBtGgL76jGu/pwMVp/L8PdECSCEWaIp7d4Mw7kuUrbUldK0oV0bNd6ZZjLiMiA==", "dev": true, "dependencies": { - "execa": "^5.0.0", - "fromentries": "^1.3.2", - "java-properties": "^1.0.0" + "execa": "^6.1.0", + "java-properties": "^1.0.2" + }, + "engines": { + "node": "^16.10 || >=18" + } + }, + "node_modules/env-ci/node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/env-ci/node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/env-ci/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, "engines": { - "node": ">=10.17" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/error-ex": { @@ -5478,117 +5651,132 @@ } }, "node_modules/eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dependencies": { - "@babel/code-frame": "^7.0.0", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", + "dependencies": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", + "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, "bin": { - "eslint-config-prettier-check": "bin/cli.js" + "eslint-config-prettier": "bin/cli.js" }, "peerDependencies": { - "eslint": ">=3.14.1" + "eslint": ">=7.0.0" } }, "node_modules/eslint-config-standard": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz", - "integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==", - "dev": true, - "peerDependencies": { - "eslint": ">=6.2.2", - "eslint-plugin-import": ">=2.18.0", - "eslint-plugin-node": ">=9.1.0", - "eslint-plugin-promise": ">=4.2.1", - "eslint-plugin-standard": ">=4.0.0" - } - }, - "node_modules/eslint-config-standard-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-8.1.0.tgz", - "integrity": "sha512-ULVC8qH8qCqbU792ZOO6DaiaZyHNS/5CZt3hKqHkEhVlhPEPN3nfBqqxJCyp59XrjIBZPu1chMYe9T2DXZ7TMw==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", + "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", "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" + } + ], "peerDependencies": { - "eslint": ">=6.2.2", - "eslint-plugin-react": ">=7.14.2" + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0" } }, "node_modules/eslint-config-standard-react": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-9.2.0.tgz", - "integrity": "sha512-u+KRP2uCtthZ/W4DlLWCC59GZNV/y9k9yicWWammgTs/Omh8ZUUPF3EnYm81MAcbkYQq2Wg0oxutAhi/FQ8mIw==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-13.0.0.tgz", + "integrity": "sha512-HrVPGj8UncHfV+BsdJTuJpVsomn6AIrke3Af2Fh4XFvQQDU+iO6N2ZL+UsC+scExft4fU3uf7fJwj7PKWnXJDA==", "dev": true, - "dependencies": { - "eslint-config-standard-jsx": "^8.0.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "peerDependencies": { - "eslint": ">=6.2.2", - "eslint-plugin-react": ">=7.6.1" + "eslint": "^8.8.0", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.6.0" } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -5661,23 +5849,25 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", "has": "^1.0.3", - "is-core-module": "^2.8.1", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", "tsconfig-paths": "^3.14.1" }, "engines": { @@ -5688,12 +5878,12 @@ } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { @@ -5708,11 +5898,93 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/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/eslint-plugin-n": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz", + "integrity": "sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==", + "dev": true, + "peer": true, + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "peer": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-n/node_modules/eslint-plugin-es/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, + "peer": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-n/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, "node_modules/eslint-plugin-node": { "version": "11.1.0", @@ -5792,9 +6064,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.31.11", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz", - "integrity": "sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==", + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", "dev": true, "dependencies": { "array-includes": "^3.1.6", @@ -5809,7 +6081,7 @@ "object.hasown": "^1.1.2", "object.values": "^1.1.6", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", + "resolve": "^2.0.0-next.4", "semver": "^6.3.0", "string.prototype.matchall": "^4.0.8" }, @@ -5861,30 +6133,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-standard": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", - "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", - "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" - } - ], - "peer": true, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -5906,24 +6154,74 @@ } }, "node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">=6" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/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==", + "engines": { + "node": ">=10" } }, "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/node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -5953,6 +6251,26 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/eslint/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==" + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/eslint/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5969,78 +6287,69 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/eslint/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4.8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { - "escape-string-regexp": "^1.0.5" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" - }, "node_modules/eslint/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -6057,159 +6366,70 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "node_modules/eslint/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/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==", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=8.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint/node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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==" + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/inquirer/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==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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==" - }, - "node_modules/eslint/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "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" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "engines": { - "node": ">=6.5.0" - } - }, - "node_modules/eslint/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dependencies": { - "glob": "^7.1.3" + "node": ">=10" }, - "bin": { - "rimraf": "bin.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { - "shebang-regex": "^1.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" + "node": ">=10" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/supports-color": { @@ -6223,53 +6443,57 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "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==", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dependencies": { - "isexe": "^2.0.0" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "node_modules/espree/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==", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.4.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -6371,6 +6595,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -6421,7 +6646,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -6448,7 +6672,6 @@ "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" }, @@ -6541,15 +6764,15 @@ } }, "node_modules/find-versions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", - "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", "dev": true, "dependencies": { - "semver-regex": "^3.1.2" + "semver-regex": "^4.0.5" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6574,7 +6797,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -6586,8 +6808,7 @@ "node_modules/flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "node_modules/for-each": { "version": "0.3.3", @@ -6607,26 +6828,6 @@ "readable-stream": "^2.0.0" } }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "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/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -6686,7 +6887,8 @@ "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==" + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true }, "node_modules/functions-have-names": { "version": "1.2.3", @@ -6726,15 +6928,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -6853,6 +7046,7 @@ "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" }, @@ -6981,8 +7175,7 @@ "node_modules/grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, "node_modules/handlebars": { "version": "4.7.7", @@ -7090,12 +7283,15 @@ } }, "node_modules/hook-std": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-2.0.0.tgz", - "integrity": "sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", + "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", "dev": true, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/hosted-git-info": { @@ -7144,6 +7340,7 @@ "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" }, @@ -7175,6 +7372,7 @@ "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" } @@ -7548,6 +7746,7 @@ "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" } @@ -7643,7 +7842,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -7909,6 +8107,15 @@ "node": ">=8" } }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7918,6 +8125,7 @@ "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" @@ -8038,7 +8246,6 @@ "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" @@ -8150,7 +8357,14 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true }, "node_modules/lodash.capitalize": { "version": "4.2.1", @@ -8197,8 +8411,7 @@ "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 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "node_modules/lodash.mergewith": { "version": "4.6.2", @@ -8620,6 +8833,7 @@ "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" } @@ -8647,7 +8861,8 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "node_modules/minimist-options": { "version": "4.1.0", @@ -8663,17 +8878,6 @@ "node": ">= 6" } }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -8691,7 +8895,8 @@ "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true }, "node_modules/natural-compare": { "version": "1.4.0", @@ -8719,7 +8924,8 @@ "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node_modules/node-emoji": { "version": "1.11.0", @@ -11588,6 +11794,7 @@ "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" }, @@ -11602,7 +11809,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -11712,17 +11918,18 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -11786,12 +11993,15 @@ } }, "node_modules/p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-retry": { @@ -11858,7 +12068,6 @@ "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" } @@ -11875,7 +12084,6 @@ "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" } @@ -12050,15 +12258,14 @@ "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/prettier": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", - "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -12112,6 +12319,7 @@ "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" } @@ -12155,7 +12363,6 @@ "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", @@ -12430,7 +12637,6 @@ "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" }, @@ -12568,6 +12774,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -12589,7 +12796,6 @@ "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" @@ -12599,7 +12805,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -12634,220 +12839,550 @@ "node": ">=8.0.0" } }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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.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/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dev": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "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/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", + "dev": true + }, + "node_modules/semantic-release": { + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-20.1.0.tgz", + "integrity": "sha512-+9+n6RIr0Fz0F53cXrjpawxWlUg3O7/qr1jF9lrE+/v6WqwBrSWnavVHTPaf2WLerET2EngoqI0M4pahkKl6XQ==", + "dev": true, + "dependencies": { + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/error": "^3.0.0", + "@semantic-release/github": "^8.0.0", + "@semantic-release/npm": "^9.0.0", + "@semantic-release/release-notes-generator": "^10.0.0", + "aggregate-error": "^4.0.1", + "cosmiconfig": "^8.0.0", + "debug": "^4.0.0", + "env-ci": "^8.0.0", + "execa": "^6.1.0", + "figures": "^5.0.0", + "find-versions": "^5.1.0", + "get-stream": "^6.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^3.0.0", + "hosted-git-info": "^6.0.0", + "lodash-es": "^4.17.21", + "marked": "^4.1.0", + "marked-terminal": "^5.1.1", + "micromatch": "^4.0.2", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-pkg-up": "^9.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.3.2", + "semver-diff": "^4.0.0", + "signale": "^1.2.1", + "yargs": "^17.5.1" + }, + "bin": { + "semantic-release": "bin/semantic-release.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/semantic-release/node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/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/semantic-release/node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/cosmiconfig": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", + "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/semantic-release/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/semantic-release/node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/semantic-release/node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.16.1.tgz", + "integrity": "sha512-9kkuMZHnLH/8qXARvYSjNvq8S1GYFFzynQTAfKeaJ0sIrR3PUPuu37Z+EiIANiZBvpfTf2B5y8ecDLSMWlLv+w==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/semantic-release/node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/semantic-release/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/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/semantic-release/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" + "p-locate": "^6.0.0" }, - "peerDependencies": { - "rollup": "^2.0.0" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "node_modules/semantic-release/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, "engines": { - "node": ">=0.12.0" + "node": ">=12" + }, + "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==", + "node_modules/semantic-release/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "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" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "node_modules/semantic-release/node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, "dependencies": { - "tslib": "^1.9.0" + "lru-cache": "^6.0.0" }, "engines": { - "npm": ">=2.0.0" + "node": ">=10" } }, - "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/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "node_modules/semantic-release/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "node_modules/semantic-release/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "dependencies": { - "loose-envify": "^1.1.0" + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "node_modules/semantic-release/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/semantic-release/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "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" + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "node_modules/semantic-release/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true - }, - "node_modules/semantic-release": { - "version": "19.0.5", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-19.0.5.tgz", - "integrity": "sha512-NMPKdfpXTnPn49FDogMBi36SiBfXkSOJqCkk0E4iWOY1tusvvgBwqUmxTX1kmlT6kIYed9YwNKD1sfPpqa5yaA==", + "node_modules/semantic-release/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "dependencies": { - "@semantic-release/commit-analyzer": "^9.0.2", - "@semantic-release/error": "^3.0.0", - "@semantic-release/github": "^8.0.0", - "@semantic-release/npm": "^9.0.0", - "@semantic-release/release-notes-generator": "^10.0.0", - "aggregate-error": "^3.0.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.0.0", - "env-ci": "^5.0.0", - "execa": "^5.0.0", - "figures": "^3.0.0", - "find-versions": "^4.0.0", - "get-stream": "^6.0.0", - "git-log-parser": "^1.2.0", - "hook-std": "^2.0.0", - "hosted-git-info": "^4.0.0", - "lodash": "^4.17.21", - "marked": "^4.0.10", - "marked-terminal": "^5.0.0", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "p-reduce": "^2.0.0", - "read-pkg-up": "^7.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.3.2", - "semver-diff": "^3.1.1", - "signale": "^1.2.1", - "yargs": "^16.2.0" - }, - "bin": { - "semantic-release": "bin/semantic-release.js" - }, "engines": { - "node": ">=16 || ^14.17" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/semantic-release/node_modules/read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", "dev": true, "dependencies": { - "escape-string-regexp": "^1.0.5" + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/semantic-release/node_modules/read-pkg-up": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", + "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "find-up": "^6.3.0", + "read-pkg": "^7.1.0", + "type-fest": "^2.5.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/semantic-release/node_modules/semver": { @@ -12865,6 +13400,42 @@ "node": ">=10" } }, + "node_modules/semantic-release/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -12874,24 +13445,42 @@ } }, "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "dev": true, "dependencies": { - "semver": "^6.3.0" + "semver": "^7.3.5" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/semver-regex": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz", - "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12919,7 +13508,6 @@ "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" }, @@ -12931,7 +13519,6 @@ "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" } @@ -12978,7 +13565,8 @@ "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==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/signale": { "version": "1.4.0", @@ -13003,27 +13591,6 @@ "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -13132,7 +13699,8 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", @@ -13192,6 +13760,7 @@ "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", @@ -13386,85 +13955,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "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/table/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/table/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/table/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==" - }, - "node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -13654,7 +14144,8 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "node_modules/through2": { "version": "4.0.2", @@ -13683,6 +14174,7 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -13848,7 +14340,8 @@ "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/tsutils": { "version": "3.21.0", @@ -13869,7 +14362,6 @@ "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" }, @@ -13881,6 +14373,7 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "engines": { "node": ">=10" }, @@ -13889,9 +14382,9 @@ } }, "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -14044,7 +14537,8 @@ "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", @@ -14200,7 +14694,6 @@ "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" }, @@ -14362,17 +14855,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/wslink": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/wslink/-/wslink-1.9.2.tgz", @@ -14457,26 +14939,27 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, + "optional": 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==", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { @@ -14488,6 +14971,15 @@ "node": ">=10" } }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -14497,6 +14989,17 @@ "engines": { "node": ">=6" } + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { @@ -16004,11 +16507,15 @@ "minimatch": "^3.0.4" } }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + }, "@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 + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, "@jridgewell/gen-mapping": { "version": "0.1.1", @@ -16112,7 +16619,6 @@ "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" @@ -16121,14 +16627,12 @@ "@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 + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@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" @@ -16606,6 +17110,35 @@ "resolve": "^1.19.0" } }, + "@rollup/plugin-typescript": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.0.0.tgz", + "integrity": "sha512-goPyCWBiimk1iJgSTgsehFD5OOFHiAknrRJjqFCudcW8JtWiBlK284Xnn4flqMqg6YAjVG/EE+3aVzrL5qNSzQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + } + } + }, "@rollup/pluginutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", @@ -16922,7 +17455,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "dev": true, + "optional": true }, "@types/prop-types": { "version": "15.7.5", @@ -17111,21 +17645,6 @@ "semver": "^7.3.7" }, "dependencies": { - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "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 - }, "semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -17390,6 +17909,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "requires": { "type-fest": "^0.21.3" } @@ -17424,6 +17944,7 @@ "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" } @@ -17511,11 +18032,6 @@ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" - }, "async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -17670,6 +18186,28 @@ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "peer": true, + "requires": { + "semver": "^7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", @@ -17735,7 +18273,8 @@ "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, "chrome-trace-event": { "version": "1.0.3", @@ -17754,6 +18293,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, "requires": { "restore-cursor": "^3.1.0" } @@ -17777,16 +18317,17 @@ "cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "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==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, @@ -17980,6 +18521,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, + "optional": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -18016,7 +18558,6 @@ "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", @@ -18348,7 +18889,8 @@ "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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "emojis-list": { "version": "3.0.0", @@ -18377,14 +18919,80 @@ } }, "env-ci": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-5.5.0.tgz", - "integrity": "sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-8.0.0.tgz", + "integrity": "sha512-W+3BqGZozFua9MPeXpmTm5eYEBtGgL76jGu/pwMVp/L8PdECSCEWaIp7d4Mw7kuUrbUldK0oV0bNd6ZZjLiMiA==", "dev": true, "requires": { - "execa": "^5.0.0", - "fromentries": "^1.3.2", - "java-properties": "^1.0.0" + "execa": "^6.1.0", + "java-properties": "^1.0.2" + }, + "dependencies": { + "execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + } } }, "error-ex": { @@ -18490,49 +19098,77 @@ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "requires": { - "@babel/code-frame": "^7.0.0", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", + "requires": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" }, "dependencies": { + "@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -18552,75 +19188,75 @@ "color-convert": "^2.0.1" } }, - "color-convert": { + "argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "color-name": "~1.1.4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "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==" - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "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==", "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "color-name": "~1.1.4" } }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "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==" + }, + "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==" + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "requires": { - "escape-string-regexp": "^1.0.5" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" + }, + "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==", "requires": { - "flat-cache": "^2.0.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "is-glob": "^4.0.3" } }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" - }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "has-flag": { @@ -18628,43 +19264,17 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - } + "argparse": "^2.0.1" } }, "json-schema-traverse": { @@ -18672,77 +19282,28 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "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" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "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==", "requires": { - "glob": "^7.1.3" + "p-locate": "^5.0.0" } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "requires": { - "shebang-regex": "^1.0.0" + "yocto-queue": "^0.1.0" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "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==", "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - } + "p-limit": "^3.0.2" } }, "supports-color": { @@ -18753,69 +19314,43 @@ "has-flag": "^4.0.0" } }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "requires": { - "prelude-ls": "~1.1.2" - } - }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } + "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==" } } }, "eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, - "eslint-config-standard": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz", - "integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", + "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", "dev": true, "requires": {} }, - "eslint-config-standard-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-8.1.0.tgz", - "integrity": "sha512-ULVC8qH8qCqbU792ZOO6DaiaZyHNS/5CZt3hKqHkEhVlhPEPN3nfBqqxJCyp59XrjIBZPu1chMYe9T2DXZ7TMw==", + "eslint-config-standard": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", + "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", "dev": true, "requires": {} }, "eslint-config-standard-react": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-9.2.0.tgz", - "integrity": "sha512-u+KRP2uCtthZ/W4DlLWCC59GZNV/y9k9yicWWammgTs/Omh8ZUUPF3EnYm81MAcbkYQq2Wg0oxutAhi/FQ8mIw==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-13.0.0.tgz", + "integrity": "sha512-HrVPGj8UncHfV+BsdJTuJpVsomn6AIrke3Af2Fh4XFvQQDU+iO6N2ZL+UsC+scExft4fU3uf7fJwj7PKWnXJDA==", "dev": true, - "requires": { - "eslint-config-standard-jsx": "^8.0.0" - } + "requires": {} }, "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "requires": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" }, "dependencies": { "debug": { @@ -18871,33 +19406,35 @@ } }, "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", "has": "^1.0.3", - "is-core-module": "^2.8.1", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", "tsconfig-paths": "^3.14.1" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "doctrine": { @@ -18908,12 +19445,65 @@ "requires": { "esutils": "^2.0.2" } + } + } + }, + "eslint-plugin-n": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz", + "integrity": "sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==", + "dev": true, + "peer": true, + "requires": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "dependencies": { + "eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "peer": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "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, + "peer": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + } + } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "peer": true + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, @@ -18965,9 +19555,9 @@ "requires": {} }, "eslint-plugin-react": { - "version": "7.31.11", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz", - "integrity": "sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==", + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", "dev": true, "requires": { "array-includes": "^3.1.6", @@ -18982,7 +19572,7 @@ "object.hasown": "^1.1.2", "object.values": "^1.1.6", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", + "resolve": "^2.0.0-next.4", "semver": "^6.3.0", "string.prototype.matchall": "^4.0.8" }, @@ -19016,14 +19606,6 @@ "dev": true, "requires": {} }, - "eslint-plugin-standard": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", - "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", - "dev": true, - "peer": true, - "requires": {} - }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -19041,32 +19623,53 @@ } }, "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "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==" + } } }, "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==" + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true }, "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" + } } }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, "esquery": { "version": "1.4.0", @@ -19137,6 +19740,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -19181,7 +19785,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, "requires": { "reusify": "^1.0.4" } @@ -19205,7 +19808,6 @@ "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" } @@ -19274,12 +19876,12 @@ } }, "find-versions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", - "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", "dev": true, "requires": { - "semver-regex": "^3.1.2" + "semver-regex": "^4.0.5" } }, "findup-sync": { @@ -19298,7 +19900,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -19307,8 +19908,7 @@ "flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "for-each": { "version": "0.3.3", @@ -19328,12 +19928,6 @@ "readable-stream": "^2.0.0" } }, - "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true - }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -19377,7 +19971,8 @@ "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==" + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true }, "functions-have-names": { "version": "1.2.3", @@ -19405,12 +20000,6 @@ "has-symbols": "^1.0.3" } }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -19508,6 +20097,7 @@ "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" } @@ -19608,8 +20198,7 @@ "grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" }, "handlebars": { "version": "4.7.7", @@ -19679,9 +20268,9 @@ } }, "hook-std": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-2.0.0.tgz", - "integrity": "sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", + "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", "dev": true }, "hosted-git-info": { @@ -19721,6 +20310,7 @@ "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" } @@ -19734,7 +20324,8 @@ "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true }, "import-fresh": { "version": "3.3.0", @@ -20000,7 +20591,8 @@ "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==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-glob": { "version": "4.0.3", @@ -20062,8 +20654,7 @@ "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, "is-plain-obj": { "version": "1.1.0", @@ -20250,6 +20841,11 @@ } } }, + "js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -20259,6 +20855,7 @@ "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" @@ -20349,7 +20946,6 @@ "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" @@ -20438,7 +21034,14 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true }, "lodash.capitalize": { "version": "4.2.1", @@ -20485,8 +21088,7 @@ "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 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "lodash.mergewith": { "version": "4.6.2", @@ -20790,7 +21392,8 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, "min-indent": { "version": "1.0.1", @@ -20809,7 +21412,8 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "minimist-options": { "version": "4.1.0", @@ -20822,14 +21426,6 @@ "kind-of": "^6.0.3" } }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, "modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -20844,7 +21440,8 @@ "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true }, "natural-compare": { "version": "1.4.0", @@ -20872,7 +21469,8 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node-emoji": { "version": "1.11.0", @@ -22880,6 +23478,7 @@ "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" } @@ -22888,7 +23487,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -22969,12 +23567,13 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true }, "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", "dev": true }, "p-filter": { @@ -23017,9 +23616,9 @@ "dev": true }, "p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true }, "p-retry": { @@ -23067,8 +23666,7 @@ "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 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", @@ -23078,8 +23676,7 @@ "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 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", @@ -23204,13 +23801,12 @@ "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 + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "prettier": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", - "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "dev": true }, "prettier-linter-helpers": { @@ -23238,7 +23834,8 @@ "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true }, "prop-types": { "version": "15.8.1", @@ -23271,8 +23868,7 @@ "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 + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "quick-lru": { "version": "4.0.1", @@ -23485,9 +24081,8 @@ }, "regexpp": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" }, "regexpu-core": { "version": "5.2.2", @@ -23588,6 +24183,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -23602,14 +24198,12 @@ "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -23644,25 +24238,17 @@ "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "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" } }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "requires": { - "tslib": "^1.9.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -23683,7 +24269,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "scheduler": { "version": "0.23.0", @@ -23739,9 +24326,9 @@ "dev": true }, "semantic-release": { - "version": "19.0.5", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-19.0.5.tgz", - "integrity": "sha512-NMPKdfpXTnPn49FDogMBi36SiBfXkSOJqCkk0E4iWOY1tusvvgBwqUmxTX1kmlT6kIYed9YwNKD1sfPpqa5yaA==", + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-20.1.0.tgz", + "integrity": "sha512-+9+n6RIr0Fz0F53cXrjpawxWlUg3O7/qr1jF9lrE+/v6WqwBrSWnavVHTPaf2WLerET2EngoqI0M4pahkKl6XQ==", "dev": true, "requires": { "@semantic-release/commit-analyzer": "^9.0.2", @@ -23749,47 +24336,268 @@ "@semantic-release/github": "^8.0.0", "@semantic-release/npm": "^9.0.0", "@semantic-release/release-notes-generator": "^10.0.0", - "aggregate-error": "^3.0.0", - "cosmiconfig": "^7.0.0", + "aggregate-error": "^4.0.1", + "cosmiconfig": "^8.0.0", "debug": "^4.0.0", - "env-ci": "^5.0.0", - "execa": "^5.0.0", - "figures": "^3.0.0", - "find-versions": "^4.0.0", + "env-ci": "^8.0.0", + "execa": "^6.1.0", + "figures": "^5.0.0", + "find-versions": "^5.1.0", "get-stream": "^6.0.0", "git-log-parser": "^1.2.0", - "hook-std": "^2.0.0", - "hosted-git-info": "^4.0.0", - "lodash": "^4.17.21", - "marked": "^4.0.10", - "marked-terminal": "^5.0.0", + "hook-std": "^3.0.0", + "hosted-git-info": "^6.0.0", + "lodash-es": "^4.17.21", + "marked": "^4.1.0", + "marked-terminal": "^5.1.1", "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "p-reduce": "^2.0.0", - "read-pkg-up": "^7.0.0", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-pkg-up": "^9.1.0", "resolve-from": "^5.0.0", "semver": "^7.3.2", - "semver-diff": "^3.1.1", + "semver-diff": "^4.0.0", "signale": "^1.2.1", - "yargs": "^16.2.0" + "yargs": "^17.5.1" }, "dependencies": { + "aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "requires": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + } + }, + "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 + }, + "clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "requires": { + "escape-string-regexp": "5.0.0" + } + }, + "cosmiconfig": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", + "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", + "dev": true, + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + } + }, + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + }, + "execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + } + }, + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" } }, "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.16.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.16.1.tgz", + "integrity": "sha512-9kkuMZHnLH/8qXARvYSjNvq8S1GYFFzynQTAfKeaJ0sIrR3PUPuu37Z+EiIANiZBvpfTf2B5y8ecDLSMWlLv+w==", + "dev": true + } + } + }, + "human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true + }, + "indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true + }, + "js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "argparse": "^2.0.1" + } + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", + "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", + "dev": true, + "requires": { + "find-up": "^6.3.0", + "read-pkg": "^7.1.0", + "type-fest": "^2.5.0" } }, "semver": { @@ -23800,6 +24608,24 @@ "requires": { "lru-cache": "^6.0.0" } + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true } } }, @@ -23809,18 +24635,29 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "dev": true, "requires": { - "semver": "^6.3.0" + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "semver-regex": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz", - "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true }, "serialize-javascript": { @@ -23845,7 +24682,6 @@ "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" } @@ -23853,8 +24689,7 @@ "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 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { "version": "1.7.4", @@ -23886,7 +24721,8 @@ "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==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "signale": { "version": "1.4.0", @@ -23905,23 +24741,6 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - } - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -24022,7 +24841,8 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, "stop-iteration-iterator": { "version": "1.0.0", @@ -24078,6 +24898,7 @@ "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", @@ -24217,68 +25038,6 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "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" - } - }, - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - }, - "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==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -24408,7 +25167,8 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "through2": { "version": "4.0.2", @@ -24436,6 +25196,7 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -24550,7 +25311,8 @@ "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "tsutils": { "version": "3.21.0", @@ -24565,7 +25327,6 @@ "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" } @@ -24573,12 +25334,13 @@ "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true }, "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true }, "uglify-js": { @@ -24681,7 +25443,8 @@ "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true }, "v8-compile-cache-lib": { "version": "3.0.1", @@ -24810,7 +25573,6 @@ "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" } @@ -24927,14 +25689,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "requires": { - "mkdirp": "^0.5.1" - } - }, "wslink": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/wslink/-/wslink-1.9.2.tgz", @@ -25004,21 +25758,30 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true + "dev": true, + "optional": true }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "dev": true, "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } } }, "yargs-parser": { @@ -25033,6 +25796,11 @@ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "optional": 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==" } } } diff --git a/package.json b/package.json index 87ce6da..04b539f 100644 --- a/package.json +++ b/package.json @@ -44,25 +44,26 @@ "@rollup/plugin-commonjs": "22.0.2", "@rollup/plugin-eslint": "^8.0.2", "@rollup/plugin-node-resolve": "^14.1.0", + "@rollup/plugin-typescript": "^11.0.0", "@types/deep-equal": "^1.0.1", "@types/react": "^18.0.21", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", "commitizen": "4.2.5", "cross-env": "^7.0.2", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.7.0", - "eslint-config-standard": "^14.1.0", - "eslint-config-standard-react": "^9.2.0", - "eslint-plugin-import": "^2.18.2", + "eslint": "^8.34.0", + "eslint-config-prettier": "^8.6.0", + "eslint-config-standard": "^17.0.0", + "eslint-config-standard-react": "^13.0.0", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-node": "^11.0.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.0.1", - "eslint-plugin-react": "^7.31.10", + "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "gh-pages": "^4.0.0", "npm-run-all": "^4.1.5", - "prettier": "^2.7.1", + "prettier": "^2.8.4", "prettier-plugin-organize-imports": "^3.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -70,10 +71,10 @@ "rollup": "^2.37.1", "rollup-plugin-analyzer": "^4.0.0", "rollup-plugin-terser": "^7.0.2", - "semantic-release": "19.0.5", - "typescript": "^4.8.4" + "semantic-release": "20.1.0", + "typescript": "^4.9.5" }, "files": [ "dist" ] -} \ No newline at end of file +} From dafe67d9a1234f6623de88fb22315820cebc8c35 Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 22 Feb 2023 12:00:51 -0500 Subject: [PATCH 067/110] chore: update vtk.js and types --- package-lock.json | 14 +- package.json | 4 +- src/core/Picking.ts | 3 +- src/core/modules/useApplyCenterOfRotation.ts | 2 +- src/core/modules/useInteractorStyle.ts | 2 +- src/global.d.ts | 1469 +----------------- src/types.ts | 2 +- 7 files changed, 14 insertions(+), 1482 deletions(-) diff --git a/package-lock.json b/package-lock.json index 836d304..50bf018 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "@babel/preset-env": "^7.19.1", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", - "@kitware/vtk.js": "^26.5.3", + "@kitware/vtk.js": "^26.5.5", "@rollup/plugin-babel": "^5.3.1", "@rollup/plugin-commonjs": "22.0.2", "@rollup/plugin-eslint": "^8.0.2", @@ -2283,9 +2283,9 @@ } }, "node_modules/@kitware/vtk.js": { - "version": "26.5.3", - "resolved": "https://registry.npmjs.org/@kitware/vtk.js/-/vtk.js-26.5.3.tgz", - "integrity": "sha512-TkXS7KgZf3cr0cEsv9nTYgsXIK+B60b0q2cpHXHhTdD9ReHRyD3FbCF0cOi95lO0KlpyuDy58Fe6yFZwjmnnpw==", + "version": "26.5.5", + "resolved": "https://registry.npmjs.org/@kitware/vtk.js/-/vtk.js-26.5.5.tgz", + "integrity": "sha512-eS6mz8uuCqFE8pfwzoVaNS21u68X9FIdrBDeIt09VE+EWQ8nw+yBCZMyfZxqazq3wOTrUd6de4SEeaDvAVEz/w==", "dev": true, "dependencies": { "@babel/runtime": "7.17.9", @@ -16574,9 +16574,9 @@ } }, "@kitware/vtk.js": { - "version": "26.5.3", - "resolved": "https://registry.npmjs.org/@kitware/vtk.js/-/vtk.js-26.5.3.tgz", - "integrity": "sha512-TkXS7KgZf3cr0cEsv9nTYgsXIK+B60b0q2cpHXHhTdD9ReHRyD3FbCF0cOi95lO0KlpyuDy58Fe6yFZwjmnnpw==", + "version": "26.5.5", + "resolved": "https://registry.npmjs.org/@kitware/vtk.js/-/vtk.js-26.5.5.tgz", + "integrity": "sha512-eS6mz8uuCqFE8pfwzoVaNS21u68X9FIdrBDeIt09VE+EWQ8nw+yBCZMyfZxqazq3wOTrUd6de4SEeaDvAVEz/w==", "dev": true, "requires": { "@babel/runtime": "7.17.9", diff --git a/package.json b/package.json index 04b539f..7aede27 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@babel/preset-env": "^7.19.1", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", - "@kitware/vtk.js": "^26.5.3", + "@kitware/vtk.js": "^26.5.5", "@rollup/plugin-babel": "^5.3.1", "@rollup/plugin-commonjs": "22.0.2", "@rollup/plugin-eslint": "^8.0.2", @@ -77,4 +77,4 @@ "files": [ "dist" ] -} +} \ No newline at end of file diff --git a/src/core/Picking.ts b/src/core/Picking.ts index 52db285..1e395e3 100644 --- a/src/core/Picking.ts +++ b/src/core/Picking.ts @@ -1,6 +1,5 @@ import { FieldAssociations } from '@kitware/vtk.js/Common/DataModel/DataSet/Constants.js'; import vtkOpenGLHardwareSelector from '@kitware/vtk.js/Rendering/OpenGL/HardwareSelector'; -import { FixedVTKOpenGLRenderWindow } from '@kitware/vtk.js/type-patches'; import { Vector2, Vector3 } from '@kitware/vtk.js/types'; import { forwardRef, @@ -342,7 +341,7 @@ export default forwardRef(function ViewPicking(props: Props, fwdRef) { const getScreenEventPositionFor = useCallback( (source: MouseEvent) => { const rw = openGLRenderWindowAPI.get(); - const canvas = (rw as FixedVTKOpenGLRenderWindow).getCanvas(); + const canvas = rw.getCanvas(); if (!canvas) return { x: 0, y: 0, z: 0 }; const bounds = canvas.getBoundingClientRect(); diff --git a/src/core/modules/useApplyCenterOfRotation.ts b/src/core/modules/useApplyCenterOfRotation.ts index 0e296c9..c70436d 100644 --- a/src/core/modules/useApplyCenterOfRotation.ts +++ b/src/core/modules/useApplyCenterOfRotation.ts @@ -1,4 +1,4 @@ -import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; +import vtkInteractorStyle from '@kitware/vtk.js/Rendering/Core/InteractorStyle'; import { FixedVTKRenderer, VtkRendererEvent, diff --git a/src/core/modules/useInteractorStyle.ts b/src/core/modules/useInteractorStyle.ts index be25598..0827eb8 100644 --- a/src/core/modules/useInteractorStyle.ts +++ b/src/core/modules/useInteractorStyle.ts @@ -20,8 +20,8 @@ import vtkMouseCameraTrackballZoomManipulator, { import vtkMouseCameraTrackballZoomToMouseManipulator, { IMouseCameraTrackballZoomToMouseManipulatorInitialValues, } from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballZoomToMouseManipulator'; -import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; import vtkInteractorStyleManipulator from '@kitware/vtk.js/Interaction/Style/InteractorStyleManipulator'; +import vtkInteractorStyle from '@kitware/vtk.js/Rendering/Core/InteractorStyle'; import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; import deepEqual from 'deep-equal'; import { useCallback, useEffect, useRef } from 'react'; diff --git a/src/global.d.ts b/src/global.d.ts index e8ae938..54527d8 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -2,16 +2,12 @@ declare module '@kitware/vtk.js/type-patches' { import { EventHandler, vtkSubscription } from '@kitware/vtk.js/interfaces'; import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; - import vtkOpenGLRenderWindow from '@kitware/vtk.js/Rendering/OpenGL/RenderWindow'; + export interface FixedVTKRenderWindowInteractor extends vtkRenderWindowInteractor { setCurrentRenderer(ren: vtkRenderer): void; } - export interface FixedVTKOpenGLRenderWindow extends vtkOpenGLRenderWindow { - getCanvas(): HTMLElement | null; - } - export interface VtkRendererEvent { type: | 'ComputeVisiblePropBoundsEvent' @@ -53,1469 +49,6 @@ declare module '@kitware/vtk.js/Interaction/Style/InteractorStyle/Constants' { } } -declare module '@kitware/vtk.js/Interaction/Style/InteractorStyle' { - import { EventHandler, vtkSubscription } from '@kitware/vtk.js/interfaces'; - import vtkInteractorObserver from '@kitware/vtk.js/Rendering/Core/InteractorObserver'; - - export interface vtkInteractorStyle extends vtkInteractorObserver { - /** - * Start a Rotate event. - */ - startRotate(): void; - - /** - * Invoke a StartRotate event. - */ - invokeStartRotateEvent(...args: unknown[]): void; - - /** - * Registers a callback on a StartRotate event. - */ - onStartRotateEvent(cb: EventHandler, priority?: number): vtkSubscription; - - /** - * Ends a Rotate event. - */ - endRotate(): void; - - /** - * Invoke an EndRotate event. - */ - invokeEndRotateEvent(...args: unknown[]): void; - - /** - * Registers a callback on an EndRotate event. - */ - onEndRotateEvent(cb: EventHandler, priority?: number): vtkSubscription; - /** - * Start a Pan event. - */ - startPan(): void; - - /** - * Invoke a StartPan event. - */ - invokeStartPanEvent(...args: unknown[]): void; - - /** - * Registers a callback on a StartPan event. - */ - onStartPanEvent(cb: EventHandler, priority?: number): vtkSubscription; - - /** - * Ends a Pan event. - */ - endPan(): void; - - /** - * Invoke an EndPan event. - */ - invokeEndPanEvent(...args: unknown[]): void; - - /** - * Registers a callback on an EndPan event. - */ - onEndPanEvent(cb: EventHandler, priority?: number): vtkSubscription; - /** - * Start a Spin event. - */ - startSpin(): void; - - /** - * Invoke a StartSpin event. - */ - invokeStartSpinEvent(...args: unknown[]): void; - - /** - * Registers a callback on a StartSpin event. - */ - onStartSpinEvent(cb: EventHandler, priority?: number): vtkSubscription; - - /** - * Ends a Spin event. - */ - endSpin(): void; - - /** - * Invoke an EndSpin event. - */ - invokeEndSpinEvent(...args: unknown[]): void; - - /** - * Registers a callback on an EndSpin event. - */ - onEndSpinEvent(cb: EventHandler, priority?: number): vtkSubscription; - /** - * Start a Dolly event. - */ - startDolly(): void; - - /** - * Invoke a StartDolly event. - */ - invokeStartDollyEvent(...args: unknown[]): void; - - /** - * Registers a callback on a StartDolly event. - */ - onStartDollyEvent(cb: EventHandler, priority?: number): vtkSubscription; - - /** - * Ends a Dolly event. - */ - endDolly(): void; - - /** - * Invoke an EndDolly event. - */ - invokeEndDollyEvent(...args: unknown[]): void; - - /** - * Registers a callback on an EndDolly event. - */ - onEndDollyEvent(cb: EventHandler, priority?: number): vtkSubscription; - /** - * Start a CameraPose event. - */ - startCameraPose(): void; - - /** - * Invoke a StartCameraPose event. - */ - invokeStartCameraPoseEvent(...args: unknown[]): void; - - /** - * Registers a callback on a StartCameraPose event. - */ - onStartCameraPoseEvent( - cb: EventHandler, - priority?: number - ): vtkSubscription; - - /** - * Ends a CameraPose event. - */ - endCameraPose(): void; - - /** - * Invoke an EndCameraPose event. - */ - invokeEndCameraPoseEvent(...args: unknown[]): void; - - /** - * Registers a callback on an EndCameraPose event. - */ - onEndCameraPoseEvent(cb: EventHandler, priority?: number): vtkSubscription; - /** - * Start a WindowLevel event. - */ - startWindowLevel(): void; - - /** - * Invoke a StartWindowLevel event. - */ - invokeStartWindowLevelEvent(...args: unknown[]): void; - - /** - * Registers a callback on a StartWindowLevel event. - */ - onStartWindowLevelEvent( - cb: EventHandler, - priority?: number - ): vtkSubscription; - - /** - * Ends a WindowLevel event. - */ - endWindowLevel(): void; - - /** - * Invoke an EndWindowLevel event. - */ - invokeEndWindowLevelEvent(...args: unknown[]): void; - - /** - * Registers a callback on an EndWindowLevel event. - */ - onEndWindowLevelEvent(cb: EventHandler, priority?: number): vtkSubscription; - /** - * Start a Slice event. - */ - startSlice(): void; - - /** - * Invoke a StartSlice event. - */ - invokeStartSliceEvent(...args: unknown[]): void; - - /** - * Registers a callback on a StartSlice event. - */ - onStartSliceEvent(cb: EventHandler, priority?: number): vtkSubscription; - - /** - * Ends a Slice event. - */ - endSlice(): void; - - /** - * Invoke an EndSlice event. - */ - invokeEndSliceEvent(...args: unknown[]): void; - - /** - * Registers a callback on an EndSlice event. - */ - onEndSliceEvent(cb: EventHandler, priority?: number): vtkSubscription; - - /** - * Handles a keypress. - */ - handleKeyPress(callData: unknown): void; - } - - export interface IInteractorStyleInitialValues { - autoAdjustCameraClippingRange?: boolean; - } - - export function extend( - publicAPI: object, - model: object, - initialValues?: IInteractorStyleInitialValues - ): void; - - export const vtkInteractorStyle: { - extend: typeof extend; - }; - - export default vtkInteractorStyle; -} - -declare module '@kitware/vtk.js/Interaction/Style/InteractorStyleManipulator' { - import vtkCompositeGestureManipulator from '@kitware/vtk.js/Interaction/Manipulators/CompositeGestureManipulator'; - import vtkCompositeKeyboardManipulator from '@kitware/vtk.js/Interaction/Manipulators/CompositeKeyboardManipulator'; - import vtkCompositeMouseManipulator from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; - import vtkCompositeVRManipulator from '@kitware/vtk.js/Interaction/Manipulators/CompositeVRManipulator'; - import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; - import { - Device, - Input, - } from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor/Constants'; - import { Nullable, Vector3 } from '@kitware/vtk.js/types'; - - export interface vtkInteractorStyleManipulator extends vtkInteractorStyle { - /** - * Remove all manipulators. - */ - removeAllManipulators(): void; - - /** - * Remove mouse manipulators. - */ - removeAllMouseManipulators(): void; - - /** - * Remove keyboard manipulators. - */ - removeAllKeyboardManipulators(): void; - - /** - * Remove VR manipulators. - */ - removeAllVRManipulators(): void; - - /** - * Remove gesture manipulators. - */ - removeAllGestureManipulators(): void; - - /** - * Adds a mouse manipulator. - * @param manipulator the manipulator to add - * @returns whether the manipulator has been added - */ - addMouseManipulator(manipulator: vtkCompositeMouseManipulator): boolean; - - /** - * Adds a keyboard manipulator. - * @param manipulator the manipulator to add - * @returns whether the manipulator has been added - */ - addKeyboardManipulator( - manipulator: vtkCompositeKeyboardManipulator - ): boolean; - - /** - * Adds a VR manipulator. - * @param manipulator the manipulator to add - * @returns whether the manipulator has been added - */ - addVRManipulator(manipulator: vtkCompositeVRManipulator): boolean; - - /** - * Adds a gesture manipulator. - * @param manipulator the manipulator to add - * @returns whether the manipulator has been added - */ - addGestureManipulator(manipulator: vtkCompositeGestureManipulator): boolean; - - /** - * Removes a mouse manipulator. - * @param manipulator the manipulator to remove - */ - removeMouseManipulator(manipulator: vtkCompositeMouseManipulator): void; - - /** - * Removes a keyboard manipulator. - * @param manipulator the manipulator to remove - */ - removeKeyboardManipulator( - manipulator: vtkCompositeKeyboardManipulator - ): void; - - /** - * Removes a VR manipulator. - * @param manipulator the manipulator to remove - */ - removeVRManipulator(manipulator: vtkCompositeVRManipulator): void; - - /** - * Removes a gesture manipulator. - * @param manipulator the manipulator to remove - */ - removeGestureManipulator(manipulator: vtkCompositeGestureManipulator): void; - - /** - * Gets the number of mouse manipulators. - */ - getNumberOfMouseManipulators(): number; - - /** - * Gets the number of keyboard manipulators. - */ - getNumberOfKeyboardManipulators(): number; - - /** - * Gets the number of VR manipulators. - */ - getNumberOfVRManipulators(): number; - - /** - * Gets the number of gesture manipulators. - */ - getNumberOfGestureManipulators(): number; - - /** - * Resets/clears the current manipulator. - */ - resetCurrentManipulator(): void; - - /** - * Finds a mouse manipulator with a given control set. - * @param button which button - * @param shift shift enabled - * @param scroll scroll enabled - * @param alt alt enabled - */ - findMouseManipulator( - button: number, - shift: boolean, - scroll: boolean, - alt: boolean - ): Nullable; - - /** - * Finds a VR manipulator with a given device + input. - * @param device - * @param input - */ - findVRManipulator( - device: Device, - input: Input - ): Nullable; - - /** - * Handles a left button press event. - * @param callData event data - */ - handleLeftButtonPress(callData: unknown): void; - - /** - * Handles a middle button press event. - * @param callData event data - */ - handleMiddleButtonPress(callData: unknown): void; - - /** - * Handles a right button press event. - * @param callData event data - */ - handleRightButtonPress(callData: unknown): void; - - /** - * Handles a left button release event. - * @param callData event data - */ - handleLeftButtonRelease(callData: unknown): void; - - /** - * Handles a middle button release event. - * @param callData event data - */ - handleMiddleButtonRelease(callData: unknown): void; - - /** - * Handles a right button release event. - * @param callData event data - */ - handleRightButtonRelease(callData: unknown): void; - - /** - * Handles the start of a wheel event. - * @param callData event data - */ - handleStartMouseWheel(callData: unknown): void; - - /** - * Handles a wheel event. - * @param callData event data - */ - handleMouseWheel(callData: unknown): void; - - /** - * Handles the end of a wheel event. - * @param callData event data - */ - handleEndMouseWheel(callData: unknown): void; - - /** - * Handles a mouse move. - * @param callData event data - */ - handleMouseMove(callData: unknown): void; - - /** - * Handles a 3D button event. - * @param callData event data - */ - handleButton3D(ed: unknown): void; - - /** - * Handles a 3D move event. - * @param ed event data - */ - handleMove3D(ed: unknown): void; - - /** - * Handles a keypress. - * @param callData event data - */ - handleKeyPress(callData: unknown): void; - - /** - * Handles a keydown event. - * @param callData event data - */ - handleKeyDown(callData: unknown): void; - - /** - * Handles a keyup event. - * @param callData event data - */ - handleKeyUp(callData: unknown): void; - - /** - * Handles the start of a pinch gesture. - * @param callData event data - */ - handleStartPinch(callData: unknown): void; - - /** - * Handles the end of a pinch gesture. - * @param callData event data - */ - handleEndPinch(callData: unknown): void; - - /** - * Handles the start of a rotate gesture. - * @param callData event data - */ - handleStartRotate(callData: unknown): void; - - /** - * Handles the end of a rotate gesture. - * @param callData event data - */ - handleEndRotate(callData: unknown): void; - - /** - * Handles the start of a pan gesture. - * @param callData event data - */ - handleStartPan(callData: unknown): void; - - /** - * Handles the end of a pan gesture. - * @param callData event data - */ - handleEndPan(callData: unknown): void; - - /** - * Handles a pinch gesture. - * @param callData event data - */ - handlePinch(callData: unknown): void; - - /** - * Handles a rotate gesture. - * @param callData event data - */ - handleRotate(callData: unknown): void; - - /** - * Handles a pan gesture. - * @param callData event data - */ - handlePan(callData: unknown): void; - - /** - * Handles a button down event. - * @param button which button - * @param callData event data - */ - onButtonDown(button: number, callData: unknown): void; - - /** - * Handles a button up event. - * @param button which button - */ - onButtonUp(button: number): void; - - /** - * Sets the rotation factor. - * @param factor rotation factor - */ - setRotationFactor(factor: number): boolean; - - /** - * Gets the rotation factor. - */ - getRotationFactor(): number; - - getMouseManipulators(): vtkCompositeMouseManipulator[]; - getMouseManipulators(): vtkCompositeMouseManipulator[]; - getMouseManipulators(): vtkCompositeMouseManipulator[]; - getMouseManipulators(): vtkCompositeMouseManipulator[]; - } - - export interface IInteractorStyleManipulatorInitialValues { - centerOfRotation?: Vector3; - rotationFactor?: number; - } - - export function newInstance( - initialValues?: IInteractorStyleManipulatorInitialValues - ): vtkInteractorStyleManipulator; - - export function extend( - publicAPI: object, - model: object, - initialValues?: IInteractorStyleManipulatorInitialValues - ): void; - - export const vtkInteractorStyleManipulator: { - newInstance: typeof newInstance; - extend: typeof extend; - }; - - export default vtkInteractorStyleManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator' { - import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; - import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; - - export interface vtkCompositeMouseManipulator { - /** - * Starts an interaction event. - */ - startInteraction(): void; - - /** - * Ends an interaction event. - */ - endInteraction(): void; - - /** - * Handles a button down event. - * @param interactor the interactor - * @param renderer the renderer - * @param position the display position - */ - onButtonDown( - interactor: vtkRenderWindowInteractor, - renderer: vtkRenderer, - position: { x: number; y: number } - ): void; - - /** - * Handles a button up event. - * @param interactor the interactor - */ - onButtonUp(interactor: vtkRenderWindowInteractor): void; - - /** - * Handles a mouse move event. - * @param interactor the interactor - * @param renderer the renderer - * @param position the display position - */ - onMouseMove( - interactor: vtkRenderWindowInteractor, - renderer: vtkRenderer, - position: { x: number; y: number } - ): void; - - /** - * Handles a start scroll event. - * @param interactor the interactor - * @param renderer the renderer - * @param delta the scroll delta - */ - onStartScroll( - interactor: vtkRenderWindowInteractor, - renderer: vtkRenderer, - delta: number - ): void; - - /** - * Handles a scroll event. - * @param interactor the interactor - */ - onEndScroll(interactor: vtkRenderWindowInteractor): void; - - /** - * Is drag enabled. - */ - isDragEnabled(): boolean; - - /** - * Sets if drag is enabled. - * @param enabled - */ - setDragEnabled(enabled: boolean): boolean; - - /** - * Is scroll enabled. - */ - isScrollEnabled(): boolean; - - /** - * Sets if scroll is enabled. - * @param enabled - */ - setScrollEnabled(enabled: boolean): boolean; - - /** - * Sets the associated button. - * @param btn - */ - setButton(btn: number): boolean; - - /** - * Gets the associated button. - */ - getButton(): number; - - /** - * Sets if the shift key is required. - * @param shift - */ - setShift(shift: boolean): boolean; - - /** - * Gets flag if shift key is required. - */ - getShift(): boolean; - - /** - * Sets if the control key is required. - * @param ctrl - */ - setControl(ctrl: boolean): boolean; - - /** - * Gets flag if control key is required. - */ - getControl(): boolean; - - /** - * Sets if the alt key is required. - * @param alt - */ - setAlt(alt: boolean): boolean; - - /** - * Gets flag if alt key is required. - */ - getAlt(): boolean; - } - - export interface ICompositeMouseManipulatorInitialValues { - button?: number; - shift?: boolean; - control?: boolean; - alt?: boolean; - dragEnabled?: boolean; - scrollEnabled?: boolean; - } - - export function extend( - publicAPI: object, - model: object, - initialValues?: ICompositeMouseManipulatorInitialValues - ): void; - - export const vtkCompositeMouseManipulator: { - extend: typeof extend; - }; - - export default vtkCompositeMouseManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/CompositeKeyboardManipulator' { - import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; - import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; - - export interface vtkCompositeKeyboardManipulator { - /** - * Handles a keypress event. - * @param interactor the interactor - * @param renderer the renderer - * @param key the key - */ - onKeyPress( - interactor: vtkRenderWindowInteractor, - renderer: vtkRenderer, - key: KeyboardEvent['key'] - ): void; - - /** - * Handles a keydown event. - * @param interactor the interactor - * @param renderer the renderer - * @param key the key - */ - onKeyDown( - interactor: vtkRenderWindowInteractor, - renderer: vtkRenderer, - key: KeyboardEvent['key'] - ): void; - - /** - * Handles a keyup event. - * @param interactor the interactor - * @param renderer the renderer - * @param key the key - */ - onKeyUp( - interactor: vtkRenderWindowInteractor, - renderer: vtkRenderer, - key: KeyboardEvent['key'] - ): void; - } - - export function extend(publicAPI: object, model: object): void; - - export const vtkCompositeKeyboardManipulator: { - extend: typeof extend; - }; - - export default vtkCompositeKeyboardManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/CompositeGestureManipulator' { - import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; - import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; - import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; - import { Nullable } from '@kitware/vtk.js/types'; - - export interface vtkCompositeGestureManipulator { - /** - * Starts an interaction event. - */ - startInteraction(): void; - - /** - * Ends an interaction event. - */ - endInteraction(): void; - - /** - * Handles a start pinch gesture. - * @param interactor - * @param scale - */ - onStartPinch(interactor: vtkRenderWindowInteractor, scale: number): void; - - /** - * Handles a pinch gesture. - * @param interactor - * @param renderer - * @param scale - */ - onPinch( - interactor: vtkRenderWindowInteractor, - renderer: vtkRenderer, - scale: number - ): void; - - /** - * Handles an end pinch gesture. - * @param interactor - */ - onEndPinch(interactor: vtkRenderWindowInteractor): void; - - /** - * Handles a start rotate gesture. - * @param interactor - * @param rotation - */ - onStartRotate( - interactor: vtkRenderWindowInteractor, - rotation: number - ): void; - - /** - * Handles a rotate gesture. - * @param interactor - * @param renderer - * @param rotation - */ - onRotate( - interactor: vtkRenderWindowInteractor, - renderer: vtkRenderer, - rotation: number - ): void; - - /** - * Handles an end pinch gesture. - * @param interactor - */ - onEndRotate(interactor: vtkRenderWindowInteractor): void; - - /** - * Handles a start pan gesture. - * @param interactor - * @param translation - */ - onStartPan( - interactor: vtkRenderWindowInteractor, - translation: number - ): void; - - /** - * Handles a pan gesture. - * @param interactor - * @param renderer - * @param translation - */ - onPan( - interactor: vtkRenderWindowInteractor, - renderer: vtkRenderer, - translation: number - ): void; - - /** - * Handles an end pan gesture. - * @param interactor - */ - onEndPan(interactor: vtkRenderWindowInteractor): void; - - /** - * Is pinch enabled. - */ - isPinchEnabled(): boolean; - - /** - * Sets if pinch is enabled. - * @param pinch - */ - setPinchEnabled(pinch: boolean): boolean; - - /** - * Gets flag if pinch is enabled. - */ - getPinchEnabled(): boolean; - - /** - * Is pan enabled. - */ - isPanEnabled(): boolean; - - /** - * Sets if pan is enabled. - * @param pan - */ - setPanEnabled(pan: boolean): boolean; - - /** - * Gets flag if pan is enabled. - */ - getPanEnabled(): boolean; - - /** - * Is rotate enabled. - */ - isRotateEnabled(): boolean; - - /** - * Sets if rotate is enabled. - * @param rotate - */ - setRotateEnabled(rotate: boolean): boolean; - - /** - * Gets flag if rotate is enabled. - */ - getRotateEnabled(): boolean; - - /** - * Sets the interactor style. - * @param style vtkInteractorStyle - */ - setInteractorStyle(style: Nullable): boolean; - - /** - * Gets the interactor style. - */ - getInteractorStyle(): Nullable; - } - - export interface ICompositeGestureManipulatorInitialValues { - pinchEnabled?: boolean; - panEnabled?: boolean; - rotateEnabled?: boolean; - } - - export function extend( - publicAPI: object, - model: object, - initialValues?: ICompositeGestureManipulatorInitialValues - ): void; - - export const vtkCompositeGestureManipulator: { - extend: typeof extend; - }; - - export default vtkCompositeGestureManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/CompositeVRManipulator' { - import { States } from '@kitware/vtk.js/Interaction/Style/InteractorStyle/Constants'; - import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; - import vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor'; - - import { - Device, - Input, - } from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor/Constants'; - - export interface vtkCompositeVRManipulator { - onButton3D( - interactor: vtkRenderWindowInteractor, - renderer: vtkRenderer, - state: States, - device: Device, - input: Input, - pressed: boolean - ): void; - - onMove3D( - interactor: vtkRenderWindowInteractor, - renderer: vtkRenderer, - state: States, - device: Device, - input: Input, - pressed: boolean - ): void; - } - - export interface ICompositeVRManipulatorInitialValues { - device?: Device; - input?: Input; - } - - export function extend( - publicAPI: object, - model: object, - initialValues?: ICompositeVRManipulatorInitialValues - ): void; - - export const vtkCompositeVRManipulator: { - extend: typeof extend; - }; - - export default vtkCompositeVRManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator' { - import vtkInteractorObserver from '@kitware/vtk.js/Rendering/Core/InteractorObserver'; - import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; - import { Vector2, Vector3 } from '@kitware/vtk.js/types'; - - export interface vtkCompositeCameraManipulator { - /** - * Computes the display center. - * @param observer - * @param renderer - */ - computeDisplayCenter( - observer: vtkInteractorObserver, - renderer: vtkRenderer - ): void; - - /** - * Sets the rotation factor. - * @param factor - */ - setRotationFactor(factor: number): boolean; - - /** - * Gets the rotation factor. - */ - getRotationFactor(): number; - - /** - * Sets the display center. - * @param center - */ - setDisplayCenter(center: Vector2): boolean; - setDisplayCenter(x: number, y: number): boolean; - - /** - * Gets the display center. - */ - getDisplayCenter(): Vector2; - - /** - * Sets the center. - * @param center - */ - setCenter(center: Vector3): boolean; - setCenter(x: number, y: number, z: number): boolean; - - /** - * Gets the center. - */ - getCenter(): Vector3; - } - - export interface ICompositeCameraManipulatorInitialValues { - center?: Vector3; - rotationFactor?: number; - displayCenter?: Vector2; - } - - export function extend( - publicAPI: object, - model: object, - initialValues?: ICompositeCameraManipulatorInitialValues - ): void; - - export const vtkCompositeCameraManipulator: { - extend: typeof extend; - }; - - export default vtkCompositeCameraManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballPanManipulator' { - import vtkCompositeCameraManipulator, { - ICompositeCameraManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator'; - import vtkCompositeMouseManipulator, { - ICompositeMouseManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; - import { vtkObject } from '@kitware/vtk.js/interfaces'; - - export interface vtkMouseCameraTrackballPanManipulator - extends vtkObject, - vtkCompositeCameraManipulator, - vtkCompositeMouseManipulator {} - - export interface IMouseCameraTrackballPanManipulatorInitialValues - extends ICompositeCameraManipulatorInitialValues, - ICompositeMouseManipulatorInitialValues {} - - export function newInstance( - initialValues?: IMouseCameraTrackballPanManipulatorInitialValues - ): vtkMouseCameraTrackballPanManipulator; - - export function extend( - publicAPI: object, - model: object, - initialValues?: IMouseCameraTrackballPanManipulatorInitialValues - ): void; - - export const vtkMouseCameraTrackballPanManipulator: { - newInstance: typeof newInstance; - extend: typeof extend; - }; - - export default vtkMouseCameraTrackballPanManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballRollManipulator' { - import vtkCompositeCameraManipulator, { - ICompositeCameraManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator'; - import vtkCompositeMouseManipulator, { - ICompositeMouseManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; - import { vtkObject } from '@kitware/vtk.js/interfaces'; - - export interface vtkMouseCameraTrackballRollManipulator - extends vtkObject, - vtkCompositeCameraManipulator, - vtkCompositeMouseManipulator {} - - export interface IMouseCameraTrackballRollManipulatorInitialValues - extends ICompositeCameraManipulatorInitialValues, - ICompositeMouseManipulatorInitialValues {} - - export function newInstance( - initialValues?: IMouseCameraTrackballRollManipulatorInitialValues - ): vtkMouseCameraTrackballRollManipulator; - - export function extend( - publicAPI: object, - model: object, - initialValues?: IMouseCameraTrackballRollManipulatorInitialValues - ): void; - - export const vtkMouseCameraTrackballRollManipulator: { - newInstance: typeof newInstance; - extend: typeof extend; - }; - - export default vtkMouseCameraTrackballRollManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballRotateManipulator' { - import vtkCompositeCameraManipulator, { - ICompositeCameraManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator'; - import vtkCompositeMouseManipulator, { - ICompositeMouseManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; - import { vtkObject } from '@kitware/vtk.js/interfaces'; - import { Vector3 } from '@kitware/vtk.js/types'; - - export interface vtkMouseCameraTrackballRotateManipulator - extends vtkObject, - vtkCompositeCameraManipulator, - vtkCompositeMouseManipulator { - /** - * Sets whether to use a given world-up vector. - * @param use boolean - */ - setUseWorldUpVec(use: boolean): boolean; - - /** - * Sets the world-up vector. - * @param vec the world-up vector - */ - setWorldUpVec(vec: Vector3): boolean; - setWorldUpVec(x: number, y: number, z: number): boolean; - - /** - * Gets the world-up vector. - */ - getWorldUpVec(): Vector3; - - /** - * Gets whether to use the focal point as the center of rotation. - */ - getUseFocalPointAsCenterOfRotation(): boolean; - - /** - * Sets using the focal point as the center of rotation. - * @param useFocalPoint - */ - setUseFocalPointAsCenterOfRotation(useFocalPoint: boolean): boolean; - } - - export interface IMouseCameraTrackballRotateManipulatorInitialValues - extends ICompositeCameraManipulatorInitialValues, - ICompositeMouseManipulatorInitialValues { - useWorldUpVec?: boolean; - worldUpVec?: Vector3; - useFocalPointAsCenterOfRotation?: boolean; - } - - export function newInstance( - initialValues?: IMouseCameraTrackballRotateManipulatorInitialValues - ): vtkMouseCameraTrackballRotateManipulator; - - export function extend( - publicAPI: object, - model: object, - initialValues?: IMouseCameraTrackballRotateManipulatorInitialValues - ): void; - - export const vtkMouseCameraTrackballRotateManipulator: { - newInstance: typeof newInstance; - extend: typeof extend; - }; - - export default vtkMouseCameraTrackballRotateManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballMultiRotateManipulator' { - import vtkCompositeCameraManipulator, { - ICompositeCameraManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator'; - import vtkCompositeMouseManipulator, { - ICompositeMouseManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; - import { vtkObject } from '@kitware/vtk.js/interfaces'; - export interface vtkMouseCameraTrackballMultiRotateManipulator - extends vtkObject, - vtkCompositeCameraManipulator, - vtkCompositeMouseManipulator {} - - export interface IMouseCameraTrackballMultiRotateManipulatorInitialValues - extends ICompositeCameraManipulatorInitialValues, - ICompositeMouseManipulatorInitialValues {} - - export function newInstance( - initialValues?: IMouseCameraTrackballMultiRotateManipulatorInitialValues - ): vtkMouseCameraTrackballMultiRotateManipulator; - - export function extend( - publicAPI: object, - model: object, - initialValues?: IMouseCameraTrackballMultiRotateManipulatorInitialValues - ): void; - - export const vtkMouseCameraTrackballMultiRotateManipulator: { - newInstance: typeof newInstance; - extend: typeof extend; - }; - - export default vtkMouseCameraTrackballMultiRotateManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballZoomManipulator' { - import vtkCompositeCameraManipulator, { - ICompositeCameraManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator'; - import vtkCompositeMouseManipulator, { - ICompositeMouseManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; - import { vtkObject } from '@kitware/vtk.js/interfaces'; - export interface vtkMouseCameraTrackballZoomManipulator - extends vtkObject, - vtkCompositeCameraManipulator, - vtkCompositeMouseManipulator { - /** - * Sets whether to flip the zoom direction. - * @param flip - */ - setFlipDirection(flip: boolean): boolean; - - /** - * Gets the flip direction. - */ - getFlipDirection(): boolean; - } - - export interface IMouseCameraTrackballZoomManipulatorInitialValues - extends ICompositeCameraManipulatorInitialValues, - ICompositeMouseManipulatorInitialValues { - flipDirection?: boolean; - } - - export function newInstance( - initialValues?: IMouseCameraTrackballZoomManipulatorInitialValues - ): vtkMouseCameraTrackballZoomManipulator; - - export function extend( - publicAPI: object, - model: object, - initialValues?: IMouseCameraTrackballZoomManipulatorInitialValues - ): void; - - export const vtkMouseCameraTrackballZoomManipulator: { - newInstance: typeof newInstance; - extend: typeof extend; - }; - - export default vtkMouseCameraTrackballZoomManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballZoomToMouseManipulator' { - import vtkMouseCameraTrackballZoomManipulator, { - IMouseCameraTrackballZoomManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/MouseCameraTrackballZoomManipulator'; - - export type vtkMouseCameraTrackballZoomToMouseManipulator = - vtkMouseCameraTrackballZoomManipulator; - - export type IMouseCameraTrackballZoomToMouseManipulatorInitialValues = - IMouseCameraTrackballZoomManipulatorInitialValues; - - export function newInstance( - initialValues?: IMouseCameraTrackballZoomToMouseManipulatorInitialValues - ): vtkMouseCameraTrackballZoomToMouseManipulator; - - export function extend( - publicAPI: object, - model: object, - initialValues?: IMouseCameraTrackballZoomToMouseManipulatorInitialValues - ): void; - - export const vtkMouseCameraTrackballZoomToMouseManipulator: { - newInstance: typeof newInstance; - extend: typeof extend; - }; - - export default vtkMouseCameraTrackballZoomToMouseManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/MouseBoxSelectorManipulator' { - import vtkCompositeMouseManipulator, { - ICompositeMouseManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeMouseManipulator'; - import { - EventHandler, - vtkObject, - vtkSubscription, - } from '@kitware/vtk.js/interfaces'; - import { Nullable } from '@kitware/vtk.js/types'; - - export interface vtkMouseBoxSelectorManipulator - extends vtkObject, - vtkCompositeMouseManipulator { - /** - * Invokes a box select change event. - */ - invokeBoxSelectChange(data: unknown): void; - - /** - * Registers a callback when a box select change event occurs. - * @param cb EventHandler - */ - onBoxSelectChange(cb: EventHandler): vtkSubscription; - - /** - * Invokes a box select input event. - */ - invokeBoxSelectInput(data: unknown): void; - - /** - * Registers a callback when a box select input event occurs. - * @param cb EventHandler - */ - onBoxSelectInput(cb: EventHandler): vtkSubscription; - - /** - * Sets whether to render the selection. - * @param render - */ - setRenderSelection(render: boolean): boolean; - - /** - * Get whether to render the selection. - */ - getRenderSelection(): boolean; - - /** - * Sets the selection box style. - * @param style - */ - setSelectionStyle(style: Record): boolean; - - /** - * Gets the selection box style. - */ - getSelectionStyle(): Record; - - /** - * Sets the box container. - * @param container - */ - setContainer(container: Element): boolean; - - /** - * Gets the box container. - */ - getContainer(): Nullable; - } - - export interface IMouseBoxSelectorManipulatorInitialValues - extends ICompositeMouseManipulatorInitialValues { - renderSelection?: boolean; - selectionStyle?: Record; - container?: Element; - } - - export function newInstance( - initialValues?: IMouseBoxSelectorManipulatorInitialValues - ): vtkMouseBoxSelectorManipulator; - - export function extend( - publicAPI: object, - model: object, - initialValues?: IMouseBoxSelectorManipulatorInitialValues - ): void; - - export const vtkMouseBoxSelectorManipulator: { - newInstance: typeof newInstance; - extend: typeof extend; - }; - - export default vtkMouseBoxSelectorManipulator; -} - -declare module '@kitware/vtk.js/Interaction/Manipulators/GestureCameraManipulator' { - import vtkCompositeCameraManipulator, { - ICompositeCameraManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeCameraManipulator'; - import vtkCompositeGestureManipulator, { - ICompositeGestureManipulatorInitialValues, - } from '@kitware/vtk.js/Interaction/Manipulators/CompositeGestureManipulator'; - import { vtkObject } from '@kitware/vtk.js/interfaces'; - export interface vtkGestureCameraManipulator - extends vtkObject, - vtkCompositeCameraManipulator, - vtkCompositeGestureManipulator {} - - export interface IGestureCameraManipulatorInitialValues - extends ICompositeCameraManipulatorInitialValues, - ICompositeGestureManipulatorInitialValues { - flipDirection?: boolean; - } - - export function newInstance( - initialValues?: IGestureCameraManipulatorInitialValues - ): vtkGestureCameraManipulator; - - export function extend( - publicAPI: object, - model: object, - initialValues?: IGestureCameraManipulatorInitialValues - ): void; - - export const vtkGestureCameraManipulator: { - newInstance: typeof newInstance; - extend: typeof extend; - }; - - export default vtkGestureCameraManipulator; -} - declare module '@kitware/vtk.js/Common/DataModel/SelectionNode' { import { vtkObject } from '@kitware/vtk.js/interfaces'; import vtkProp from '@kitware/vtk.js/Rendering/Core/Prop'; diff --git a/src/types.ts b/src/types.ts index 4735aa0..3ae47ce 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,7 +1,7 @@ -import vtkInteractorStyle from '@kitware/vtk.js/Interaction/Style/InteractorStyle'; import { vtkObject } from '@kitware/vtk.js/interfaces'; import vtkAbstractMapper from '@kitware/vtk.js/Rendering/Core/AbstractMapper'; import vtkCamera from '@kitware/vtk.js/Rendering/Core/Camera'; +import vtkInteractorStyle from '@kitware/vtk.js/Rendering/Core/InteractorStyle'; import vtkProp from '@kitware/vtk.js/Rendering/Core/Prop'; import vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer'; import vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow'; From 4b921390fecdefaa81ea45a0534505a70e84940c Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 22 Feb 2023 12:11:32 -0500 Subject: [PATCH 068/110] chore(github): update publish env --- .github/workflows/publish.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 7f126a6..07fc45b 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -3,11 +3,12 @@ on: push: branches: - master + - beta jobs: publish: name: Publish - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - name: Checkout uses: actions/checkout@v2 @@ -16,7 +17,7 @@ jobs: - name: Setup node uses: actions/setup-node@v1 with: - node-version: 12 + node-version: 18 - name: Install dependencies run: npm ci - name: Build From 29d65bf3c0d49e2257e70fbd75804edcfe799d41 Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 22 Feb 2023 12:32:38 -0500 Subject: [PATCH 069/110] chore: update rollup and other packages - Updated package type to "module" BREAKING CHANGE: this commit will release a breaking change, which was not properly done in a prior commit. See BREAKING_CHANGES.md for info. --- package-lock.json | 1702 ++++++++++----------------------------- package.json | 19 +- rollup.config.js | 2 +- usage/package-lock.json | 101 +-- 4 files changed, 463 insertions(+), 1361 deletions(-) diff --git a/package-lock.json b/package-lock.json index 50bf018..b7cb544 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,16 +20,17 @@ "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@kitware/vtk.js": "^26.5.5", - "@rollup/plugin-babel": "^5.3.1", - "@rollup/plugin-commonjs": "22.0.2", - "@rollup/plugin-eslint": "^8.0.2", - "@rollup/plugin-node-resolve": "^14.1.0", + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-commonjs": "24.0.1", + "@rollup/plugin-eslint": "^9.0.3", + "@rollup/plugin-node-resolve": "^15.0.1", + "@rollup/plugin-terser": "^0.4.0", "@rollup/plugin-typescript": "^11.0.0", "@types/deep-equal": "^1.0.1", "@types/react": "^18.0.21", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", - "commitizen": "4.2.5", + "commitizen": "4.3.0", "cross-env": "^7.0.2", "eslint": "^8.34.0", "eslint-config-prettier": "^8.6.0", @@ -41,16 +42,15 @@ "eslint-plugin-promise": "^6.0.1", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", - "gh-pages": "^4.0.0", + "gh-pages": "^5.0.0", "npm-run-all": "^4.1.5", "prettier": "^2.8.4", "prettier-plugin-organize-imports": "^3.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "rimraf": "^3.0.2", - "rollup": "^2.37.1", + "rimraf": "^4.1.2", + "rollup": "^3.17.2", "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-terser": "^7.0.2", "semantic-release": "20.1.0", "typescript": "^4.9.5" }, @@ -2102,103 +2102,6 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "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_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/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/@eslint/eslintrc/node_modules/globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/@eslint/eslintrc/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/@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, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -2597,410 +2500,162 @@ } }, "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz", + "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0", "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0" }, "peerDependenciesMeta": { "@types/babel__core": { "optional": true + }, + "rollup": { + "optional": true } } }, "node_modules/@rollup/plugin-commonjs": { - "version": "22.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz", - "integrity": "sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==", + "version": "24.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz", + "integrity": "sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.1.0", + "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "rollup": "^2.68.0" - } - }, - "node_modules/@rollup/plugin-eslint": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@rollup/plugin-eslint/-/plugin-eslint-8.0.5.tgz", - "integrity": "sha512-cSasMRxV4lddMpjcHSN9QV4MCDxYQWuXhc3xa0lUuw+DEQuS0tNoKNZEzsEZqoEvs4KVkHgDpbhQ4jKU+AZ9iw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.0.0", - "eslint": "^7.12.0" + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-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/@rollup/plugin-eslint/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@rollup/plugin-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/@rollup/plugin-eslint/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" + "rollup": "^2.68.0||^3.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@rollup/plugin-eslint/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/@rollup/plugin-eslint/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/@rollup/plugin-eslint/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/@rollup/plugin-eslint/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/@rollup/plugin-eslint/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/@rollup/plugin-eslint/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/@rollup/plugin-eslint/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/@rollup/plugin-eslint/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/@rollup/plugin-eslint/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/@rollup/plugin-eslint/node_modules/globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@rollup/plugin-eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@rollup/plugin-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/@rollup/plugin-eslint/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@rollup/plugin-eslint/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==", + "node_modules/@rollup/plugin-commonjs/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": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "balanced-match": "^1.0.0" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@rollup/plugin-eslint/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==", + "node_modules/@rollup/plugin-commonjs/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": { - "has-flag": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/@rollup/plugin-eslint/node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "node_modules/@rollup/plugin-eslint": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-eslint/-/plugin-eslint-9.0.3.tgz", + "integrity": "sha512-iV2m9BhPdsjQzmRVe3Nzovrjxbdq5Slva8bvUSzbM4gSBUaGXAFnFXcHcvO4N4tSuirZoY61mkn8KtV3G6o0iQ==", "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" + "@rollup/pluginutils": "^5.0.1", + "eslint": "^8.24.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@rollup/plugin-eslint/node_modules/table/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", + "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.0", + "is-module": "^1.0.0", + "resolve": "^1.22.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@rollup/plugin-eslint/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/@rollup/plugin-eslint/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" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-14.1.0.tgz", - "integrity": "sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==", + "node_modules/@rollup/plugin-terser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.0.tgz", + "integrity": "sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.19.0" + "serialize-javascript": "^6.0.0", + "smob": "^0.0.6", + "terser": "^5.15.1" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^2.78.0" + "rollup": "^2.x || ^3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, "node_modules/@rollup/plugin-typescript": { @@ -3029,7 +2684,7 @@ } } }, - "node_modules/@rollup/plugin-typescript/node_modules/@rollup/pluginutils": { + "node_modules/@rollup/pluginutils": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", @@ -3051,35 +2706,6 @@ } } }, - "node_modules/@rollup/plugin-typescript/node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, "node_modules/@semantic-release/commit-analyzer": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", @@ -3404,9 +3030,9 @@ } }, "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", "dev": true }, "node_modules/@types/json-schema": { @@ -3464,13 +3090,10 @@ } }, "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true }, "node_modules/@types/retry": { "version": "0.12.0", @@ -3958,6 +3581,7 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -4025,15 +3649,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -4201,13 +3816,10 @@ } }, "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true }, "node_modules/at-least-node": { "version": "1.0.0", @@ -4670,9 +4282,9 @@ } }, "node_modules/commitizen": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.2.5.tgz", - "integrity": "sha512-9sXju8Qrz1B4Tw7kC5KhnvwYQN88qs2zbiB8oyMsnXZyJ24PPGiNM3nHr73d32dnE3i8VJEXddBFIbOgYSEXtQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", + "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", "dev": true, "dependencies": { "cachedir": "2.3.0", @@ -4683,10 +4295,10 @@ "find-root": "1.1.0", "fs-extra": "9.1.0", "glob": "7.2.3", - "inquirer": "8.2.4", + "inquirer": "8.2.5", "is-utf8": "^0.2.1", "lodash": "4.17.21", - "minimist": "1.2.6", + "minimist": "1.2.7", "strip-bom": "4.0.0", "strip-json-comments": "3.1.1" }, @@ -5276,6 +4888,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/del/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", @@ -5360,9 +4987,9 @@ "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "node_modules/email-addresses": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", - "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz", + "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==", "dev": true }, "node_modules/emoji-regex": { @@ -5394,18 +5021,6 @@ "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/env-ci": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-8.0.0.tgz", @@ -6805,6 +6420,20 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", @@ -6884,12 +6513,6 @@ "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/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -6957,14 +6580,14 @@ } }, "node_modules/gh-pages": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-4.0.0.tgz", - "integrity": "sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-5.0.0.tgz", + "integrity": "sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ==", "dev": true, "dependencies": { - "async": "^2.6.1", + "async": "^3.2.4", "commander": "^2.18.0", - "email-addresses": "^3.0.1", + "email-addresses": "^5.0.0", "filenamify": "^4.3.0", "find-cache-dir": "^3.3.1", "fs-extra": "^8.1.0", @@ -7368,15 +6991,6 @@ } ] }, - "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/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -7450,9 +7064,9 @@ "dev": true }, "node_modules/inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", @@ -7548,15 +7162,6 @@ "node": ">=8" } }, - "node_modules/inquirer/node_modules/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7569,12 +7174,6 @@ "node": ">=8" } }, - "node_modules/inquirer/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, "node_modules/internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", @@ -8072,41 +7671,6 @@ "node": ">= 0.6.0" } }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "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/js-sdsl": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", @@ -8121,19 +7685,6 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "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/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -8420,12 +7971,6 @@ "dev": true, "optional": 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/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -8559,12 +8104,15 @@ } }, "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", "dev": true, "dependencies": { - "sourcemap-codec": "^1.4.8" + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" } }, "node_modules/make-dir": { @@ -8859,10 +8407,13 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minimist-options": { "version": "4.1.0", @@ -12315,15 +11866,6 @@ "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/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -12714,6 +12256,7 @@ "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, + "optional": true, "engines": { "node": ">=0.10.0" } @@ -12802,29 +12345,31 @@ } }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.1.2.tgz", + "integrity": "sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==", + "dev": true, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.17.2.tgz", + "integrity": "sha512-qMNZdlQPCkWodrAZ3qnJtvCAl4vpQ8q77uEujVCCbC/6CLB7Lcmvjq7HyiOSnf4fxTT9XgsE36oLHJBH49xjqA==", "dev": true, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.18.0", + "npm": ">=8.0.0" }, "optionalDependencies": { "fsevents": "~2.3.2" @@ -12839,22 +12384,6 @@ "node": ">=8.0.0" } }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -12886,6 +12415,21 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -13487,9 +13031,9 @@ } }, "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -13591,6 +13135,12 @@ "node": ">=8" } }, + "node_modules/smob": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/smob/-/smob-0.0.6.tgz", + "integrity": "sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==", + "dev": true + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -13610,13 +13160,6 @@ "source-map": "^0.6.0" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, "node_modules/spark-md5": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", @@ -14083,16 +13626,6 @@ "node": ">= 10.13.0" } }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, "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", @@ -14319,15 +13852,6 @@ "json5": "lib/cli.js" } }, - "node_modules/tsconfig-paths/node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -14534,12 +14058,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -16433,80 +15951,6 @@ } } }, - "@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": { - "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" - } - }, - "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" - } - }, - "globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "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 - }, - "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 - } - } - }, - "@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/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -16789,325 +16233,124 @@ "dev": true, "requires": { "@oozcitak/infra": "1.0.8", - "@oozcitak/util": "8.3.8" - } - }, - "@oozcitak/util": { - "version": "8.3.8", - "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", - "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", - "dev": true - }, - "@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dev": true, - "requires": { - "graceful-fs": "4.2.10" - } - }, - "@pnpm/npm-conf": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz", - "integrity": "sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==", - "dev": true, - "requires": { - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - } - }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-commonjs": { - "version": "22.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz", - "integrity": "sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - } - }, - "@rollup/plugin-eslint": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@rollup/plugin-eslint/-/plugin-eslint-8.0.5.tgz", - "integrity": "sha512-cSasMRxV4lddMpjcHSN9QV4MCDxYQWuXhc3xa0lUuw+DEQuS0tNoKNZEzsEZqoEvs4KVkHgDpbhQ4jKU+AZ9iw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.0.0", - "eslint": "^7.12.0" - }, - "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" - } - }, - "@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "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" - } - }, - "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" - } - }, - "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 - }, - "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" - } - }, - "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 - }, - "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": { - "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 - } - } - }, - "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" - } - }, - "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" - } - }, - "globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "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 - }, - "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 - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "@oozcitak/util": "8.3.8" + } + }, + "@oozcitak/util": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", + "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", + "dev": true + }, + "@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "requires": { + "graceful-fs": "4.2.10" + } + }, + "@pnpm/npm-conf": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-1.0.5.tgz", + "integrity": "sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==", + "dev": true, + "requires": { + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + } + }, + "@rollup/plugin-babel": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz", + "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + } + }, + "@rollup/plugin-commonjs": { + "version": "24.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz", + "integrity": "sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.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": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "balanced-match": "^1.0.0" } }, - "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==", + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" } }, - "table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "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.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.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 - } + "brace-expansion": "^2.0.1" } - }, - "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 } } }, + "@rollup/plugin-eslint": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-eslint/-/plugin-eslint-9.0.3.tgz", + "integrity": "sha512-iV2m9BhPdsjQzmRVe3Nzovrjxbdq5Slva8bvUSzbM4gSBUaGXAFnFXcHcvO4N4tSuirZoY61mkn8KtV3G6o0iQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "eslint": "^8.24.0" + } + }, "@rollup/plugin-node-resolve": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-14.1.0.tgz", - "integrity": "sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", + "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", - "is-builtin-module": "^3.1.0", + "is-builtin-module": "^3.2.0", "is-module": "^1.0.0", - "resolve": "^1.19.0" + "resolve": "^1.22.1" + } + }, + "@rollup/plugin-terser": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.0.tgz", + "integrity": "sha512-Ipcf3LPNerey1q9ZMjiaWHlNPEHNU/B5/uh9zXLltfEQ1lVSLLeZSgAtTPWGyw8Ip1guOeq+mDtdOlEj/wNxQw==", + "dev": true, + "requires": { + "serialize-javascript": "^6.0.0", + "smob": "^0.0.6", + "terser": "^5.15.1" } }, "@rollup/plugin-typescript": { @@ -17118,44 +16361,17 @@ "requires": { "@rollup/pluginutils": "^5.0.1", "resolve": "^1.22.1" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - } } }, "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - } + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" } }, "@semantic-release/commit-analyzer": { @@ -17416,9 +16632,9 @@ } }, "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", "dev": true }, "@types/json-schema": { @@ -17476,13 +16692,10 @@ } }, "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "requires": { - "@types/node": "*" - } + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true }, "@types/retry": { "version": "0.12.0", @@ -17852,7 +17065,8 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "peer": true }, "acorn-jsx": { "version": "5.3.2", @@ -17899,12 +17113,6 @@ "uri-js": "^4.2.2" } }, - "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-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -18033,13 +17241,10 @@ "dev": true }, "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true }, "at-least-node": { "version": "1.0.0", @@ -18357,9 +17562,9 @@ "dev": true }, "commitizen": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.2.5.tgz", - "integrity": "sha512-9sXju8Qrz1B4Tw7kC5KhnvwYQN88qs2zbiB8oyMsnXZyJ24PPGiNM3nHr73d32dnE3i8VJEXddBFIbOgYSEXtQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", + "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", "dev": true, "requires": { "cachedir": "2.3.0", @@ -18370,10 +17575,10 @@ "find-root": "1.1.0", "fs-extra": "9.1.0", "glob": "7.2.3", - "inquirer": "8.2.4", + "inquirer": "8.2.5", "is-utf8": "^0.2.1", "lodash": "4.17.21", - "minimist": "1.2.6", + "minimist": "1.2.7", "strip-bom": "4.0.0", "strip-json-comments": "3.1.1" }, @@ -18812,6 +18017,15 @@ "requires": { "aggregate-error": "^3.0.0" } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } } } }, @@ -18881,9 +18095,9 @@ "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, "email-addresses": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", - "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz", + "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==", "dev": true }, "emoji-regex": { @@ -18909,15 +18123,6 @@ "tapable": "^2.2.0" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, "env-ci": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-8.0.0.tgz", @@ -19903,6 +19108,16 @@ "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + } } }, "flatted": { @@ -19968,12 +19183,6 @@ "functions-have-names": "^1.2.2" } }, - "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 - }, "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -20017,14 +19226,14 @@ } }, "gh-pages": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-4.0.0.tgz", - "integrity": "sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-5.0.0.tgz", + "integrity": "sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ==", "dev": true, "requires": { - "async": "^2.6.1", + "async": "^3.2.4", "commander": "^2.18.0", - "email-addresses": "^3.0.1", + "email-addresses": "^5.0.0", "filenamify": "^4.3.0", "find-cache-dir": "^3.3.1", "fs-extra": "^8.1.0", @@ -20321,12 +19530,6 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, - "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 - }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -20381,9 +19584,9 @@ "dev": true }, "inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", @@ -20452,15 +19655,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -20469,12 +19663,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true } } }, @@ -20813,34 +20001,6 @@ "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", "dev": true }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "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 - }, - "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" - } - } - } - }, "js-sdsl": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", @@ -20851,16 +20011,6 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "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" - } - }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -21097,12 +20247,6 @@ "dev": true, "optional": 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 - }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -21202,12 +20346,12 @@ } }, "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", "dev": true, "requires": { - "sourcemap-codec": "^1.4.8" + "@jridgewell/sourcemap-codec": "^1.4.13" } }, "make-dir": { @@ -21410,9 +20554,9 @@ } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true }, "minimist-options": { @@ -23831,12 +22975,6 @@ "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 - }, "prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -24140,7 +23278,8 @@ "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 + "dev": true, + "optional": true }, "resolve": { "version": "1.22.1", @@ -24201,17 +23340,15 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.1.2.tgz", + "integrity": "sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==", + "dev": true }, "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.17.2.tgz", + "integrity": "sha512-qMNZdlQPCkWodrAZ3qnJtvCAl4vpQ8q77uEujVCCbC/6CLB7Lcmvjq7HyiOSnf4fxTT9XgsE36oLHJBH49xjqA==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -24223,18 +23360,6 @@ "integrity": "sha512-LL9GEt3bkXp6Wa19SNR5MWcvHNMvuTFYg+eYBZN2OIFhSWN+pEJUQXEKu5BsOeABob3x9PDaLKW7w5iOJnsESQ==", "dev": true }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - } - }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -24249,6 +23374,23 @@ "queue-microtask": "^1.2.2" } }, + "rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + } + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -24661,9 +23803,9 @@ "dev": true }, "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -24741,6 +23883,12 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "smob": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/smob/-/smob-0.0.6.tgz", + "integrity": "sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -24757,12 +23905,6 @@ "source-map": "^0.6.0" } }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, "spark-md5": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", @@ -25131,16 +24273,6 @@ "supports-color": "^8.0.0" } }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "peer": true, - "requires": { - "randombytes": "^2.1.0" - } - }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -25294,12 +24426,6 @@ "minimist": "^1.2.0" } }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -25440,12 +24566,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", diff --git a/package.json b/package.json index 7aede27..a975188 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "author": "Kitware Inc", "license": "BSD-3-Clause", "repository": "Kitware/react-vtk-js", + "type": "module", "main": "dist/umd/react-vtk.js", "module": "dist/esm/index.js", "source": "src/index.ts", @@ -40,16 +41,17 @@ "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@kitware/vtk.js": "^26.5.5", - "@rollup/plugin-babel": "^5.3.1", - "@rollup/plugin-commonjs": "22.0.2", - "@rollup/plugin-eslint": "^8.0.2", - "@rollup/plugin-node-resolve": "^14.1.0", + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-commonjs": "24.0.1", + "@rollup/plugin-eslint": "^9.0.3", + "@rollup/plugin-node-resolve": "^15.0.1", + "@rollup/plugin-terser": "^0.4.0", "@rollup/plugin-typescript": "^11.0.0", "@types/deep-equal": "^1.0.1", "@types/react": "^18.0.21", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", - "commitizen": "4.2.5", + "commitizen": "4.3.0", "cross-env": "^7.0.2", "eslint": "^8.34.0", "eslint-config-prettier": "^8.6.0", @@ -61,16 +63,15 @@ "eslint-plugin-promise": "^6.0.1", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", - "gh-pages": "^4.0.0", + "gh-pages": "^5.0.0", "npm-run-all": "^4.1.5", "prettier": "^2.8.4", "prettier-plugin-organize-imports": "^3.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "rimraf": "^3.0.2", - "rollup": "^2.37.1", + "rimraf": "^4.1.2", + "rollup": "^3.17.2", "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-terser": "^7.0.2", "semantic-release": "20.1.0", "typescript": "^4.9.5" }, diff --git a/rollup.config.js b/rollup.config.js index 24ce05b..6af7b97 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,9 +1,9 @@ import { babel } from '@rollup/plugin-babel'; import commonjs from '@rollup/plugin-commonjs'; import { nodeResolve } from '@rollup/plugin-node-resolve'; +import terser from '@rollup/plugin-terser'; import typescript from '@rollup/plugin-typescript'; import analyze from 'rollup-plugin-analyzer'; -import { terser } from 'rollup-plugin-terser'; const plugins = [ typescript(), diff --git a/usage/package-lock.json b/usage/package-lock.json index 3eb99c4..c091368 100644 --- a/usage/package-lock.json +++ b/usage/package-lock.json @@ -7,7 +7,6 @@ "name": "react-vtk-js-usage", "license": "BSD-3-Clause", "dependencies": { - "fflate": "^0.7.4", "react": "^18.2.0", "react-dom": "^18.2.0", "react-vtk-js": "file:.." @@ -31,43 +30,44 @@ "@babel/preset-env": "^7.19.1", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", - "@kitware/vtk.js": "^26.5.3", - "@rollup/plugin-babel": "^5.3.1", - "@rollup/plugin-commonjs": "22.0.2", - "@rollup/plugin-eslint": "^8.0.2", - "@rollup/plugin-node-resolve": "^14.1.0", + "@kitware/vtk.js": "^26.5.5", + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-commonjs": "24.0.1", + "@rollup/plugin-eslint": "^9.0.3", + "@rollup/plugin-node-resolve": "^15.0.1", + "@rollup/plugin-terser": "^0.4.0", + "@rollup/plugin-typescript": "^11.0.0", "@types/deep-equal": "^1.0.1", "@types/react": "^18.0.21", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", - "commitizen": "4.2.5", + "commitizen": "4.3.0", "cross-env": "^7.0.2", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.7.0", - "eslint-config-standard": "^14.1.0", - "eslint-config-standard-react": "^9.2.0", - "eslint-plugin-import": "^2.18.2", + "eslint": "^8.34.0", + "eslint-config-prettier": "^8.6.0", + "eslint-config-standard": "^17.0.0", + "eslint-config-standard-react": "^13.0.0", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-node": "^11.0.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.0.1", - "eslint-plugin-react": "^7.31.10", + "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", - "gh-pages": "^4.0.0", + "gh-pages": "^5.0.0", "npm-run-all": "^4.1.5", - "prettier": "^2.7.1", + "prettier": "^2.8.4", "prettier-plugin-organize-imports": "^3.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "rimraf": "^3.0.2", - "rollup": "^2.37.1", + "rimraf": "^4.1.2", + "rollup": "^3.17.2", "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-terser": "^7.0.2", - "semantic-release": "19.0.5", - "typescript": "^4.8.4" + "semantic-release": "20.1.0", + "typescript": "^4.9.5" }, "peerDependencies": { "@kitware/vtk.js": "^26.5.3", - "react": "^18.0.0" + "react": "^16.0.0" } }, "node_modules/@ampproject/remapping": { @@ -1074,17 +1074,6 @@ "node": ">=0.8.0" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/fflate": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz", - "integrity": "sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==" - }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -2099,17 +2088,6 @@ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "fflate": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz", - "integrity": "sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==" - }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -2261,44 +2239,47 @@ "version": "file:..", "requires": { "@babel/core": "^7.19.1", + "@babel/eslint-parser": "^7.19.1", "@babel/plugin-transform-runtime": "^7.19.1", "@babel/preset-env": "^7.19.1", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@babel/runtime": "^7.19.0", - "@kitware/vtk.js": "^26.5.3", - "@rollup/plugin-babel": "^5.3.1", - "@rollup/plugin-commonjs": "22.0.2", - "@rollup/plugin-eslint": "^8.0.2", - "@rollup/plugin-node-resolve": "^14.1.0", + "@kitware/vtk.js": "^26.5.5", + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-commonjs": "24.0.1", + "@rollup/plugin-eslint": "^9.0.3", + "@rollup/plugin-node-resolve": "^15.0.1", + "@rollup/plugin-terser": "^0.4.0", + "@rollup/plugin-typescript": "^11.0.0", "@types/deep-equal": "^1.0.1", "@types/react": "^18.0.21", "@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/parser": "^5.40.1", - "commitizen": "4.2.5", + "commitizen": "4.3.0", "cross-env": "^7.0.2", "deep-equal": "^2.0.5", - "eslint": "^8.23.1", - "eslint-config-prettier": "^8.5.0", + "eslint": "^8.34.0", + "eslint-config-prettier": "^8.6.0", "eslint-config-standard": "^17.0.0", - "eslint-plugin-import": "^2.26.0", + "eslint-config-standard-react": "^13.0.0", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-node": "^11.0.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-promise": "^6.0.1", - "eslint-plugin-react": "^7.31.10", + "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", - "gh-pages": "^4.0.0", + "gh-pages": "^5.0.0", "npm-run-all": "^4.1.5", - "prettier": "^2.7.1", + "prettier": "^2.8.4", "prettier-plugin-organize-imports": "^3.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "rimraf": "^3.0.2", - "rollup": "^2.37.1", + "rimraf": "^4.1.2", + "rollup": "^3.17.2", "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-terser": "^7.0.2", - "semantic-release": "19.0.5", - "typescript": "^4.8.4" + "semantic-release": "20.1.0", + "typescript": "^4.9.5" } }, "resolve": { From 5647188a6cd0d4e03fe339fc511800894b31e81e Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 14 Mar 2023 15:49:32 -0400 Subject: [PATCH 070/110] feat(types): export types --- package.json | 1 + src/core/Algorithm.tsx | 4 ++-- src/core/DataArray.ts | 4 ++-- src/core/Geometry2DRepresentation.tsx | 4 ++-- src/core/GeometryRepresentation.tsx | 4 ++-- src/core/ImageData.tsx | 4 ++-- src/core/MultiViewRoot.tsx | 8 +++++--- src/core/OpenGLRenderWindow.tsx | 9 +++++++-- src/core/Picking.ts | 4 ++-- src/core/PolyData.tsx | 4 ++-- src/core/RenderWindow.tsx | 7 +++++-- src/core/Renderer.tsx | 4 ++-- src/core/ShareDataSet.tsx | 4 ++-- src/core/SliceRepresentation.tsx | 7 +++++-- src/core/View.tsx | 5 +++-- src/core/internal/ParentedView.tsx | 7 +++++-- src/core/internal/SingleView.tsx | 6 +++--- src/core/internal/view-shared.ts | 8 ++++---- src/index.ts | 27 +++++++++++++++++++++------ 19 files changed, 77 insertions(+), 44 deletions(-) diff --git a/package.json b/package.json index a975188..e9cf554 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "type": "module", "main": "dist/umd/react-vtk.js", "module": "dist/esm/index.js", + "types": "dist/esm/src/index.d.ts", "source": "src/index.ts", "dependencies": { "@babel/eslint-parser": "^7.19.1", diff --git a/src/core/Algorithm.tsx b/src/core/Algorithm.tsx index b6c0187..2edc926 100644 --- a/src/core/Algorithm.tsx +++ b/src/core/Algorithm.tsx @@ -12,7 +12,7 @@ import { useRepresentation, } from './contexts'; -interface Props extends PropsWithChildren { +export interface AlgorithmProps extends PropsWithChildren { /** * Can either be a string containing the name of the vtkClass or a vtk object constructor. * @@ -29,7 +29,7 @@ interface Props extends PropsWithChildren { port?: number; } -export default function Algorithm(props: Props) { +export default function Algorithm(props: AlgorithmProps) { const prev = usePrevious(props); const { vtkClass, state, port = 0 } = props; diff --git a/src/core/DataArray.ts b/src/core/DataArray.ts index 7311ce7..6bb9126 100644 --- a/src/core/DataArray.ts +++ b/src/core/DataArray.ts @@ -10,7 +10,7 @@ import { usePrevious } from '../utils/usePrevious'; import useUnmount from '../utils/useUnmount'; import { useDataset, useFieldData } from './contexts'; -interface Props { +export interface DataArrayProps { /** * The ID used to identify this component. */ @@ -49,7 +49,7 @@ const DefaultProps = { numberOfComponents: 1, }; -export default function DataArray(props: Props) { +export default function DataArray(props: DataArrayProps) { const prev = usePrevious({ ...DefaultProps, ...props }); const [daRef, getDataArray] = useGetterRef(() => { diff --git a/src/core/Geometry2DRepresentation.tsx b/src/core/Geometry2DRepresentation.tsx index 95b2114..be29481 100644 --- a/src/core/Geometry2DRepresentation.tsx +++ b/src/core/Geometry2DRepresentation.tsx @@ -30,7 +30,7 @@ import useCoordinate from './modules/useCoordinate'; import useMapper from './modules/useMapper'; import useProp from './modules/useProp'; -interface Props extends PropsWithChildren { +export interface Geometry2DRepresentationProps extends PropsWithChildren { /** * The ID used to identify this component. */ @@ -76,7 +76,7 @@ const DefaultProps = { }; export default forwardRef(function Geometry2DRepresentation( - props: Props, + props: Geometry2DRepresentationProps, fwdRef ) { const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); diff --git a/src/core/GeometryRepresentation.tsx b/src/core/GeometryRepresentation.tsx index 2a254de..893c1ea 100644 --- a/src/core/GeometryRepresentation.tsx +++ b/src/core/GeometryRepresentation.tsx @@ -27,7 +27,7 @@ import useColorTransferFunction from './modules/useColorTransferFunction'; import useMapper from './modules/useMapper'; import useProp from './modules/useProp'; -interface Props extends PropsWithChildren { +export interface GeometryRepresentationProps extends PropsWithChildren { /** * The ID used to identify this component. */ @@ -96,7 +96,7 @@ const DefaultProps = { }; export default forwardRef(function GeometryRepresentation( - props: Props, + props: GeometryRepresentationProps, fwdRef ) { const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); diff --git a/src/core/ImageData.tsx b/src/core/ImageData.tsx index cd05b2a..fa4e54c 100644 --- a/src/core/ImageData.tsx +++ b/src/core/ImageData.tsx @@ -13,7 +13,7 @@ import useGetterRef from '../utils/useGetterRef'; import useUnmount from '../utils/useUnmount'; import { DatasetContext, useDownstream, useRepresentation } from './contexts'; -interface Props extends PropsWithChildren { +export interface ImageDataProps extends PropsWithChildren { /** * downstream connection port */ @@ -48,7 +48,7 @@ const DefaultProps = { direction: [1, 0, 0, 0, 1, 0, 0, 0, 1] as Matrix3x3, }; -export default forwardRef(function PolyData(props: Props, fwdRef) { +export default forwardRef(function PolyData(props: ImageDataProps, fwdRef) { const { port = DefaultProps.port, dimensions = DefaultProps.dimensions, diff --git a/src/core/MultiViewRoot.tsx b/src/core/MultiViewRoot.tsx index 185662a..f8a5be2 100644 --- a/src/core/MultiViewRoot.tsx +++ b/src/core/MultiViewRoot.tsx @@ -13,17 +13,19 @@ import { } from '../utils/ResizeWatcher'; import { MultiViewRootContext } from './contexts'; import OpenGLRenderWindow, { - Props as OpenGLRenderWindowProps, + OpenGLRenderWindowProps, } from './OpenGLRenderWindow'; import RenderWindow from './RenderWindow'; -interface Props extends PropsWithChildren, OpenGLRenderWindowProps {} +export interface MultiViewRootProps + extends PropsWithChildren, + OpenGLRenderWindowProps {} const RW_STYLE: CSSProperties = { pointerEvents: 'none', }; -export default function MultiViewRoot(props: Props) { +export default function MultiViewRoot(props: MultiViewRootProps) { const openGLRenderWindowRef = useRef(null); const renderWindowRef = useRef(null); const resizeWatcherRef = useRef(new ResizeWatcher()); diff --git a/src/core/OpenGLRenderWindow.tsx b/src/core/OpenGLRenderWindow.tsx index 3be72e4..6c09ede 100644 --- a/src/core/OpenGLRenderWindow.tsx +++ b/src/core/OpenGLRenderWindow.tsx @@ -22,11 +22,16 @@ const RENDERWINDOW_STYLE: CSSProperties = { overflow: 'hidden', }; -export interface Props extends PropsWithChildren, HTMLProps { +export interface OpenGLRenderWindowProps + extends PropsWithChildren, + HTMLProps { renderWindowStyle?: CSSProperties; } -export default forwardRef(function OpenGLRenderWindow(props: Props, fwdRef) { +export default forwardRef(function OpenGLRenderWindow( + props: OpenGLRenderWindowProps, + fwdRef +) { const rwContainerRef = useRef(null); const [viewRef, getRWView] = useGetterRef(() => { diff --git a/src/core/Picking.ts b/src/core/Picking.ts index 1e395e3..fa3e87c 100644 --- a/src/core/Picking.ts +++ b/src/core/Picking.ts @@ -52,7 +52,7 @@ function useOpenGLHardwareSelector() { return getSelector; } -interface Props { +export interface PickingProps { /** * Whether to enable picking and callbacks. * @@ -112,7 +112,7 @@ const DefaultProps = { onHoverDebounceWait: 4, }; -export default forwardRef(function ViewPicking(props: Props, fwdRef) { +export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { const openGLRenderWindowAPI = useContext(OpenGLRenderWindowContext); const rendererAPI = useContext(RendererContext); const viewAPI = useContext(ViewContext); diff --git a/src/core/PolyData.tsx b/src/core/PolyData.tsx index 31402f4..c612f4f 100644 --- a/src/core/PolyData.tsx +++ b/src/core/PolyData.tsx @@ -19,7 +19,7 @@ import { usePrevious } from '../utils/usePrevious'; import useUnmount from '../utils/useUnmount'; import { DatasetContext, useDownstream, useRepresentation } from './contexts'; -interface Props extends PropsWithChildren { +export interface PolyDataProps extends PropsWithChildren { /** * downstream connection port */ @@ -86,7 +86,7 @@ const DefaultProps = { connectivity: 'manual', }; -export default forwardRef(function PolyData(props: Props, fwdRef) { +export default forwardRef(function PolyData(props: PolyDataProps, fwdRef) { const { port = DefaultProps.port, points = DefaultProps.points, diff --git a/src/core/RenderWindow.tsx b/src/core/RenderWindow.tsx index 3136653..abda028 100644 --- a/src/core/RenderWindow.tsx +++ b/src/core/RenderWindow.tsx @@ -18,9 +18,12 @@ import useUnmount from '../utils/useUnmount'; import { OpenGLRenderWindowContext, RenderWindowContext } from './contexts'; import useInteractor from './modules/useInteractor'; -export type Props = PropsWithChildren; +export type RenderWindowProps = PropsWithChildren; -export default forwardRef(function RenderWindow(props: Props, fwdRef) { +export default forwardRef(function RenderWindow( + props: RenderWindowProps, + fwdRef +) { const openGLRenderWindow = useContext(OpenGLRenderWindowContext); if (!openGLRenderWindow) throw new Error('No OpenGL Render Window!'); diff --git a/src/core/Renderer.tsx b/src/core/Renderer.tsx index 915c33a..f2f3f72 100644 --- a/src/core/Renderer.tsx +++ b/src/core/Renderer.tsx @@ -17,7 +17,7 @@ import useUnmount from '../utils/useUnmount'; import { RendererContext, useRenderWindowContext } from './contexts'; import useCamera from './modules/useCamera'; -export interface Props extends PropsWithChildren { +export interface RendererProps extends PropsWithChildren { /** * The color of the view background using 3 floating numbers * between 0-1 of Red, Green, Blue component. @@ -54,7 +54,7 @@ export const DefaultProps = { autoResetCamera: true, }; -export default forwardRef(function Renderer(props: Props, fwdRef) { +export default forwardRef(function Renderer(props: RendererProps, fwdRef) { const renderWindow = useRenderWindowContext(); const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); diff --git a/src/core/ShareDataSet.tsx b/src/core/ShareDataSet.tsx index 7cb2a46..70bf447 100644 --- a/src/core/ShareDataSet.tsx +++ b/src/core/ShareDataSet.tsx @@ -132,7 +132,7 @@ export function ShareDataSetRoot(props: PropsWithChildren) { ); } -interface RegisterDataSetProps extends PropsWithChildren { +export interface RegisterDataSetProps extends PropsWithChildren { id: string; } @@ -190,7 +190,7 @@ export function RegisterDataSet(props: RegisterDataSetProps) { ); } -interface UseDataSetProps extends PropsWithChildren { +export interface UseDataSetProps extends PropsWithChildren { id: string; port?: number; } diff --git a/src/core/SliceRepresentation.tsx b/src/core/SliceRepresentation.tsx index adc9e4f..a37e622 100644 --- a/src/core/SliceRepresentation.tsx +++ b/src/core/SliceRepresentation.tsx @@ -27,7 +27,7 @@ import useColorTransferFunction from './modules/useColorTransferFunction'; import useMapper from './modules/useMapper'; import useProp from './modules/useProp'; -interface Props extends PropsWithChildren { +export interface SliceRepresentationProps extends PropsWithChildren { /** * The ID used to identify this component. */ @@ -94,7 +94,10 @@ const DefaultProps = { colorDataRange: 'auto' as const, }; -export default forwardRef(function SliceRepresentation(props: Props, fwdRef) { +export default forwardRef(function SliceRepresentation( + props: SliceRepresentationProps, + fwdRef +) { const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); const [dataAvailable, setDataAvailable] = useState(false); diff --git a/src/core/View.tsx b/src/core/View.tsx index 4eabb37..5d233d1 100644 --- a/src/core/View.tsx +++ b/src/core/View.tsx @@ -10,9 +10,10 @@ import { IView } from '../types'; import { MultiViewRootContext } from './contexts'; import ParentedView from './internal/ParentedView'; import SingleView from './internal/SingleView'; -import { Props } from './internal/view-shared'; +import { ViewProps } from './internal/view-shared'; +export type { ViewProps } from './internal/view-shared'; -export default forwardRef(function View(props: Props, fwdRef) { +export default forwardRef(function View(props: ViewProps, fwdRef) { const singleViewRef = useRef(null); const parentedViewRef = useRef(null); diff --git a/src/core/internal/ParentedView.tsx b/src/core/internal/ParentedView.tsx index b6a4dbd..538133e 100644 --- a/src/core/internal/ParentedView.tsx +++ b/src/core/internal/ParentedView.tsx @@ -26,12 +26,15 @@ import { useInteractorStyleManipulatorSettings, } from '../modules/useInteractorStyle'; import Renderer from '../Renderer'; -import { DefaultProps, Props } from './view-shared'; +import { DefaultProps, ViewProps } from './view-shared'; /** * A View that is within a MultiViewRoot. */ -const ParentedView = forwardRef(function ParentedView(props: Props, fwdRef) { +const ParentedView = forwardRef(function ParentedView( + props: ViewProps, + fwdRef +) { const containerRef = useRef(null); const rendererRef = useRef(null); diff --git a/src/core/internal/SingleView.tsx b/src/core/internal/SingleView.tsx index 576724c..320c934 100644 --- a/src/core/internal/SingleView.tsx +++ b/src/core/internal/SingleView.tsx @@ -23,12 +23,12 @@ import { import OpenGLRenderWindow from '../OpenGLRenderWindow'; import Renderer from '../Renderer'; import RenderWindow from '../RenderWindow'; -import { DefaultProps, Props } from './view-shared'; +import { DefaultProps, ViewProps } from './view-shared'; /** * A standalone View (not within a MultiViewRoot). */ -const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { +const SingleView = forwardRef(function SingleView(props: ViewProps, fwdRef) { // view API just exposes the render window + renderer const openGLRenderWindowRef = useRef(null); const renderWindowRef = useRef(null); @@ -44,7 +44,7 @@ const SingleView = forwardRef(function SingleView(props: Props, fwdRef) { const openGLRenderWindowProps = omit( props, - ...([...Object.keys(rendererProps)] as (keyof Props)[]) + ...([...Object.keys(rendererProps)] as (keyof ViewProps)[]) ); // --- interactor style --- // diff --git a/src/core/internal/view-shared.ts b/src/core/internal/view-shared.ts index e5d4399..aa5f8ae 100644 --- a/src/core/internal/view-shared.ts +++ b/src/core/internal/view-shared.ts @@ -1,10 +1,10 @@ import { PropsWithChildren } from 'react'; import { ManipulatorSettings } from '../modules/useInteractorStyle'; -import { Props as OpenGLRenderWindowProps } from '../OpenGLRenderWindow'; -import { Props as RendererProps } from '../Renderer'; -import { Props as RenderWindowProps } from '../RenderWindow'; +import { OpenGLRenderWindowProps } from '../OpenGLRenderWindow'; +import { RendererProps } from '../Renderer'; +import { RenderWindowProps } from '../RenderWindow'; -export interface Props +export interface ViewProps extends PropsWithChildren, OpenGLRenderWindowProps, RenderWindowProps, diff --git a/src/index.ts b/src/index.ts index af13bd8..38329aa 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,26 +4,41 @@ import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Glyph'; import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Volume'; export { default as Algorithm } from './core/Algorithm'; +export type { AlgorithmProps } from './core/Algorithm'; +export { default as CellData } from './core/CellData'; export * as Contexts from './core/contexts'; export { default as DataArray } from './core/DataArray'; +export type { DataArrayProps } from './core/DataArray'; +export { default as FieldData } from './core/FieldData'; export { default as Geometry2DRepresentation } from './core/Geometry2DRepresentation'; +export type { Geometry2DRepresentationProps } from './core/Geometry2DRepresentation'; export { default as GeometryRepresentation } from './core/GeometryRepresentation'; +export type { GeometryRepresentationProps } from './core/GeometryRepresentation'; export { default as ImageData } from './core/ImageData'; +export type { ImageDataProps } from './core/ImageData'; export { default as MultiViewRoot } from './core/MultiViewRoot'; -export * from './core/Picking'; +export type { MultiViewRootProps } from './core/MultiViewRoot'; export { default as Picking } from './core/Picking'; +export type { + FrustumPickResult, + PickingProps, + PickResult, +} from './core/Picking'; export { default as PointData } from './core/PointData'; export { default as PolyData } from './core/PolyData'; +export type { PolyDataProps } from './core/PolyData'; export { default as Reader } from './core/Reader'; +export type { ReaderProps } from './core/Reader'; export { RegisterDataSet, ShareDataSetRoot, UseDataSet, } from './core/ShareDataSet'; +export type { + RegisterDataSetProps, + UseDataSetProps, +} from './core/ShareDataSet'; export { default as SliceRepresentation } from './core/SliceRepresentation'; +export type { SliceRepresentationProps } from './core/SliceRepresentation'; export { default as View } from './core/View'; - -// TODO should we expose these? -// export { default as OpenGLRenderWindow } from './core/OpenGLRenderWindow'; -// export { default as Renderer } from './core/Renderer'; -// export { default as RenderWindow } from './core/RenderWindow'; +export type { ViewProps } from './core/View'; From 86ced66ed2dba84cc973812399f833fd856b428c Mon Sep 17 00:00:00 2001 From: Forrest Date: Fri, 31 Mar 2023 10:10:38 -0400 Subject: [PATCH 071/110] chore(vtk.js): bump to 26.9.9 --- package-lock.json | 255 +++++++++++++++++++++++++++++++++++++++------- package.json | 4 +- 2 files changed, 223 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index b7cb544..1991252 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "@babel/preset-env": "^7.19.1", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", - "@kitware/vtk.js": "^26.5.5", + "@kitware/vtk.js": "^26.9.9", "@rollup/plugin-babel": "^6.0.3", "@rollup/plugin-commonjs": "24.0.1", "@rollup/plugin-eslint": "^9.0.3", @@ -55,7 +55,7 @@ "typescript": "^4.9.5" }, "peerDependencies": { - "@kitware/vtk.js": "^26.5.3", + "@kitware/vtk.js": "^26.5.5", "react": "^16.0.0" } }, @@ -2186,9 +2186,9 @@ } }, "node_modules/@kitware/vtk.js": { - "version": "26.5.5", - "resolved": "https://registry.npmjs.org/@kitware/vtk.js/-/vtk.js-26.5.5.tgz", - "integrity": "sha512-eS6mz8uuCqFE8pfwzoVaNS21u68X9FIdrBDeIt09VE+EWQ8nw+yBCZMyfZxqazq3wOTrUd6de4SEeaDvAVEz/w==", + "version": "26.9.9", + "resolved": "https://registry.npmjs.org/@kitware/vtk.js/-/vtk.js-26.9.9.tgz", + "integrity": "sha512-nGfkRxhivN5B4crMMnJkV+VTeXteTybHDbq0UvB2PnPKQYJgNm688DukIrfJqphqhjn6UwVzlXO0DaeLVEpiAg==", "dev": true, "dependencies": { "@babel/runtime": "7.17.9", @@ -2212,6 +2212,8 @@ "xml2json": "Utilities/XMLConverter/xml2json-cli.js" }, "peerDependencies": { + "@babel/preset-env": "^7.17.10", + "autoprefixer": "^10.4.7", "wslink": "^1.1.0" } }, @@ -3830,6 +3832,40 @@ "node": ">= 4.0.0" } }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "peer": true, + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -3973,9 +4009,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "funding": [ { "type": "opencollective", @@ -3987,10 +4023,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -4123,9 +4159,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001439", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", - "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", + "version": "1.0.30001473", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001473.tgz", + "integrity": "sha512-ewDad7+D2vlyy+E4UJuVfiBsU69IL+8oVmTuZnH5Q6CIUbxNfI50uVpRHbUPDD6SUaN2o0Lh4DhTrvLG/Tn1yg==", "funding": [ { "type": "opencollective", @@ -4134,6 +4170,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -6447,6 +6487,20 @@ "is-callable": "^1.1.3" } }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, "node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -8449,6 +8503,25 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -8508,9 +8581,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -8533,6 +8606,16 @@ "semver": "bin/semver" } }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -11805,6 +11888,38 @@ "node": ">=8" } }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "peer": true, + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "peer": true + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -13150,6 +13265,16 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -16018,9 +16143,9 @@ } }, "@kitware/vtk.js": { - "version": "26.5.5", - "resolved": "https://registry.npmjs.org/@kitware/vtk.js/-/vtk.js-26.5.5.tgz", - "integrity": "sha512-eS6mz8uuCqFE8pfwzoVaNS21u68X9FIdrBDeIt09VE+EWQ8nw+yBCZMyfZxqazq3wOTrUd6de4SEeaDvAVEz/w==", + "version": "26.9.9", + "resolved": "https://registry.npmjs.org/@kitware/vtk.js/-/vtk.js-26.9.9.tgz", + "integrity": "sha512-nGfkRxhivN5B4crMMnJkV+VTeXteTybHDbq0UvB2PnPKQYJgNm688DukIrfJqphqhjn6UwVzlXO0DaeLVEpiAg==", "dev": true, "requires": { "@babel/runtime": "7.17.9", @@ -17252,6 +17377,21 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, + "autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "peer": true, + "requires": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -17359,14 +17499,14 @@ } }, "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" } }, "buffer": { @@ -17451,9 +17591,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001439", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", - "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==" + "version": "1.0.30001473", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001473.tgz", + "integrity": "sha512-ewDad7+D2vlyy+E4UJuVfiBsU69IL+8oVmTuZnH5Q6CIUbxNfI50uVpRHbUPDD6SUaN2o0Lh4DhTrvLG/Tn1yg==" }, "cardinal": { "version": "2.1.1", @@ -19133,6 +19273,13 @@ "is-callable": "^1.1.3" } }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "peer": true + }, "from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -20587,6 +20734,13 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "peer": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -20635,9 +20789,9 @@ } }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "normalize-package-data": { "version": "2.5.0", @@ -20659,6 +20813,13 @@ } } }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "peer": true + }, "normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -22942,6 +23103,25 @@ "find-up": "^4.0.0" } }, + "postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "peer": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "peer": true + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -23895,6 +24075,13 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "peer": true + }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", diff --git a/package.json b/package.json index e9cf554..504f34d 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "dev": "rollup -c --watch" }, "peerDependencies": { - "@kitware/vtk.js": "^26.5.3", + "@kitware/vtk.js": "^26.5.5", "react": "^16.0.0" }, "devDependencies": { @@ -41,7 +41,7 @@ "@babel/preset-env": "^7.19.1", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", - "@kitware/vtk.js": "^26.5.5", + "@kitware/vtk.js": "^26.9.9", "@rollup/plugin-babel": "^6.0.3", "@rollup/plugin-commonjs": "24.0.1", "@rollup/plugin-eslint": "^9.0.3", From f4a063ea00a0102fb7550f1f95b9e8abb3ef8e3f Mon Sep 17 00:00:00 2001 From: Forrest Date: Fri, 31 Mar 2023 10:11:19 -0400 Subject: [PATCH 072/110] fix(View): api is not optionally null --- src/core/View.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/View.tsx b/src/core/View.tsx index 5d233d1..047e5d7 100644 --- a/src/core/View.tsx +++ b/src/core/View.tsx @@ -19,7 +19,7 @@ export default forwardRef(function View(props: ViewProps, fwdRef) { const multiViewRoot = useContext(MultiViewRootContext); - const api = useMemo(() => { + const api = useMemo(() => { const getView = () => multiViewRoot ? parentedViewRef.current : singleViewRef.current; return { From 6a1db28a07d11f29f5025393b3dd60896ddef02d Mon Sep 17 00:00:00 2001 From: Forrest Date: Fri, 31 Mar 2023 10:12:02 -0400 Subject: [PATCH 073/110] feat(Dataset): initial dataset impl --- src/core/Dataset.tsx | 26 ++++++++++++++++++++++++++ src/index.ts | 2 ++ 2 files changed, 28 insertions(+) create mode 100644 src/core/Dataset.tsx diff --git a/src/core/Dataset.tsx b/src/core/Dataset.tsx new file mode 100644 index 0000000..6ef159d --- /dev/null +++ b/src/core/Dataset.tsx @@ -0,0 +1,26 @@ +import { vtkObject } from '@kitware/vtk.js/interfaces'; +import { useEffect } from 'react'; +import { useDownstream, useRepresentation } from './contexts'; + +export interface DatasetProps { + dataset: vtkObject | null; +} + +export default function Dataset(props: DatasetProps) { + const representation = useRepresentation(); + const downstream = useDownstream(); + + const { dataset } = props; + + useEffect(() => { + if (!dataset) { + return; + } + + downstream.setInputData(dataset); + representation.dataAvailable(); + representation.dataChanged(); + }, [dataset, downstream, representation]); + + return null; +} diff --git a/src/index.ts b/src/index.ts index 38329aa..24ac272 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,6 +9,8 @@ export { default as CellData } from './core/CellData'; export * as Contexts from './core/contexts'; export { default as DataArray } from './core/DataArray'; export type { DataArrayProps } from './core/DataArray'; +export { default as Dataset } from './core/Dataset'; +export type { DatasetProps } from './core/Dataset'; export { default as FieldData } from './core/FieldData'; export { default as Geometry2DRepresentation } from './core/Geometry2DRepresentation'; export type { Geometry2DRepresentationProps } from './core/Geometry2DRepresentation'; From 9aff778039353ef257d4b09e50791cb79e280bc2 Mon Sep 17 00:00:00 2001 From: Forrest Date: Fri, 31 Mar 2023 10:12:12 -0400 Subject: [PATCH 074/110] feat(SliceRepresentation): mapper instance prop --- src/core/SliceRepresentation.tsx | 75 ++++++++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 8 deletions(-) diff --git a/src/core/SliceRepresentation.tsx b/src/core/SliceRepresentation.tsx index a37e622..e81a103 100644 --- a/src/core/SliceRepresentation.tsx +++ b/src/core/SliceRepresentation.tsx @@ -1,3 +1,7 @@ +import AbstractImageMapper, { + vtkAbstractImageMapper, +} from '@kitware/vtk.js/Rendering/Core/AbstractImageMapper'; +import vtkImageArrayMapper from '@kitware/vtk.js/Rendering/Core/ImageArrayMapper'; import vtkImageMapper, { IImageMapperInitialValues, } from '@kitware/vtk.js/Rendering/Core/ImageMapper'; @@ -9,6 +13,7 @@ import { Vector2 } from '@kitware/vtk.js/types'; import { forwardRef, PropsWithChildren, + useCallback, useEffect, useImperativeHandle, useMemo, @@ -38,6 +43,11 @@ export interface SliceRepresentationProps extends PropsWithChildren { */ mapper?: IImageMapperInitialValues; + /** + * An opational mapper instanc + */ + mapperInstance?: AbstractImageMapper; + /** * Properties to set to the slice/actor */ @@ -94,6 +104,18 @@ const DefaultProps = { colorDataRange: 'auto' as const, }; +function isVtkImageMapper( + mapper: vtkAbstractImageMapper +): mapper is vtkImageMapper { + return mapper.isA('vtkImageMapper'); +} + +function isVtkImageArrayMapper( + mapper: vtkAbstractImageMapper +): mapper is vtkImageArrayMapper { + return mapper.isA('vtkImageArrayMapper'); +} + export default forwardRef(function SliceRepresentation( props: SliceRepresentationProps, fwdRef @@ -117,12 +139,20 @@ export default forwardRef(function SliceRepresentation( // --- mapper --- // - const getMapper = useMapper( + const getInternalMapper = useMapper( () => vtkImageMapper.newInstance(), props.mapper, trackModified ); + const { mapperInstance } = props; + const getMapper = useCallback<() => vtkAbstractImageMapper>(() => { + if (mapperInstance) { + return mapperInstance; + } + return getInternalMapper(); + }, [mapperInstance, getInternalMapper]); + // --- actor --- // const actorProps = { @@ -137,7 +167,8 @@ export default forwardRef(function SliceRepresentation( }); useEffect(() => { - getActor().setMapper(getMapper()); + // workaround for vtkImageSlice.setMapper only taking vtkImageMapper + getActor().setMapper(getMapper() as vtkImageMapper); }, [getActor, getMapper]); useEffect(() => { @@ -160,30 +191,58 @@ export default forwardRef(function SliceRepresentation( const { iSlice, jSlice, kSlice, xSlice, ySlice, zSlice } = props; + // --- vtkImageMapper setSlice --- // + useEffect(() => { - if (iSlice != null) trackModified(getMapper().setISlice(iSlice)); + const mapper = getMapper(); + if (isVtkImageMapper(mapper) && iSlice != null) + trackModified(mapper.setISlice(iSlice)); }, [iSlice, getMapper, trackModified]); useEffect(() => { - if (jSlice != null) trackModified(getMapper().setJSlice(jSlice)); + const mapper = getMapper(); + if (isVtkImageMapper(mapper) && jSlice != null) + trackModified(mapper.setJSlice(jSlice)); }, [jSlice, getMapper, trackModified]); useEffect(() => { - if (kSlice != null) trackModified(getMapper().setKSlice(kSlice)); + const mapper = getMapper(); + if (isVtkImageMapper(mapper) && kSlice != null) + trackModified(mapper.setKSlice(kSlice)); }, [kSlice, getMapper, trackModified]); useEffect(() => { - if (xSlice != null) trackModified(getMapper().setXSlice(xSlice)); + const mapper = getMapper(); + if (isVtkImageMapper(mapper) && xSlice != null) + trackModified(mapper.setXSlice(xSlice)); }, [xSlice, getMapper, trackModified]); useEffect(() => { - if (ySlice != null) trackModified(getMapper().setYSlice(ySlice)); + const mapper = getMapper(); + if (isVtkImageMapper(mapper) && ySlice != null) + trackModified(mapper.setYSlice(ySlice)); }, [ySlice, getMapper, trackModified]); useEffect(() => { - if (zSlice != null) trackModified(getMapper().setZSlice(zSlice)); + const mapper = getMapper(); + if (isVtkImageMapper(mapper) && zSlice != null) + trackModified(mapper.setZSlice(zSlice)); }, [zSlice, getMapper, trackModified]); + // --- vtkImageArrayMapper setSlice --- // + + useEffect(() => { + const mapper = getMapper(); + if ( + isVtkImageArrayMapper(mapper) && + kSlice != null && + kSlice !== mapper.getSlice() + ) { + trackModified(true); + mapper.setSlice(kSlice); + } + }, [kSlice, getMapper, trackModified]); + // --- // const renderer = useRendererContext(); From a1fe1eabfe7a18c98eac1add7271fd9aba3852a7 Mon Sep 17 00:00:00 2001 From: Forrest Date: Fri, 31 Mar 2023 14:22:58 -0400 Subject: [PATCH 075/110] docs(usage): add ImageSeriesRendering example --- usage/src/App.jsx | 4 + usage/src/Volume/ImageSeriesRendering.jsx | 92 +++++++++++++---------- 2 files changed, 58 insertions(+), 38 deletions(-) diff --git a/usage/src/App.jsx b/usage/src/App.jsx index a95ae75..fdf24ba 100644 --- a/usage/src/App.jsx +++ b/usage/src/App.jsx @@ -29,6 +29,10 @@ const demos = new Map([ // ], // ['Volume/VolumeRendering', lazy(() => import('./Volume/VolumeRendering'))], // ['Volume/DynamicUpdate', lazy(() => import('./Volume/DynamicUpdate'))], + [ + 'Volume/ImageSeriesRendering', + lazy(() => import('./Volume/ImageSeriesRendering')), + ], ['Tests/PropertyUpdate', lazy(() => import('./Tests/PropertyUpdate'))], ['Tests/CameraTest', lazy(() => import('./Tests/CameraTest'))], ['Tests/ShareGeometry', lazy(() => import('./Tests/ShareGeometry'))], diff --git a/usage/src/Volume/ImageSeriesRendering.jsx b/usage/src/Volume/ImageSeriesRendering.jsx index 3bc0dfe..e72d44b 100644 --- a/usage/src/Volume/ImageSeriesRendering.jsx +++ b/usage/src/Volume/ImageSeriesRendering.jsx @@ -1,18 +1,20 @@ -import React, { useState, useContext, useEffect } from 'react'; -import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps.js'; import vtkCollection from '@kitware/vtk.js/Common/DataModel/Collection'; -import vtkImageArrayMapper from '@kitware/vtk.js/Rendering/Core/ImageArrayMapper.js'; -import vtkResourceLoader from '@kitware/vtk.js/IO/Core/ResourceLoader'; +import vtkITKHelper from '@kitware/vtk.js/Common/DataModel/ITKHelper'; import vtkLiteHttpDataAccessHelper from '@kitware/vtk.js/IO/Core/DataAccessHelper/LiteHttpDataAccessHelper'; +import vtkResourceLoader from '@kitware/vtk.js/IO/Core/ResourceLoader'; +import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps.js'; +import vtkImageArrayMapper from '@kitware/vtk.js/Rendering/Core/ImageArrayMapper.js'; import { unzipSync } from 'fflate'; -import vtkITKHelper from '@kitware/vtk.js/Common/DataModel/ITKHelper'; +import { useContext, useEffect, useMemo, useState } from 'react'; import { - View, + Contexts, Dataset, - ShareDataSet, + RegisterDataSet, + ShareDataSetRoot, SliceRepresentation, - Contexts, + UseDataSet, + View, } from 'react-vtk-js'; function Slider(props) { @@ -110,13 +112,11 @@ function CheckBox(props) { ); } - const loadData = async () => { console.log('Loading itk module...'); loadData.setStatusText('Loading itk module...'); - if(!window.itk) { - await vtkResourceLoader - .loadScript( + if (!window.itk) { + await vtkResourceLoader.loadScript( 'https://cdn.jsdelivr.net/npm/itk-wasm@1.0.0-b.8/dist/umd/itk-wasm.js' ); } @@ -144,7 +144,7 @@ const loadData = async () => { // Read individual dcm files into an array of vtkImageData. const imageArray = []; - if(window.itk) { + if (window.itk) { await Promise.all( dcmFiles.map(async (filename, index) => { const { image: itkImage, webWorker } = @@ -167,12 +167,13 @@ const loadData = async () => { collection.addItem(img); } const totalSlices = imageArray.reduce( - (accumulator, currImage) => currImage.getDimensions()[2] + accumulator, 0 + (accumulator, currImage) => currImage.getDimensions()[2] + accumulator, + 0 ); loadData.setMaxSlicingValue(totalSlices - 1); loadData.setStatusText(''); return collection; -} +}; function Example(props) { const [statusText, setStatusText] = useState('Loading data, please wait ...'); @@ -187,34 +188,50 @@ function Example(props) { loadData.setMaxSlicingValue = setMaxKSlice; loadData.setStatusText = setStatusText; - useEffect( - () => { - const img = mapper.getImage(kSlice); - const range = img?.getPointData()?.getScalars()?.getRange(); - if(range && range.length == 2) { - const maxWidth = range[1] - range[0]; - setColorWindow(maxWidth); - const center = Math.round((range[0] + range[1]) / 2); - setColorLevel(center); - } - }, - [kSlice] + const [imageCollection, setImageCollection] = useState(null); + + useEffect(() => { + loadData().then((ds) => { + window.ds = ds; + setImageCollection(ds); + }); + }, []); + + useEffect(() => { + const img = mapper.getImage(kSlice); + const range = img?.getPointData()?.getScalars()?.getRange(); + if (range && range.length == 2) { + const maxWidth = range[1] - range[0]; + setColorWindow(maxWidth); + const center = Math.round((range[0] + range[1]) / 2); + setColorLevel(center); + } + }, [kSlice, mapper]); + + const cameraParams = useMemo( + () => ({ + position: [400, 400, -1000], + viewUp: [0, -1, 0], + viewAngle: 75, + directionOfProjection: [0, 0, 1], + clippingRange: [-100, 100], + parallelProjection: false, + }), + [] ); return (
+ + + + - - - +
); } From 674b23203ebe8eda5528144817d764161124490a Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 6 Apr 2023 10:48:44 -0400 Subject: [PATCH 076/110] fix(useInteractorStyle): no presets with external styles --- src/core/internal/ParentedView.tsx | 8 ++++++-- src/core/internal/SingleView.tsx | 8 ++++++-- src/core/modules/useInteractorStyle.ts | 7 ++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/core/internal/ParentedView.tsx b/src/core/internal/ParentedView.tsx index 538133e..c234cb7 100644 --- a/src/core/internal/ParentedView.tsx +++ b/src/core/internal/ParentedView.tsx @@ -63,14 +63,18 @@ const ParentedView = forwardRef(function ParentedView( [renderWindowAPI] ); - const [getInteractorStyle, setInteractorStyle] = + const [getInteractorStyle, setInteractorStyle, isExternalStyle] = useInteractorStyle(getInteractor); const { interactorSettings = DefaultProps.interactorSettings, autoCenterOfRotation = DefaultProps.autoCenterOfRotation, } = props; - useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); + useInteractorStyleManipulatorSettings( + getInteractorStyle, + isExternalStyle, + interactorSettings + ); useApplyCenterOfRotation( rendererRef, diff --git a/src/core/internal/SingleView.tsx b/src/core/internal/SingleView.tsx index 320c934..4a35db0 100644 --- a/src/core/internal/SingleView.tsx +++ b/src/core/internal/SingleView.tsx @@ -54,7 +54,7 @@ const SingleView = forwardRef(function SingleView(props: ViewProps, fwdRef) { [] ); - const [getInteractorStyle, setInteractorStyle] = + const [getInteractorStyle, setInteractorStyle, isExternalStyle] = useInteractorStyle(getInteractor); useMount(() => { @@ -65,7 +65,11 @@ const SingleView = forwardRef(function SingleView(props: ViewProps, fwdRef) { interactorSettings = DefaultProps.interactorSettings, autoCenterOfRotation = DefaultProps.autoCenterOfRotation, } = props; - useInteractorStyleManipulatorSettings(getInteractorStyle, interactorSettings); + useInteractorStyleManipulatorSettings( + getInteractorStyle, + isExternalStyle, + interactorSettings + ); useApplyCenterOfRotation( rendererRef, diff --git a/src/core/modules/useInteractorStyle.ts b/src/core/modules/useInteractorStyle.ts index 0827eb8..8859ebb 100644 --- a/src/core/modules/useInteractorStyle.ts +++ b/src/core/modules/useInteractorStyle.ts @@ -92,11 +92,15 @@ const settingToManipulator = (setting: ManipulatorSettings) => { export function useInteractorStyleManipulatorSettings( getStyle: () => vtkInteractorStyle, + isExternalStyle: boolean, settings: ManipulatorSettings[] ) { useComparableEffect( () => { + // Assumes external styles are externally controlled + if (isExternalStyle) return; if (!getStyle().isA('vtkInteractorStyleManipulator')) return; + const style = getStyle() as vtkInteractorStyleManipulator; style.removeAllManipulators(); // always add gestures @@ -139,6 +143,7 @@ export function useInteractorStyle( ); const externalStyleRef = useRef(null); + const isExternalStyle = !!externalStyleRef.current; const getStyle = useCallback(() => { return externalStyleRef.current ?? getInternalStyle(); @@ -177,5 +182,5 @@ export function useInteractorStyle( }; }, [getInteractor, getStyle, internalStyleRef]); - return [getStyle, setStyle] as const; + return [getStyle, setStyle, isExternalStyle] as const; } From 8d700e36110d42bb25a31815f181ec1dd5799e3d Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 6 Apr 2023 11:37:13 -0400 Subject: [PATCH 077/110] fix(useInteractorStyle): track effect deps --- src/core/modules/useInteractorStyle.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/modules/useInteractorStyle.ts b/src/core/modules/useInteractorStyle.ts index 8859ebb..c8aae6d 100644 --- a/src/core/modules/useInteractorStyle.ts +++ b/src/core/modules/useInteractorStyle.ts @@ -112,8 +112,8 @@ export function useInteractorStyleManipulatorSettings( style.addMouseManipulator(manip); }); }, - [settings], - ([cur], [prev]) => deepEqual(cur, prev) + [settings, isExternalStyle], + (cur, prev) => deepEqual(cur, prev) ); } From 9722b83a97a648b02b3cfb6d7a74560e5daf8ed9 Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 6 Apr 2023 11:56:45 -0400 Subject: [PATCH 078/110] fix(useInteractorStyle): get latest value --- src/core/modules/useInteractorStyle.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/modules/useInteractorStyle.ts b/src/core/modules/useInteractorStyle.ts index c8aae6d..801b987 100644 --- a/src/core/modules/useInteractorStyle.ts +++ b/src/core/modules/useInteractorStyle.ts @@ -92,13 +92,13 @@ const settingToManipulator = (setting: ManipulatorSettings) => { export function useInteractorStyleManipulatorSettings( getStyle: () => vtkInteractorStyle, - isExternalStyle: boolean, + isExternalStyle: () => boolean, settings: ManipulatorSettings[] ) { useComparableEffect( () => { // Assumes external styles are externally controlled - if (isExternalStyle) return; + if (isExternalStyle()) return; if (!getStyle().isA('vtkInteractorStyleManipulator')) return; const style = getStyle() as vtkInteractorStyleManipulator; @@ -143,7 +143,7 @@ export function useInteractorStyle( ); const externalStyleRef = useRef(null); - const isExternalStyle = !!externalStyleRef.current; + const isExternalStyle = useCallback(() => !!externalStyleRef.current, []); const getStyle = useCallback(() => { return externalStyleRef.current ?? getInternalStyle(); From 0bc5c85c60658caee066ed34883640a8d39781e3 Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 13 Apr 2023 17:09:32 -0400 Subject: [PATCH 079/110] fix(Picking): use react event system This commit will make picking events more predictable, as they now are handled via React's event system rather than the native system. --- src/core/Picking.ts | 18 +++---- src/core/internal/ParentedView.tsx | 17 ++++-- src/core/internal/SingleView.tsx | 28 ++++++---- src/core/modules/useViewEvents.ts | 86 ++++++++++++++++++++++++++++++ 4 files changed, 124 insertions(+), 25 deletions(-) create mode 100644 src/core/modules/useViewEvents.ts diff --git a/src/core/Picking.ts b/src/core/Picking.ts index fa3e87c..8ac523e 100644 --- a/src/core/Picking.ts +++ b/src/core/Picking.ts @@ -3,6 +3,8 @@ import vtkOpenGLHardwareSelector from '@kitware/vtk.js/Rendering/OpenGL/Hardware import { Vector2, Vector3 } from '@kitware/vtk.js/types'; import { forwardRef, + MouseEvent, + PointerEvent, useCallback, useContext, useImperativeHandle, @@ -10,7 +12,6 @@ import { } from 'react'; import deletionRegistry from '../utils/DeletionRegistry'; import useDebounce from '../utils/useDebounce'; -import { useEventListener } from '../utils/useEventListener'; import useGetterRef from '../utils/useGetterRef'; import useMount from '../utils/useMount'; import useUnmount from '../utils/useUnmount'; @@ -19,6 +20,7 @@ import { RendererContext, ViewContext, } from './contexts'; +import { useViewEventListener } from './modules/useViewEvents'; export interface PickResult { representationId?: string; @@ -118,7 +120,7 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { const viewAPI = useContext(ViewContext); if (!openGLRenderWindowAPI || !rendererAPI || !viewAPI) { - throw new Error(' must have a ancestor'); + throw new Error(' must have a ancestor'); } const getSelector = useOpenGLHardwareSelector(); @@ -375,8 +377,7 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { const { onHoverDebounceWait = DefaultProps.onHoverDebounceWait } = props; // TODO last selection? (see View.js) - useEventListener( - viewAPI.getViewContainer, + useViewEventListener( 'pointermove', useDebounce( useCallback( @@ -390,8 +391,7 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { ) ); - useEventListener( - viewAPI.getViewContainer, + useViewEventListener( 'pointerdown', useCallback( (ev: PointerEvent) => { @@ -402,8 +402,7 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { ) ); - useEventListener( - viewAPI.getViewContainer, + useViewEventListener( 'pointerup', useCallback( (ev: PointerEvent) => { @@ -414,8 +413,7 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { ) ); - useEventListener( - viewAPI.getViewContainer, + useViewEventListener( 'click', useCallback( (ev: MouseEvent) => { diff --git a/src/core/internal/ParentedView.tsx b/src/core/internal/ParentedView.tsx index c234cb7..b016419 100644 --- a/src/core/internal/ParentedView.tsx +++ b/src/core/internal/ParentedView.tsx @@ -25,6 +25,7 @@ import { useInteractorStyle, useInteractorStyleManipulatorSettings, } from '../modules/useInteractorStyle'; +import useViewEvents, { ViewEvents } from '../modules/useViewEvents'; import Renderer from '../Renderer'; import { DefaultProps, ViewProps } from './view-shared'; @@ -154,6 +155,10 @@ const ParentedView = forwardRef(function ParentedView( } }, [onResize, openGLRenderWindowAPI, resizeWatcher]); + // --- events --- // + + const { rootListeners, registerEventListener } = useViewEvents(); + // --- api --- // const api = useMemo( @@ -195,11 +200,13 @@ const ParentedView = forwardRef(function ParentedView( return ( -
- - {props.children} - -
+ +
+ + {props.children} + +
+
); }); diff --git a/src/core/internal/SingleView.tsx b/src/core/internal/SingleView.tsx index 4a35db0..605f30b 100644 --- a/src/core/internal/SingleView.tsx +++ b/src/core/internal/SingleView.tsx @@ -20,6 +20,7 @@ import { useInteractorStyle, useInteractorStyleManipulatorSettings, } from '../modules/useInteractorStyle'; +import useViewEvents, { ViewEvents } from '../modules/useViewEvents'; import OpenGLRenderWindow from '../OpenGLRenderWindow'; import Renderer from '../Renderer'; import RenderWindow from '../RenderWindow'; @@ -77,6 +78,10 @@ const SingleView = forwardRef(function SingleView(props: ViewProps, fwdRef) { autoCenterOfRotation ); + // --- events --- // + + const { rootListeners, registerEventListener } = useViewEvents(); + // --- api --- // const api = useMemo( @@ -101,16 +106,19 @@ const SingleView = forwardRef(function SingleView(props: ViewProps, fwdRef) { return ( - - - - {props.children} - - - + + + + + {props.children} + + + + ); }); diff --git a/src/core/modules/useViewEvents.ts b/src/core/modules/useViewEvents.ts new file mode 100644 index 0000000..a1764c1 --- /dev/null +++ b/src/core/modules/useViewEvents.ts @@ -0,0 +1,86 @@ +import { + createContext, + EventHandler, + SyntheticEvent, + useContext, + useEffect, + useRef, +} from 'react'; + +type HandledEvents = 'pointermove' | 'pointerdown' | 'pointerup' | 'click'; + +type Handler = EventHandler>; + +function createEvent() { + const handlers: Handler[] = []; + const add = (callback: Handler) => { + handlers.push(callback); + }; + const remove = (callback: Handler) => { + const idx = handlers.indexOf(callback); + if (idx < 0) return; + handlers.splice(idx, 1); + }; + const trigger = (ev: SyntheticEvent) => { + handlers.forEach((h) => h(ev)); + }; + return { add, remove, trigger }; +} + +export default function useViewEvents() { + const eventMap = useRef< + Record> + >({ + pointermove: createEvent(), + pointerdown: createEvent(), + pointerup: createEvent(), + click: createEvent(), + }); + + const rootListeners = useRef({ + onPointerDown: eventMap.current.pointerdown.trigger, + onPointerUp: eventMap.current.pointerup.trigger, + onPointerMove: eventMap.current.pointermove.trigger, + onClick: eventMap.current.click.trigger, + }); + + const registerEventListener = ( + eventName: HandledEvents, + callback: Handler + ) => { + const bus = eventMap.current[eventName]; + if (!bus) { + throw new Error(`${eventName} is not supported in useViewEvents`); + } + + bus.add(callback); + return () => bus.remove(callback); + }; + + return { + rootListeners: rootListeners.current, + registerEventListener, + }; +} + +export type ViewEventRegistrar = ReturnType< + typeof useViewEvents +>['registerEventListener']; + +export const ViewEvents = createContext(null); + +export function useViewEventListener( + eventName: HandledEvents, + callback: Handler +) { + const registerEventListener = useContext( + ViewEvents + ); + if (!registerEventListener) { + throw new Error('useViewEventListener needs ViewEventRegistrar!'); + } + + useEffect(() => { + return registerEventListener(eventName, callback); + }, [eventName, callback, registerEventListener]); +} From 0863e966bd015cd02c68a80fb6e66531f72a1f9c Mon Sep 17 00:00:00 2001 From: Forrest Date: Mon, 22 May 2023 17:57:37 -0400 Subject: [PATCH 080/110] feat: onDataAvailable representation callback --- src/core/Geometry2DRepresentation.tsx | 20 ++++++++++++++++++++ src/core/GeometryRepresentation.tsx | 20 ++++++++++++++++++++ src/core/SliceRepresentation.tsx | 22 ++++++++++++++++++++-- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/src/core/Geometry2DRepresentation.tsx b/src/core/Geometry2DRepresentation.tsx index be29481..9cb4455 100644 --- a/src/core/Geometry2DRepresentation.tsx +++ b/src/core/Geometry2DRepresentation.tsx @@ -65,6 +65,16 @@ export interface Geometry2DRepresentationProps extends PropsWithChildren { * The coordinate system in which the input dataset resides. */ transformCoordinate?: ICoordinateInitialValues; + + /** + * Event callback for when data is made available. + * + * By the time this callback is invoked, you can be sure that: + * - the mapper has the input data + * - the actor is visible (unless explicitly marked as not visible) + * - initial properties are set + */ + onDataAvailable?: () => void; } const DefaultProps = { @@ -141,6 +151,16 @@ export default forwardRef(function Geometry2DRepresentation( ([cur], [prev]) => compareShallowObject(cur, prev) ); + // --- events --- // + + const { onDataAvailable } = props; + useEffect(() => { + if (dataAvailable) { + // trigger onDataAvailable after making updates to the actor and mapper + onDataAvailable?.(); + } + }, [dataAvailable, onDataAvailable]); + // --- // const renderer = useRendererContext(); diff --git a/src/core/GeometryRepresentation.tsx b/src/core/GeometryRepresentation.tsx index 893c1ea..29c827b 100644 --- a/src/core/GeometryRepresentation.tsx +++ b/src/core/GeometryRepresentation.tsx @@ -88,6 +88,16 @@ export interface GeometryRepresentationProps extends PropsWithChildren { * TODO fix type */ scalarBarStyle?: Record; + + /** + * Event callback for when data is made available. + * + * By the time this callback is invoked, you can be sure that: + * - the mapper has the input data + * - the actor is visible (unless explicitly marked as not visible) + * - initial properties are set + */ + onDataAvailable?: () => void; } const DefaultProps = { @@ -154,6 +164,16 @@ export default forwardRef(function GeometryRepresentation( ([cur], [prev]) => compareShallowObject(cur, prev) ); + // --- events --- // + + const { onDataAvailable } = props; + useEffect(() => { + if (dataAvailable) { + // trigger onDataAvailable after making updates to the actor and mapper + onDataAvailable?.(); + } + }, [dataAvailable, onDataAvailable]); + // --- // const renderer = useRendererContext(); diff --git a/src/core/SliceRepresentation.tsx b/src/core/SliceRepresentation.tsx index e81a103..23e7be0 100644 --- a/src/core/SliceRepresentation.tsx +++ b/src/core/SliceRepresentation.tsx @@ -97,6 +97,16 @@ export interface SliceRepresentationProps extends PropsWithChildren { * index of the slice along z */ zSlice?: number; + + /** + * Event callback for when data is made available. + * + * By the time this callback is invoked, you can be sure that: + * - the mapper has the input data + * - the actor is visible (unless explicitly marked as not visible) + * - initial properties are set + */ + onDataAvailable?: () => void; } const DefaultProps = { @@ -135,8 +145,6 @@ export default forwardRef(function SliceRepresentation( trackModified ); - // --- PWF --- // - // --- mapper --- // const getInternalMapper = useMapper( @@ -243,6 +251,16 @@ export default forwardRef(function SliceRepresentation( } }, [kSlice, getMapper, trackModified]); + // --- events --- // + + const { onDataAvailable } = props; + useEffect(() => { + if (dataAvailable) { + // trigger onDataAvailable after making updates to the actor and mapper + onDataAvailable?.(); + } + }, [dataAvailable, onDataAvailable]); + // --- // const renderer = useRendererContext(); From 2e84f19e8a795ca7f79a620c1ac3a659bf7a18cf Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 8 Jun 2023 10:56:53 -0400 Subject: [PATCH 081/110] fix: do not show data if dataset is deleted --- src/core/Algorithm.tsx | 1 + src/core/Dataset.tsx | 3 ++- src/core/Geometry2DRepresentation.tsx | 4 ++-- src/core/ImageData.tsx | 1 + src/core/PolyData.tsx | 1 + src/core/Reader.tsx | 3 ++- src/core/ShareDataSet.tsx | 2 +- src/core/SliceRepresentation.tsx | 4 ++-- src/types.ts | 2 +- 9 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/core/Algorithm.tsx b/src/core/Algorithm.tsx index 2edc926..cd30246 100644 --- a/src/core/Algorithm.tsx +++ b/src/core/Algorithm.tsx @@ -100,6 +100,7 @@ export default function Algorithm(props: AlgorithmProps) { useUnmount(() => { if (algoRef.current) { + representation.dataAvailable(false); deletionRegistry.markForDeletion(algoRef.current); algoRef.current = null; } diff --git a/src/core/Dataset.tsx b/src/core/Dataset.tsx index 6ef159d..cd963c5 100644 --- a/src/core/Dataset.tsx +++ b/src/core/Dataset.tsx @@ -14,11 +14,12 @@ export default function Dataset(props: DatasetProps) { useEffect(() => { if (!dataset) { + representation.dataAvailable(false); return; } downstream.setInputData(dataset); - representation.dataAvailable(); + representation.dataAvailable(true); representation.dataChanged(); }, [dataset, downstream, representation]); diff --git a/src/core/Geometry2DRepresentation.tsx b/src/core/Geometry2DRepresentation.tsx index 9cb4455..57df0dd 100644 --- a/src/core/Geometry2DRepresentation.tsx +++ b/src/core/Geometry2DRepresentation.tsx @@ -177,8 +177,8 @@ export default forwardRef(function Geometry2DRepresentation( dataChanged: () => { renderer.requestRender(); }, - dataAvailable: () => { - setDataAvailable(true); + dataAvailable: (available = true) => { + setDataAvailable(available); representation.dataChanged(); }, getActor, diff --git a/src/core/ImageData.tsx b/src/core/ImageData.tsx index fa4e54c..21f0581 100644 --- a/src/core/ImageData.tsx +++ b/src/core/ImageData.tsx @@ -98,6 +98,7 @@ export default forwardRef(function PolyData(props: ImageDataProps, fwdRef) { useUnmount(() => { if (imRef.current) { + representation.dataAvailable(false); deletionRegistry.markForDeletion(imRef.current); imRef.current = null; } diff --git a/src/core/PolyData.tsx b/src/core/PolyData.tsx index c612f4f..5f7c5bb 100644 --- a/src/core/PolyData.tsx +++ b/src/core/PolyData.tsx @@ -220,6 +220,7 @@ export default forwardRef(function PolyData(props: PolyDataProps, fwdRef) { useUnmount(() => { if (pdRef.current) { + representation.dataAvailable(false); deletionRegistry.markForDeletion(pdRef.current); pdRef.current = null; } diff --git a/src/core/Reader.tsx b/src/core/Reader.tsx index 71e8a39..1e46218 100644 --- a/src/core/Reader.tsx +++ b/src/core/Reader.tsx @@ -89,9 +89,10 @@ export default function Reader(props: ReaderProps) { deletionRegistry.register(reader, () => reader.delete()); readerRef.current = reader; return () => { + representation.dataAvailable(false); deletionRegistry.markForDeletion(reader); }; - }, [createReader]); + }, [createReader, representation]); // --- url handling --- // diff --git a/src/core/ShareDataSet.tsx b/src/core/ShareDataSet.tsx index 70bf447..f5d944f 100644 --- a/src/core/ShareDataSet.tsx +++ b/src/core/ShareDataSet.tsx @@ -205,7 +205,7 @@ export function UseDataSet(props: UseDataSetProps) { useEffect(() => { return share.onDataAvailable(id, (ds) => { downstream.setInputData(ds as vtkObject, port); - representation.dataAvailable(); + representation.dataAvailable(!!ds); }); }, [id, port, representation, downstream, share]); diff --git a/src/core/SliceRepresentation.tsx b/src/core/SliceRepresentation.tsx index 23e7be0..e71a883 100644 --- a/src/core/SliceRepresentation.tsx +++ b/src/core/SliceRepresentation.tsx @@ -277,8 +277,8 @@ export default forwardRef(function SliceRepresentation( dataChanged: () => { renderer.requestRender(); }, - dataAvailable: () => { - setDataAvailable(true); + dataAvailable: (available = true) => { + setDataAvailable(available); representation.dataChanged(); }, getActor, diff --git a/src/types.ts b/src/types.ts index 3ae47ce..74d427b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -70,7 +70,7 @@ export interface IView { } export interface IRepresentation { - dataAvailable(): void; + dataAvailable(available?: boolean): void; dataChanged(): void; getActor(): vtkProp | null; getMapper(): vtkAbstractMapper | null; From 98c1c27303a8651f9eecafffdb1f25cbd06cd0eb Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 8 Jun 2023 10:57:29 -0400 Subject: [PATCH 082/110] docs(usage): add simple RemoveImageData test --- usage/src/App.jsx | 1 + usage/src/Tests/RemoveImageData.jsx | 60 +++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 usage/src/Tests/RemoveImageData.jsx diff --git a/usage/src/App.jsx b/usage/src/App.jsx index fdf24ba..c0235c5 100644 --- a/usage/src/App.jsx +++ b/usage/src/App.jsx @@ -40,6 +40,7 @@ const demos = new Map([ 'Tests/SimpleSliceRendering', lazy(() => import('./Tests/SimpleSliceRendering')), ], + ['Tests/RemoveImageData', lazy(() => import('./Tests/RemoveImageData'))], [ 'Tests/ChangeInteractorStyle', lazy(() => import('./Tests/ChangeInteractorStyle')), diff --git a/usage/src/Tests/RemoveImageData.jsx b/usage/src/Tests/RemoveImageData.jsx new file mode 100644 index 0000000..2924e3f --- /dev/null +++ b/usage/src/Tests/RemoveImageData.jsx @@ -0,0 +1,60 @@ +import { useState } from 'react'; +import { + DataArray, + ImageData, + PointData, + SliceRepresentation, + View, +} from 'react-vtk-js'; + +function generateRandomVolumeField(iMax, jMax, kMax) { + const array = []; + for (let k = 0; k < kMax; k++) { + for (let j = 0; j < jMax; j++) { + for (let i = 0; i < iMax; i++) { + array.push(Math.random()); + } + } + } + return array; +} + +const VALUES = generateRandomVolumeField(10, 10, 10); + +function Example() { + const [showImage, setShowImage] = useState(true); + + const removeImage = () => { + setShowImage(false); + }; + + const im = showImage ? ( + + + + + + ) : null; + + return ( +
+ + + {im} + + +
+ +
+
+ ); +} + +export default Example; From 4b009e512413aadef619081403341e1cdb782a58 Mon Sep 17 00:00:00 2001 From: Jun Jie Zhang Date: Wed, 5 Jul 2023 09:12:44 -0400 Subject: [PATCH 083/110] feat(vtk.js): update vtk.js to 26.9.9 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1991252..ad4a014 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,7 @@ "typescript": "^4.9.5" }, "peerDependencies": { - "@kitware/vtk.js": "^26.5.5", + "@kitware/vtk.js": "^26.9.9", "react": "^16.0.0" } }, diff --git a/package.json b/package.json index 504f34d..d810917 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "dev": "rollup -c --watch" }, "peerDependencies": { - "@kitware/vtk.js": "^26.5.5", + "@kitware/vtk.js": "^26.9.9", "react": "^16.0.0" }, "devDependencies": { From 353b78a2014e740273aa2d63d09a440d85f5cfb2 Mon Sep 17 00:00:00 2001 From: Forrest Date: Mon, 10 Jul 2023 17:29:02 -0400 Subject: [PATCH 084/110] fix: do not retrigger onDataAvailable --- src/core/Geometry2DRepresentation.tsx | 9 ++++++--- src/core/GeometryRepresentation.tsx | 9 ++++++--- src/core/SliceRepresentation.tsx | 9 ++++++--- src/utils/useLatest.ts | 7 +++++++ 4 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 src/utils/useLatest.ts diff --git a/src/core/Geometry2DRepresentation.tsx b/src/core/Geometry2DRepresentation.tsx index 57df0dd..a19c772 100644 --- a/src/core/Geometry2DRepresentation.tsx +++ b/src/core/Geometry2DRepresentation.tsx @@ -20,6 +20,7 @@ import { IDownstream, IRepresentation } from '../types'; import { compareShallowObject } from '../utils/comparators'; import useBooleanAccumulator from '../utils/useBooleanAccumulator'; import useComparableEffect from '../utils/useComparableEffect'; +import useLatest from '../utils/useLatest'; import { DownstreamContext, RepresentationContext, @@ -153,13 +154,15 @@ export default forwardRef(function Geometry2DRepresentation( // --- events --- // - const { onDataAvailable } = props; + const onDataAvailable = useLatest(props.onDataAvailable); useEffect(() => { if (dataAvailable) { // trigger onDataAvailable after making updates to the actor and mapper - onDataAvailable?.(); + onDataAvailable.current?.(); } - }, [dataAvailable, onDataAvailable]); + // onDataAvailable is a ref + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [dataAvailable]); // --- // diff --git a/src/core/GeometryRepresentation.tsx b/src/core/GeometryRepresentation.tsx index 29c827b..9b1188f 100644 --- a/src/core/GeometryRepresentation.tsx +++ b/src/core/GeometryRepresentation.tsx @@ -18,6 +18,7 @@ import { IDownstream, IRepresentation } from '../types'; import { compareShallowObject } from '../utils/comparators'; import useBooleanAccumulator from '../utils/useBooleanAccumulator'; import useComparableEffect from '../utils/useComparableEffect'; +import useLatest from '../utils/useLatest'; import { DownstreamContext, RepresentationContext, @@ -166,13 +167,15 @@ export default forwardRef(function GeometryRepresentation( // --- events --- // - const { onDataAvailable } = props; + const onDataAvailable = useLatest(props.onDataAvailable); useEffect(() => { if (dataAvailable) { // trigger onDataAvailable after making updates to the actor and mapper - onDataAvailable?.(); + onDataAvailable.current?.(); } - }, [dataAvailable, onDataAvailable]); + // onDataAvailable is a ref + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [dataAvailable]); // --- // diff --git a/src/core/SliceRepresentation.tsx b/src/core/SliceRepresentation.tsx index e71a883..968b4cf 100644 --- a/src/core/SliceRepresentation.tsx +++ b/src/core/SliceRepresentation.tsx @@ -23,6 +23,7 @@ import { IDownstream, IRepresentation } from '../types'; import { compareShallowObject } from '../utils/comparators'; import useBooleanAccumulator from '../utils/useBooleanAccumulator'; import useComparableEffect from '../utils/useComparableEffect'; +import useLatest from '../utils/useLatest'; import { DownstreamContext, RepresentationContext, @@ -253,13 +254,15 @@ export default forwardRef(function SliceRepresentation( // --- events --- // - const { onDataAvailable } = props; + const onDataAvailable = useLatest(props.onDataAvailable); useEffect(() => { if (dataAvailable) { // trigger onDataAvailable after making updates to the actor and mapper - onDataAvailable?.(); + onDataAvailable.current?.(); } - }, [dataAvailable, onDataAvailable]); + // onDataAvailable is a ref + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [dataAvailable]); // --- // diff --git a/src/utils/useLatest.ts b/src/utils/useLatest.ts new file mode 100644 index 0000000..debb366 --- /dev/null +++ b/src/utils/useLatest.ts @@ -0,0 +1,7 @@ +import { useRef } from 'react'; + +export default function useLatest(val: T) { + const ref = useRef(val); + ref.current = val; + return ref; +} From f2efe049317d4f36a841743d5f697102e031940e Mon Sep 17 00:00:00 2001 From: Shreeraj Jadhav Date: Wed, 26 Jul 2023 16:00:00 -0400 Subject: [PATCH 085/110] fix(DataArray): setRange with all valid indices For a vtkDataArray of single component, range is cached with index = 0 and not with index = numberOfComponents = 1 --- src/core/DataArray.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/DataArray.ts b/src/core/DataArray.ts index 6bb9126..e66bb46 100644 --- a/src/core/DataArray.ts +++ b/src/core/DataArray.ts @@ -110,7 +110,11 @@ export default function DataArray(props: DataArrayProps) { const typedArrayClass = TypedArrayLookup[TYPED_ARRAYS[type]]; array.setData(toTypedArray(values, typedArrayClass), numberOfComponents); if (range) { - array.setRange(range, numberOfComponents); + if (numberOfComponents === 1) { + array.setRange(range, 0); + } else { + array.setRange(range, numberOfComponents); + } } } From 23801ba3e1a14900882cc4bdc3653687fa50577d Mon Sep 17 00:00:00 2001 From: Forrest Date: Mon, 23 Oct 2023 12:02:21 -0400 Subject: [PATCH 086/110] feat(vtk.js): bump to v28.13.0 Co-Authored-By: Jun Jie Zhang --- package-lock.json | 2 +- package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ad4a014..5a15bcc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,7 @@ "typescript": "^4.9.5" }, "peerDependencies": { - "@kitware/vtk.js": "^26.9.9", + "@kitware/vtk.js": "^28.13.0", "react": "^16.0.0" } }, diff --git a/package.json b/package.json index d810917..167d1d4 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "dev": "rollup -c --watch" }, "peerDependencies": { - "@kitware/vtk.js": "^26.9.9", + "@kitware/vtk.js": "^28.13.0", "react": "^16.0.0" }, "devDependencies": { @@ -79,4 +79,4 @@ "files": [ "dist" ] -} \ No newline at end of file +} From ec3f8722bbae2cd858d0e50927f23a8f4baab144 Mon Sep 17 00:00:00 2001 From: Aaron Maynard Date: Sun, 29 Oct 2023 17:07:58 -0230 Subject: [PATCH 087/110] feat(react): update react peer version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 167d1d4..5f690b0 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ }, "peerDependencies": { "@kitware/vtk.js": "^28.13.0", - "react": "^16.0.0" + "react": "^18.2.0" }, "devDependencies": { "@babel/core": "^7.19.1", From f68e400783425110464a6cc195196c53a9b3c082 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 16 Jan 2024 12:04:28 -0500 Subject: [PATCH 088/110] feat(VolumeRepresentation): initial add --- .eslintrc | 4 +- src/core/VolumeRepresentation.tsx | 233 +++++++++++++++++++++++ src/core/modules/useDataRange.ts | 26 +++ src/core/modules/usePiecewiseFunction.ts | 42 ++++ src/index.ts | 1 + 5 files changed, 305 insertions(+), 1 deletion(-) create mode 100644 src/core/VolumeRepresentation.tsx create mode 100644 src/core/modules/useDataRange.ts create mode 100644 src/core/modules/usePiecewiseFunction.ts diff --git a/.eslintrc b/.eslintrc index 148f06a..843e4fd 100644 --- a/.eslintrc +++ b/.eslintrc @@ -32,6 +32,8 @@ "react/jsx-handler-names": 0, "react/jsx-fragments": 0, "react/no-unused-prop-types": 0, - "import/export": 0 + "import/export": 0, + "n/no-callback-literal": 0, + "@typescript-eslint/no-explicit-any": 0 } } diff --git a/src/core/VolumeRepresentation.tsx b/src/core/VolumeRepresentation.tsx new file mode 100644 index 0000000..f5b7006 --- /dev/null +++ b/src/core/VolumeRepresentation.tsx @@ -0,0 +1,233 @@ +import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray'; +import vtkVolume, { + IVolumeInitialValues, +} from '@kitware/vtk.js/Rendering/Core/Volume'; +import vtkVolumeMapper, { + IVolumeMapperInitialValues, +} from '@kitware/vtk.js/Rendering/Core/VolumeMapper'; +import { IVolumePropertyInitialValues } from '@kitware/vtk.js/Rendering/Core/VolumeProperty'; +import { Vector2 } from '@kitware/vtk.js/types'; +import { + forwardRef, + PropsWithChildren, + useCallback, + useEffect, + useImperativeHandle, + useMemo, + useState, +} from 'react'; +import { IDownstream, IRepresentation } from '../types'; +import { compareShallowObject } from '../utils/comparators'; +import useBooleanAccumulator from '../utils/useBooleanAccumulator'; +import useComparableEffect from '../utils/useComparableEffect'; +import useLatest from '../utils/useLatest'; +import { + DownstreamContext, + RepresentationContext, + useRendererContext, +} from './contexts'; +import useColorTransferFunction from './modules/useColorTransferFunction'; +import useDataRange from './modules/useDataRange'; +import useMapper from './modules/useMapper'; +import usePiecewiseFunction from './modules/usePiecewiseFunction'; +import useProp from './modules/useProp'; + +export interface VolumeRepresentationProps extends PropsWithChildren { + /** + * The ID used to identify this component. + */ + id?: string; + + /** + * Properties to set to the mapper + */ + mapper?: IVolumeMapperInitialValues; + + /** + * An opational mapper instanc + */ + mapperInstance?: vtkVolumeMapper; + + /** + * Properties to set to the volume actor + */ + actor?: IVolumeInitialValues; + + /** + * Properties to set to the volume.property + */ + property?: IVolumePropertyInitialValues; + + /** + * Preset name for the lookup table color map + */ + colorMapPreset?: string; + + /** + * Data range use for the colorMap + */ + colorDataRange?: 'auto' | Vector2; + + /** + * Event callback for when data is made available. + * + * By the time this callback is invoked, you can be sure that: + * - the mapper has the input data + * - the actor is visible (unless explicitly marked as not visible) + * - initial properties are set + */ + onDataAvailable?: () => void; +} + +const DefaultProps = { + colorMapPreset: 'erdc_rainbow_bright', + colorDataRange: 'auto' as const, +}; + +export default forwardRef(function VolumeRepresentation( + props: VolumeRepresentationProps, + fwdRef +) { + const [modifiedRef, trackModified, resetModified] = useBooleanAccumulator(); + const [dataAvailable, setDataAvailable] = useState(false); + + // --- mapper --- // + + const getInternalMapper = useMapper( + () => vtkVolumeMapper.newInstance(), + props.mapper, + trackModified + ); + + const { mapperInstance } = props; + const getMapper = useCallback(() => { + if (mapperInstance) { + return mapperInstance; + } + return getInternalMapper(); + }, [mapperInstance, getInternalMapper]); + + // --- data range --- // + + const getDataArray = useCallback( + () => + getMapper()?.getInputData()?.getPointData().getScalars() as + | vtkDataArray + | undefined, + [getMapper] + ); + + const { dataRange, updateDataRange } = useDataRange(getDataArray); + + const rangeFromProps = props.colorDataRange ?? DefaultProps.colorDataRange; + const colorDataRange = rangeFromProps === 'auto' ? dataRange : rangeFromProps; + + // --- LUT --- // + + const getLookupTable = useColorTransferFunction( + props.colorMapPreset ?? DefaultProps.colorMapPreset, + colorDataRange, + trackModified + ); + + // --- PWF --- // + + const getPiecewiseFunction = usePiecewiseFunction( + colorDataRange, + trackModified + ); + + // --- actor --- // + + const actorProps = { + ...props.actor, + visibility: dataAvailable && (props.actor?.visibility ?? true), + }; + const getActor = useProp({ + constructor: () => vtkVolume.newInstance(), + id: props.id, + props: actorProps, + trackModified, + }); + + useEffect(() => { + getActor().setMapper(getMapper()); + }, [getActor, getMapper]); + + useEffect(() => { + getActor().getProperty().setRGBTransferFunction(0, getLookupTable()); + getActor().getProperty().setScalarOpacity(0, getPiecewiseFunction()); + getActor().getProperty().setInterpolationTypeToLinear(); + }, [getActor, getLookupTable, getPiecewiseFunction]); + + // set actor property props + const { property: propertyProps } = props; + useComparableEffect( + () => { + if (!propertyProps) return; + trackModified(getActor().getProperty().set(propertyProps)); + }, + [propertyProps], + ([cur], [prev]) => compareShallowObject(cur, prev) + ); + + // --- events --- // + + const onDataAvailable = useLatest(props.onDataAvailable); + useEffect(() => { + if (dataAvailable) { + // trigger onDataAvailable after making updates to the actor and mapper + onDataAvailable.current?.(); + } + // onDataAvailable is a ref + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [dataAvailable]); + + // --- // + + const renderer = useRendererContext(); + + useEffect(() => { + if (modifiedRef.current) { + renderer.requestRender(); + resetModified(); + } + }); + + const representation = useMemo( + () => ({ + dataChanged: () => { + updateDataRange(); + renderer.requestRender(); + }, + dataAvailable: (available = true) => { + setDataAvailable(available); + representation.dataChanged(); + }, + getActor, + getMapper, + getData: () => { + return getMapper().getInputData(); + }, + }), + [renderer, updateDataRange, getActor, getMapper] + ); + + const downstream = useMemo( + () => ({ + setInputData: (...args) => getMapper().setInputData(...args), + setInputConnection: (...args) => getMapper().setInputConnection(...args), + }), + [getMapper] + ); + + useImperativeHandle(fwdRef, () => representation); + + return ( + + + {props.children} + + + ); +}); diff --git a/src/core/modules/useDataRange.ts b/src/core/modules/useDataRange.ts new file mode 100644 index 0000000..3d84e2e --- /dev/null +++ b/src/core/modules/useDataRange.ts @@ -0,0 +1,26 @@ +import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray'; +import { useCallback, useEffect, useState } from 'react'; + +const DEFAULT_RANGE: [number, number] = [0, 1]; + +export default function useDataRange( + getDataArray: () => vtkDataArray | null | undefined, + defaultRange = DEFAULT_RANGE +) { + const [dataRange, setRange] = useState<[number, number]>(defaultRange); + + const updateDataRange = useCallback(() => { + const range = getDataArray()?.getRange(); + if (!range) return; + setRange(range); + }, [getDataArray]); + + useEffect(() => { + updateDataRange(); + }, [updateDataRange]); + + return { + dataRange, + updateDataRange, + }; +} diff --git a/src/core/modules/usePiecewiseFunction.ts b/src/core/modules/usePiecewiseFunction.ts new file mode 100644 index 0000000..272de0b --- /dev/null +++ b/src/core/modules/usePiecewiseFunction.ts @@ -0,0 +1,42 @@ +import vtkPiecewiseFunction from '@kitware/vtk.js/Common/DataModel/PiecewiseFunction'; +import { Vector2 } from '@kitware/vtk.js/types'; +import { compareVector2 } from '../../utils/comparators'; +import deletionRegistry from '../../utils/DeletionRegistry'; +import { BooleanAccumulator } from '../../utils/useBooleanAccumulator'; +import useComparableEffect from '../../utils/useComparableEffect'; +import useGetterRef from '../../utils/useGetterRef'; +import useUnmount from '../../utils/useUnmount'; + +export default function usePiecewiseFunction( + range: Vector2, + trackModified: BooleanAccumulator +) { + const [pwfRef, getPWF] = useGetterRef(() => { + const func = vtkPiecewiseFunction.newInstance(); + deletionRegistry.register(func, () => func.delete()); + return func; + }); + + useComparableEffect( + () => { + if (!range) return; + const pwf = getPWF(); + pwf.setNodes([ + { x: range[0], y: 0, midpoint: 0.5, sharpness: 0 }, + { x: range[1], y: 1, midpoint: 0.5, sharpness: 0 }, + ]); + trackModified(true); + }, + [range] as const, + ([curRange], [oldRange]) => compareVector2(curRange, oldRange) + ); + + useUnmount(() => { + if (pwfRef.current) { + deletionRegistry.markForDeletion(pwfRef.current); + pwfRef.current = null; + } + }); + + return getPWF; +} diff --git a/src/index.ts b/src/index.ts index 24ac272..d305c46 100644 --- a/src/index.ts +++ b/src/index.ts @@ -44,3 +44,4 @@ export { default as SliceRepresentation } from './core/SliceRepresentation'; export type { SliceRepresentationProps } from './core/SliceRepresentation'; export { default as View } from './core/View'; export type { ViewProps } from './core/View'; +export { default as VolumeRepresentation } from './core/VolumeRepresentation'; From 7ed06f4b3f30e7d560638c63d7e00f684c5dfc53 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 16 Jan 2024 12:53:49 -0500 Subject: [PATCH 089/110] feat: onDataAvailable/Changed event hooks --- src/core/Geometry2DRepresentation.tsx | 33 ++++++++++++++----- src/core/GeometryRepresentation.tsx | 33 ++++++++++++++----- src/core/ShareDataSet.tsx | 13 ++++++-- src/core/SliceRepresentation.tsx | 32 ++++++++++++++----- src/core/VolumeRepresentation.tsx | 46 ++++++++++++++++++++------- src/core/modules/useDataEvents.ts | 26 +++++++++++++++ src/types.ts | 2 ++ src/utils/createEvent.ts | 30 +++++++++++++++++ 8 files changed, 177 insertions(+), 38 deletions(-) create mode 100644 src/core/modules/useDataEvents.ts create mode 100644 src/utils/createEvent.ts diff --git a/src/core/Geometry2DRepresentation.tsx b/src/core/Geometry2DRepresentation.tsx index a19c772..5ef07fb 100644 --- a/src/core/Geometry2DRepresentation.tsx +++ b/src/core/Geometry2DRepresentation.tsx @@ -1,3 +1,4 @@ +import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData'; import vtkActor2D, { IActor2DInitialValues, } from '@kitware/vtk.js/Rendering/Core/Actor2D'; @@ -11,6 +12,7 @@ import { Vector2 } from '@kitware/vtk.js/types'; import { forwardRef, PropsWithChildren, + useCallback, useEffect, useImperativeHandle, useMemo, @@ -20,7 +22,6 @@ import { IDownstream, IRepresentation } from '../types'; import { compareShallowObject } from '../utils/comparators'; import useBooleanAccumulator from '../utils/useBooleanAccumulator'; import useComparableEffect from '../utils/useComparableEffect'; -import useLatest from '../utils/useLatest'; import { DownstreamContext, RepresentationContext, @@ -28,6 +29,7 @@ import { } from './contexts'; import useColorTransferFunction from './modules/useColorTransferFunction'; import useCoordinate from './modules/useCoordinate'; +import useDataEvents from './modules/useDataEvents'; import useMapper from './modules/useMapper'; import useProp from './modules/useProp'; @@ -120,6 +122,11 @@ export default forwardRef(function Geometry2DRepresentation( trackModified ); + const getInputData = useCallback( + () => getMapper().getInputData(), + [getMapper] + ); + // --- actor --- // const actorProps = { @@ -154,15 +161,15 @@ export default forwardRef(function Geometry2DRepresentation( // --- events --- // - const onDataAvailable = useLatest(props.onDataAvailable); + const { dataChangedEvent, dataAvailableEvent } = + useDataEvents(props); + + // trigger data available event useEffect(() => { if (dataAvailable) { - // trigger onDataAvailable after making updates to the actor and mapper - onDataAvailable.current?.(); + dataAvailableEvent.current.dispatchEvent(getInputData()); } - // onDataAvailable is a ref - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [dataAvailable]); + }, [dataAvailable, dataAvailableEvent, getInputData]); // --- // @@ -178,6 +185,7 @@ export default forwardRef(function Geometry2DRepresentation( const representation = useMemo( () => ({ dataChanged: () => { + dataChangedEvent.current.dispatchEvent(getInputData()); renderer.requestRender(); }, dataAvailable: (available = true) => { @@ -186,8 +194,17 @@ export default forwardRef(function Geometry2DRepresentation( }, getActor, getMapper, + onDataAvailable: (cb) => dataAvailableEvent.current.addEventListener(cb), + onDataChanged: (cb) => dataChangedEvent.current.addEventListener(cb), }), - [renderer, getActor, getMapper] + [ + renderer, + getActor, + getMapper, + getInputData, + dataAvailableEvent, + dataChangedEvent, + ] ); const downstream = useMemo( diff --git a/src/core/GeometryRepresentation.tsx b/src/core/GeometryRepresentation.tsx index 9b1188f..1f18c50 100644 --- a/src/core/GeometryRepresentation.tsx +++ b/src/core/GeometryRepresentation.tsx @@ -1,3 +1,4 @@ +import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData'; import vtkActor, { IActorInitialValues, } from '@kitware/vtk.js/Rendering/Core/Actor'; @@ -9,6 +10,7 @@ import { Vector2 } from '@kitware/vtk.js/types'; import { forwardRef, PropsWithChildren, + useCallback, useEffect, useImperativeHandle, useMemo, @@ -18,13 +20,13 @@ import { IDownstream, IRepresentation } from '../types'; import { compareShallowObject } from '../utils/comparators'; import useBooleanAccumulator from '../utils/useBooleanAccumulator'; import useComparableEffect from '../utils/useComparableEffect'; -import useLatest from '../utils/useLatest'; import { DownstreamContext, RepresentationContext, useRendererContext, } from './contexts'; import useColorTransferFunction from './modules/useColorTransferFunction'; +import useDataEvents from './modules/useDataEvents'; import useMapper from './modules/useMapper'; import useProp from './modules/useProp'; @@ -137,6 +139,11 @@ export default forwardRef(function GeometryRepresentation( getMapper().setLookupTable(getLookupTable()); }, [getMapper, getLookupTable]); + const getInputData = useCallback( + () => getMapper().getInputData(), + [getMapper] + ); + // --- actor --- // const actorProps = { @@ -167,15 +174,15 @@ export default forwardRef(function GeometryRepresentation( // --- events --- // - const onDataAvailable = useLatest(props.onDataAvailable); + const { dataChangedEvent, dataAvailableEvent } = + useDataEvents(props); + + // trigger data available event useEffect(() => { if (dataAvailable) { - // trigger onDataAvailable after making updates to the actor and mapper - onDataAvailable.current?.(); + dataAvailableEvent.current.dispatchEvent(getInputData()); } - // onDataAvailable is a ref - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [dataAvailable]); + }, [dataAvailable, dataAvailableEvent, getInputData]); // --- // @@ -191,6 +198,7 @@ export default forwardRef(function GeometryRepresentation( const representation = useMemo( () => ({ dataChanged: () => { + dataChangedEvent.current.dispatchEvent(getInputData()); renderer.requestRender(); }, dataAvailable: () => { @@ -199,8 +207,17 @@ export default forwardRef(function GeometryRepresentation( }, getActor, getMapper, + onDataAvailable: (cb) => dataAvailableEvent.current.addEventListener(cb), + onDataChanged: (cb) => dataChangedEvent.current.addEventListener(cb), }), - [renderer, getActor, getMapper] + [ + renderer, + getActor, + getMapper, + getInputData, + dataAvailableEvent, + dataChangedEvent, + ] ); const downstream = useMemo( diff --git a/src/core/ShareDataSet.tsx b/src/core/ShareDataSet.tsx index f5d944f..2e1172d 100644 --- a/src/core/ShareDataSet.tsx +++ b/src/core/ShareDataSet.tsx @@ -31,6 +31,7 @@ import { useRepresentation, useShareDataSet, } from './contexts'; +import useDataEvents from './modules/useDataEvents'; const DATA_AVAILABLE_EVENT = 'dataAvailable'; const DATA_CHANGED_EVENT = 'dataChanged'; @@ -63,7 +64,7 @@ export function ShareDataSetRoot(props: PropsWithChildren) { }; const handler = (ev: Event) => { - if (!(ev instanceof CustomEvent)) return; + if (!(ev instanceof CustomEvent)) return; if (name === ev.detail?.name) { invoke(); } @@ -153,6 +154,10 @@ export function RegisterDataSet(props: RegisterDataSetProps) { share.unregister(id); }); + // --- events --- // + + const { dataChangedEvent, dataAvailableEvent } = useDataEvents({}); + // --- // const downstream = useMemo( @@ -171,14 +176,18 @@ export function RegisterDataSet(props: RegisterDataSetProps) { () => ({ dataChanged() { share.dispatchDataChanged(id); + dataChangedEvent.current.dispatchEvent(); }, dataAvailable() { share.dispatchDataAvailable(id); + dataAvailableEvent.current.dispatchEvent(); }, getActor: () => null, getMapper: () => null, + onDataAvailable: (cb) => share.onDataAvailable(id, cb), + onDataChanged: (cb) => share.onDataChanged(id, cb), }), - [id, share] + [id, share, dataAvailableEvent, dataChangedEvent] ); return ( diff --git a/src/core/SliceRepresentation.tsx b/src/core/SliceRepresentation.tsx index 968b4cf..ad0843e 100644 --- a/src/core/SliceRepresentation.tsx +++ b/src/core/SliceRepresentation.tsx @@ -1,3 +1,4 @@ +import vtkImageData from '@kitware/vtk.js/Common/DataModel/ImageData'; import AbstractImageMapper, { vtkAbstractImageMapper, } from '@kitware/vtk.js/Rendering/Core/AbstractImageMapper'; @@ -23,13 +24,13 @@ import { IDownstream, IRepresentation } from '../types'; import { compareShallowObject } from '../utils/comparators'; import useBooleanAccumulator from '../utils/useBooleanAccumulator'; import useComparableEffect from '../utils/useComparableEffect'; -import useLatest from '../utils/useLatest'; import { DownstreamContext, RepresentationContext, useRendererContext, } from './contexts'; import useColorTransferFunction from './modules/useColorTransferFunction'; +import useDataEvents from './modules/useDataEvents'; import useMapper from './modules/useMapper'; import useProp from './modules/useProp'; @@ -162,6 +163,11 @@ export default forwardRef(function SliceRepresentation( return getInternalMapper(); }, [mapperInstance, getInternalMapper]); + const getInputData = useCallback( + () => getMapper().getInputData(), + [getMapper] + ); + // --- actor --- // const actorProps = { @@ -254,15 +260,15 @@ export default forwardRef(function SliceRepresentation( // --- events --- // - const onDataAvailable = useLatest(props.onDataAvailable); + const { dataChangedEvent, dataAvailableEvent } = + useDataEvents(props); + + // trigger data available event useEffect(() => { if (dataAvailable) { - // trigger onDataAvailable after making updates to the actor and mapper - onDataAvailable.current?.(); + dataAvailableEvent.current.dispatchEvent(getInputData()); } - // onDataAvailable is a ref - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [dataAvailable]); + }, [dataAvailable, dataAvailableEvent, getInputData]); // --- // @@ -278,6 +284,7 @@ export default forwardRef(function SliceRepresentation( const representation = useMemo( () => ({ dataChanged: () => { + dataChangedEvent.current.dispatchEvent(getInputData()); renderer.requestRender(); }, dataAvailable: (available = true) => { @@ -286,8 +293,17 @@ export default forwardRef(function SliceRepresentation( }, getActor, getMapper, + onDataAvailable: (cb) => dataAvailableEvent.current.addEventListener(cb), + onDataChanged: (cb) => dataChangedEvent.current.addEventListener(cb), }), - [renderer, getActor, getMapper] + [ + renderer, + getActor, + getMapper, + getInputData, + dataAvailableEvent, + dataChangedEvent, + ] ); const downstream = useMemo( diff --git a/src/core/VolumeRepresentation.tsx b/src/core/VolumeRepresentation.tsx index f5b7006..9623edb 100644 --- a/src/core/VolumeRepresentation.tsx +++ b/src/core/VolumeRepresentation.tsx @@ -1,4 +1,5 @@ import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray'; +import vtkImageData from '@kitware/vtk.js/Common/DataModel/ImageData'; import vtkVolume, { IVolumeInitialValues, } from '@kitware/vtk.js/Rendering/Core/Volume'; @@ -20,13 +21,13 @@ import { IDownstream, IRepresentation } from '../types'; import { compareShallowObject } from '../utils/comparators'; import useBooleanAccumulator from '../utils/useBooleanAccumulator'; import useComparableEffect from '../utils/useComparableEffect'; -import useLatest from '../utils/useLatest'; import { DownstreamContext, RepresentationContext, useRendererContext, } from './contexts'; import useColorTransferFunction from './modules/useColorTransferFunction'; +import useDataEvents from './modules/useDataEvents'; import useDataRange from './modules/useDataRange'; import useMapper from './modules/useMapper'; import usePiecewiseFunction from './modules/usePiecewiseFunction'; @@ -76,7 +77,15 @@ export interface VolumeRepresentationProps extends PropsWithChildren { * - the actor is visible (unless explicitly marked as not visible) * - initial properties are set */ - onDataAvailable?: () => void; + onDataAvailable?: (obj?: vtkImageData) => void; + + /** + * Event callback for when data has changed. + * + * When called: + * - Mapper has input data + */ + onDataChanged?: (obj?: vtkImageData) => void; } const DefaultProps = { @@ -107,6 +116,11 @@ export default forwardRef(function VolumeRepresentation( return getInternalMapper(); }, [mapperInstance, getInternalMapper]); + const getInputData = useCallback( + () => getMapper().getInputData(), + [getMapper] + ); + // --- data range --- // const getDataArray = useCallback( @@ -173,15 +187,15 @@ export default forwardRef(function VolumeRepresentation( // --- events --- // - const onDataAvailable = useLatest(props.onDataAvailable); + const { dataChangedEvent, dataAvailableEvent } = + useDataEvents(props); + + // trigger data available event useEffect(() => { if (dataAvailable) { - // trigger onDataAvailable after making updates to the actor and mapper - onDataAvailable.current?.(); + dataAvailableEvent.current.dispatchEvent(getInputData()); } - // onDataAvailable is a ref - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [dataAvailable]); + }, [dataAvailable, dataAvailableEvent, getInputData]); // --- // @@ -198,6 +212,7 @@ export default forwardRef(function VolumeRepresentation( () => ({ dataChanged: () => { updateDataRange(); + dataChangedEvent.current.dispatchEvent(getInputData()); renderer.requestRender(); }, dataAvailable: (available = true) => { @@ -206,11 +221,18 @@ export default forwardRef(function VolumeRepresentation( }, getActor, getMapper, - getData: () => { - return getMapper().getInputData(); - }, + onDataAvailable: (cb) => dataAvailableEvent.current.addEventListener(cb), + onDataChanged: (cb) => dataChangedEvent.current.addEventListener(cb), }), - [renderer, updateDataRange, getActor, getMapper] + [ + renderer, + updateDataRange, + getActor, + getMapper, + getInputData, + dataAvailableEvent, + dataChangedEvent, + ] ); const downstream = useMemo( diff --git a/src/core/modules/useDataEvents.ts b/src/core/modules/useDataEvents.ts new file mode 100644 index 0000000..0fa24a9 --- /dev/null +++ b/src/core/modules/useDataEvents.ts @@ -0,0 +1,26 @@ +import { useEffect, useRef } from 'react'; +import { createEvent } from '../../utils/createEvent'; + +interface UseDataEventsProps { + onDataAvailable?: (obj?: T) => void; + onDataChanged?: (obj?: T) => void; +} + +export default function useDataEvents(props: UseDataEventsProps) { + const dataChangedEvent = useRef(createEvent()); + const dataAvailableEvent = useRef(createEvent()); + + const { onDataAvailable } = props; + useEffect(() => { + if (!onDataAvailable) return; + return dataAvailableEvent.current.addEventListener(onDataAvailable); + }, [onDataAvailable, dataAvailableEvent]); + + const { onDataChanged } = props; + useEffect(() => { + if (!onDataChanged) return; + return dataChangedEvent.current.addEventListener(onDataChanged); + }, [onDataChanged, dataChangedEvent]); + + return { dataChangedEvent, dataAvailableEvent }; +} diff --git a/src/types.ts b/src/types.ts index 74d427b..16e3c13 100644 --- a/src/types.ts +++ b/src/types.ts @@ -74,6 +74,8 @@ export interface IRepresentation { dataChanged(): void; getActor(): vtkProp | null; getMapper(): vtkAbstractMapper | null; + onDataAvailable(cb: (obj?: any) => void): () => void; + onDataChanged(cb: (obj?: any) => void): () => void; } // There is no sufficient type that overlaps classes like diff --git a/src/utils/createEvent.ts b/src/utils/createEvent.ts new file mode 100644 index 0000000..79e10d5 --- /dev/null +++ b/src/utils/createEvent.ts @@ -0,0 +1,30 @@ +/** + * Creates an event for listening. + */ +export function createEvent() { + type Callback = (ev?: T) => void; + + const callbacks: Callback[] = []; + + const removeEventListener = (cb: () => void) => { + const idx = callbacks.indexOf(cb); + if (idx > -1) { + callbacks.splice(idx, 1); + } + }; + + const addEventListener = (cb: (ev?: T) => void) => { + callbacks.push(cb); + return () => { + removeEventListener(cb); + }; + }; + + const dispatchEvent = (ev?: T) => { + callbacks.forEach((cb) => { + cb(ev); + }); + }; + + return { addEventListener, removeEventListener, dispatchEvent }; +} From 71b04b8a3ca8612d8f0ab3876b080f1e1442df99 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 16 Jan 2024 12:57:30 -0500 Subject: [PATCH 090/110] feat(VolumeController): add impl --- src/core/VolumeController.tsx | 122 ++++++++++++++++++++++++++++++++++ src/global.d.ts | 5 ++ src/index.ts | 1 + 3 files changed, 128 insertions(+) create mode 100644 src/core/VolumeController.tsx diff --git a/src/core/VolumeController.tsx b/src/core/VolumeController.tsx new file mode 100644 index 0000000..4a251a7 --- /dev/null +++ b/src/core/VolumeController.tsx @@ -0,0 +1,122 @@ +import vtkImageData from '@kitware/vtk.js/Common/DataModel/ImageData'; +import vtkVolumeController from '@kitware/vtk.js/Interaction/UI/VolumeController'; +import { useCallback, useContext, useEffect, useRef } from 'react'; +import { Contexts } from '..'; +import deletionRegistry from '../utils/DeletionRegistry'; +import useGetterRef from '../utils/useGetterRef'; +import useUnmount from '../utils/useUnmount'; +import { useRepresentation } from './contexts'; + +export interface VolumeControllerProps { + /** + * The size of the widget (width, height) + */ + size?: [number, number]; + + /** + * Flag for rescaling the colormap. + */ + rescaleColorMap?: boolean; +} + +const DefaultProps = { + size: [400, 150], + rescaleColorMap: true, +}; + +export default function VolumeController(props: VolumeControllerProps) { + const containerRef = useRef(null); + const [controllerRef, getController] = useGetterRef(() => { + const ctrlr = vtkVolumeController.newInstance(); + deletionRegistry.markForDeletion(() => ctrlr.delete()); + return ctrlr; + }); + + const view = useContext(Contexts.ViewContext); + if (!view) throw new Error('Need view context'); + + const volumeRep = useRepresentation(); + + const updateWidget = useCallback(() => { + const volume = volumeRep.getMapper()?.getInputData() as + | vtkImageData + | undefined; + if (!volume) return; + + const widget = getController().getWidget(); + const dataArray = + volume.getPointData().getScalars() || + volume.getPointData().getArrays()[0]; + widget.setDataArray(dataArray.getData()); + }, [volumeRep, getController]); + + // --- set actor --- // + + const updateActor = useCallback(() => { + // set the actor prior to setting props, since + // setRescaleColorMap depends on the actor + getController().setActor(volumeRep.getActor()); + }, [getController, volumeRep]); + + useEffect(() => { + return volumeRep.onDataAvailable(updateActor); + }, [volumeRep, updateActor]); + + // --- prop handling --- // + + const { size = DefaultProps.size } = props; + + useEffect(() => { + if (!size) return; + getController().setSize(size[0], size[1]); + }, [size, getController]); + + const { rescaleColorMap = DefaultProps.rescaleColorMap } = props; + + useEffect(() => { + if (rescaleColorMap === undefined || !getController().getActor()) return; + + getController().setRescaleColorMap(rescaleColorMap); + }, [rescaleColorMap, getController]); + + // --- initialization --- // + + const init = useCallback( + (volume?: vtkImageData) => { + const container = containerRef.current; + const rw = view.getRenderWindow()?.get(); + + if (!volume || !rw) return; + + const controller = getController(); + + controller.setContainer(container); + controller.setupContent(rw, volumeRep.getActor(), false); + controller.render(); + view.requestRender(); + + const sub = volume.onModified(() => { + updateWidget(); + }); + + return () => { + controller.setContainer(null); + sub.unsubscribe(); + }; + }, + [view, volumeRep, updateWidget, getController] + ); + + useEffect(() => { + return volumeRep.onDataAvailable(init); + }, [volumeRep, init]); + + useUnmount(() => { + if (controllerRef.current) { + deletionRegistry.markForDeletion(controllerRef.current); + controllerRef.current = null; + } + }); + + return
; +} diff --git a/src/global.d.ts b/src/global.d.ts index 54527d8..56aed86 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -485,3 +485,8 @@ declare module '@kitware/vtk.js/Rendering/OpenGL/HardwareSelector' { export default vtkOpenGLHardwareSelector; } + +declare module '@kitware/vtk.js/Interaction/UI/VolumeController' { + const VolumeController: any; + export default VolumeController; +} diff --git a/src/index.ts b/src/index.ts index d305c46..46ccee6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -44,4 +44,5 @@ export { default as SliceRepresentation } from './core/SliceRepresentation'; export type { SliceRepresentationProps } from './core/SliceRepresentation'; export { default as View } from './core/View'; export type { ViewProps } from './core/View'; +export { default as VolumeController } from './core/VolumeController'; export { default as VolumeRepresentation } from './core/VolumeRepresentation'; From f03d81a077fa0741720daa5f0577f51ab0958d29 Mon Sep 17 00:00:00 2001 From: Forrest Date: Tue, 16 Jan 2024 13:00:47 -0500 Subject: [PATCH 091/110] docs(usage): add demos for volume representation --- usage/src/App.jsx | 7 +- usage/src/Volume/DynamicUpdate.jsx | 108 ++++++------ usage/src/Volume/SliceRendering.jsx | 244 ++++++++++++++------------- usage/src/Volume/VolumeRendering.jsx | 15 +- 4 files changed, 190 insertions(+), 184 deletions(-) diff --git a/usage/src/App.jsx b/usage/src/App.jsx index c0235c5..f00ed69 100644 --- a/usage/src/App.jsx +++ b/usage/src/App.jsx @@ -21,14 +21,13 @@ const demos = new Map([ // ['Geometry/Glyph', lazy(() => import('./Geometry/Glyph'))], ['Geometry/CutterExample', lazy(() => import('./Geometry/CutterExample'))], ['Geometry/TubeExample', lazy(() => import('./Geometry/TubeExample'))], - // ['Volume/SliceRendering', lazy(() => import('./Volume/SliceRendering'))], - // ['Volume/ImageSeriesRendering', lazy(() => import('./Volume/ImageSeriesRendering'))], + ['Volume/SliceRendering', lazy(() => import('./Volume/SliceRendering'))], // [ // 'Volume/SyntheticVolumeRendering', // lazy(() => import('./Volume/SyntheticVolumeRendering')), // ], - // ['Volume/VolumeRendering', lazy(() => import('./Volume/VolumeRendering'))], - // ['Volume/DynamicUpdate', lazy(() => import('./Volume/DynamicUpdate'))], + ['Volume/VolumeRendering', lazy(() => import('./Volume/VolumeRendering'))], + ['Volume/DynamicUpdate', lazy(() => import('./Volume/DynamicUpdate'))], [ 'Volume/ImageSeriesRendering', lazy(() => import('./Volume/ImageSeriesRendering')), diff --git a/usage/src/Volume/DynamicUpdate.jsx b/usage/src/Volume/DynamicUpdate.jsx index 7d109b6..12870cd 100644 --- a/usage/src/Volume/DynamicUpdate.jsx +++ b/usage/src/Volume/DynamicUpdate.jsx @@ -1,15 +1,17 @@ -import React, { useState, useContext } from 'react'; +import { useContext, useState } from 'react'; import { Contexts, - View, - VolumeRepresentation, - SliceRepresentation, - VolumeController, - ShareDataSet, + DataArray, ImageData, PointData, - DataArray, + RegisterDataSet, + ShareDataSetRoot, + SliceRepresentation, + UseDataSet, + View, + VolumeController, + VolumeRepresentation, } from 'react-vtk-js'; function generateRandomVolumeField(iMax, jMax, kMax) { @@ -70,57 +72,61 @@ function Slider(props) { ); } -function Example(props) { +function Example() { const [fieldIdx, setFieldIdx] = useState(0); const colorWindow = fieldIdx ? 10 : 1; const colorLevel = fieldIdx ? 5 : 0.5; return ( -
- - - - - - - - - - - - - -
- - - - + + + + + + + + +
+ + + + + + + +
+ + + + + +
-
+ ); } diff --git a/usage/src/Volume/SliceRendering.jsx b/usage/src/Volume/SliceRendering.jsx index b0c3d75..3f33e28 100644 --- a/usage/src/Volume/SliceRendering.jsx +++ b/usage/src/Volume/SliceRendering.jsx @@ -1,12 +1,14 @@ -import React, { useState, useContext } from 'react'; import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps.js'; +import { useContext, useState } from 'react'; import { - View, - ShareDataSet, - SliceRepresentation, - Reader, Contexts, + Reader, + RegisterDataSet, + ShareDataSetRoot, + SliceRepresentation, + UseDataSet, + View, VolumeController, VolumeRepresentation, } from 'react-vtk-js'; @@ -66,8 +68,10 @@ function DropDown(props) { ...props.style, }} > - {props.options.map((opt) => ( - + {props.options.map((opt, idx) => ( + ))} ); @@ -106,7 +110,7 @@ function CheckBox(props) { ); } -function Example(props) { +function Example() { const [iSlice, setISlice] = useState(128); const [jSlice, setJSlice] = useState(128); const [kSlice, setKSlice] = useState(47); @@ -116,120 +120,122 @@ function Example(props) { const [useLookupTableScalarRange, setUseLookupTableScalarRange] = useState(false); return ( -
-
- - - - - - - - - - - - - - - + + + +
+
+ - - - + + + + + + + + + + + + + + + + +
+
+ - - - -
-
- - -
- -
- -
-
+ +
+ +
+ +
+ +
-
+ ); } diff --git a/usage/src/Volume/VolumeRendering.jsx b/usage/src/Volume/VolumeRendering.jsx index 913a557..68c87d7 100644 --- a/usage/src/Volume/VolumeRendering.jsx +++ b/usage/src/Volume/VolumeRendering.jsx @@ -1,24 +1,19 @@ -import React from 'react'; - +import vtkXMLImageDataReader from '@kitware/vtk.js/IO/XML/XMLImageDataReader'; import { + Reader, View, - VolumeRepresentation, VolumeController, - Reader, + VolumeRepresentation, } from 'react-vtk-js'; -function Example(props) { - const array = []; - while (array.length < 1000) { - array.push(Math.random()); - } +function Example() { return (
From f6451eb533181679f243561e1b2d082e257aae73 Mon Sep 17 00:00:00 2001 From: Shreeraj Jadhav Date: Fri, 19 Jan 2024 17:39:48 -0500 Subject: [PATCH 092/110] fix(ParentedView): mouse scrolling behavior for out-of-focus windows Out of focus windows/viewports do not detect `pointerenter` events reliably. Add listener to `wheel` events for rebinding interactor with events. --- src/core/internal/ParentedView.tsx | 31 ++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/core/internal/ParentedView.tsx b/src/core/internal/ParentedView.tsx index b016419..b427cd5 100644 --- a/src/core/internal/ParentedView.tsx +++ b/src/core/internal/ParentedView.tsx @@ -87,9 +87,9 @@ const ParentedView = forwardRef(function ParentedView( * 1. Switch to targeted renderer. * 2. Switch to this View's interactor style. */ - useEventListener(containerRef, 'pointerenter', (ev: PointerEvent) => { + const switchTarget = (): boolean => { const rendererAPI = rendererRef.current; - if (!rendererAPI) return; + if (!rendererAPI) return false; const interactor = getInteractor(); @@ -101,14 +101,25 @@ const ParentedView = forwardRef(function ParentedView( const oldContainer = interactor.getContainer(); const newContainer = containerRef.current; if (oldContainer !== newContainer) { - if (oldContainer) { - interactor.unbindEvents(); - } - if (newContainer) { - interactor.bindEvents(newContainer); - } - - // forward event to interactor + return interactor.setContainer(newContainer); + } + return false; + }; + + // Use wheel events to cover the posibility of interacting + // with an out-of-focus browser window. + useEventListener(containerRef, 'wheel', (ev: WheelEvent) => { + if (switchTarget()) { + // forward wheel-event to interactor + const interactor = getInteractor(); + interactor.handleWheel(ev); + } + }); + + useEventListener(containerRef, 'pointerenter', (ev: PointerEvent) => { + if (switchTarget()) { + // forward pointer-event to interactor + const interactor = getInteractor(); interactor.handlePointerEnter(ev); } }); From 382e3a8aa0bb5e8e3cd198cee222a71b5ec3a9f7 Mon Sep 17 00:00:00 2001 From: Shreeraj Jadhav Date: Fri, 26 Jan 2024 15:07:48 -0500 Subject: [PATCH 093/110] bump(vtk.js): to version 29.4.5 --- package-lock.json | 87 ++++++++++++++++++----------------------- package.json | 4 +- usage/package-lock.json | 8 ++-- 3 files changed, 45 insertions(+), 54 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a15bcc..ac95e60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "@babel/preset-env": "^7.19.1", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", - "@kitware/vtk.js": "^26.9.9", + "@kitware/vtk.js": "^29.4.5", "@rollup/plugin-babel": "^6.0.3", "@rollup/plugin-commonjs": "24.0.1", "@rollup/plugin-eslint": "^9.0.3", @@ -55,8 +55,8 @@ "typescript": "^4.9.5" }, "peerDependencies": { - "@kitware/vtk.js": "^28.13.0", - "react": "^16.0.0" + "@kitware/vtk.js": "^29.4.5", + "react": "^18.2.0" } }, "node_modules/@ampproject/remapping": { @@ -1772,11 +1772,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", - "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz", + "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -2186,12 +2186,13 @@ } }, "node_modules/@kitware/vtk.js": { - "version": "26.9.9", - "resolved": "https://registry.npmjs.org/@kitware/vtk.js/-/vtk.js-26.9.9.tgz", - "integrity": "sha512-nGfkRxhivN5B4crMMnJkV+VTeXteTybHDbq0UvB2PnPKQYJgNm688DukIrfJqphqhjn6UwVzlXO0DaeLVEpiAg==", + "version": "29.4.5", + "resolved": "https://registry.npmjs.org/@kitware/vtk.js/-/vtk.js-29.4.5.tgz", + "integrity": "sha512-71Pp78fIdN8vjdexGCc+sTV/td/izxxNJ13S0x45p0zNQXJBWtmln597uZeLToJ4qtszTiWWsF6KnFWVoc/5OA==", "dev": true, "dependencies": { - "@babel/runtime": "7.17.9", + "@babel/runtime": "7.22.11", + "@types/webxr": "^0.5.5", "commander": "9.2.0", "d3-scale": "4.0.2", "fast-deep-equal": "^3.1.3", @@ -2217,18 +2218,6 @@ "wslink": "^1.1.0" } }, - "node_modules/@kitware/vtk.js/node_modules/@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", @@ -3115,6 +3104,12 @@ "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, + "node_modules/@types/webxr": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.11.tgz", + "integrity": "sha512-bo3K4UFBwP1RbMjuMin9cgyThD5YxjIWjQHJT7O7PVU2DB81qop7JnZAXRmrrGPbEsoHcdUmjmQDXI6zfqkVIQ==", + "dev": true + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", @@ -12261,9 +12256,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regenerator-transform": { "version": "0.15.1", @@ -15815,11 +15810,11 @@ } }, "@babel/runtime": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz", - "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz", + "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", "requires": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" } }, "@babel/template": { @@ -16143,12 +16138,13 @@ } }, "@kitware/vtk.js": { - "version": "26.9.9", - "resolved": "https://registry.npmjs.org/@kitware/vtk.js/-/vtk.js-26.9.9.tgz", - "integrity": "sha512-nGfkRxhivN5B4crMMnJkV+VTeXteTybHDbq0UvB2PnPKQYJgNm688DukIrfJqphqhjn6UwVzlXO0DaeLVEpiAg==", + "version": "29.4.5", + "resolved": "https://registry.npmjs.org/@kitware/vtk.js/-/vtk.js-29.4.5.tgz", + "integrity": "sha512-71Pp78fIdN8vjdexGCc+sTV/td/izxxNJ13S0x45p0zNQXJBWtmln597uZeLToJ4qtszTiWWsF6KnFWVoc/5OA==", "dev": true, "requires": { - "@babel/runtime": "7.17.9", + "@babel/runtime": "7.22.11", + "@types/webxr": "^0.5.5", "commander": "9.2.0", "d3-scale": "4.0.2", "fast-deep-equal": "^3.1.3", @@ -16163,17 +16159,6 @@ "webworker-promise": "0.5.0", "worker-loader": "3.0.8", "xmlbuilder2": "3.0.2" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - } } }, "@nicolo-ribaudo/eslint-scope-5-internals": { @@ -16840,6 +16825,12 @@ "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, + "@types/webxr": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.11.tgz", + "integrity": "sha512-bo3K4UFBwP1RbMjuMin9cgyThD5YxjIWjQHJT7O7PVU2DB81qop7JnZAXRmrrGPbEsoHcdUmjmQDXI6zfqkVIQ==", + "dev": true + }, "@typescript-eslint/eslint-plugin": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", @@ -23374,9 +23365,9 @@ } }, "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "regenerator-transform": { "version": "0.15.1", diff --git a/package.json b/package.json index 5f690b0..d73a186 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "dev": "rollup -c --watch" }, "peerDependencies": { - "@kitware/vtk.js": "^28.13.0", + "@kitware/vtk.js": "^29.4.5", "react": "^18.2.0" }, "devDependencies": { @@ -41,7 +41,7 @@ "@babel/preset-env": "^7.19.1", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", - "@kitware/vtk.js": "^26.9.9", + "@kitware/vtk.js": "^29.4.5", "@rollup/plugin-babel": "^6.0.3", "@rollup/plugin-commonjs": "24.0.1", "@rollup/plugin-eslint": "^9.0.3", diff --git a/usage/package-lock.json b/usage/package-lock.json index c091368..4f11139 100644 --- a/usage/package-lock.json +++ b/usage/package-lock.json @@ -30,7 +30,7 @@ "@babel/preset-env": "^7.19.1", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", - "@kitware/vtk.js": "^26.5.5", + "@kitware/vtk.js": "^29.4.5", "@rollup/plugin-babel": "^6.0.3", "@rollup/plugin-commonjs": "24.0.1", "@rollup/plugin-eslint": "^9.0.3", @@ -66,8 +66,8 @@ "typescript": "^4.9.5" }, "peerDependencies": { - "@kitware/vtk.js": "^26.5.3", - "react": "^16.0.0" + "@kitware/vtk.js": "^29.4.5", + "react": "^18.2.0" } }, "node_modules/@ampproject/remapping": { @@ -2245,7 +2245,7 @@ "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@babel/runtime": "^7.19.0", - "@kitware/vtk.js": "^26.5.5", + "@kitware/vtk.js": "^29.4.5", "@rollup/plugin-babel": "^6.0.3", "@rollup/plugin-commonjs": "24.0.1", "@rollup/plugin-eslint": "^9.0.3", From 822444f8be977c85a6f4333d0178fa096a787d8e Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 22 Feb 2024 12:24:59 -0500 Subject: [PATCH 094/110] feat(context): uniform naming and main export --- src/core/Algorithm.tsx | 8 ++++---- src/core/CellData.tsx | 4 ++-- src/core/DataArray.ts | 6 +++--- src/core/Dataset.tsx | 6 +++--- src/core/FieldData.tsx | 4 ++-- src/core/ImageData.tsx | 10 +++++++--- src/core/PointData.tsx | 4 ++-- src/core/PolyData.tsx | 10 +++++++--- src/core/Reader.tsx | 6 +++--- src/core/ShareDataSet.tsx | 14 +++++++------- src/core/VolumeController.tsx | 4 ++-- src/core/contexts.ts | 16 +++++++++++----- src/index.ts | 2 ++ 13 files changed, 55 insertions(+), 39 deletions(-) diff --git a/src/core/Algorithm.tsx b/src/core/Algorithm.tsx index cd30246..f38761f 100644 --- a/src/core/Algorithm.tsx +++ b/src/core/Algorithm.tsx @@ -8,8 +8,8 @@ import { usePrevious } from '../utils/usePrevious'; import useUnmount from '../utils/useUnmount'; import { DownstreamContext, - useDownstream, - useRepresentation, + useDownstreamContext, + useRepresentationContext, } from './contexts'; export interface AlgorithmProps extends PropsWithChildren { @@ -46,8 +46,8 @@ export default function Algorithm(props: AlgorithmProps) { return algo; }); - const representation = useRepresentation(); - const downstream = useDownstream(); + const representation = useRepresentationContext(); + const downstream = useDownstreamContext(); useEffect(() => { let algoChanged = false; diff --git a/src/core/CellData.tsx b/src/core/CellData.tsx index 2302bfb..80e43a0 100644 --- a/src/core/CellData.tsx +++ b/src/core/CellData.tsx @@ -1,8 +1,8 @@ import { PropsWithChildren, useCallback } from 'react'; -import { FieldDataContext, useDataset } from './contexts'; +import { FieldDataContext, useDatasetContext } from './contexts'; export default function CellData(props: PropsWithChildren) { - const dataset = useDataset(); + const dataset = useDatasetContext(); const getCellData = useCallback(() => { return dataset.getDataSet().getCellData(); }, [dataset]); diff --git a/src/core/DataArray.ts b/src/core/DataArray.ts index e66bb46..c3c9029 100644 --- a/src/core/DataArray.ts +++ b/src/core/DataArray.ts @@ -8,7 +8,7 @@ import deletionRegistry from '../utils/DeletionRegistry'; import useGetterRef from '../utils/useGetterRef'; import { usePrevious } from '../utils/usePrevious'; import useUnmount from '../utils/useUnmount'; -import { useDataset, useFieldData } from './contexts'; +import { useDatasetContext, useFieldDataContext } from './contexts'; export interface DataArrayProps { /** @@ -61,8 +61,8 @@ export default function DataArray(props: DataArrayProps) { return da; }); - const getFieldData = useFieldData(); - const dataset = useDataset(); + const getFieldData = useFieldDataContext(); + const dataset = useDatasetContext(); const { registration = DefaultProps.registration } = props; diff --git a/src/core/Dataset.tsx b/src/core/Dataset.tsx index cd963c5..ea4e19d 100644 --- a/src/core/Dataset.tsx +++ b/src/core/Dataset.tsx @@ -1,14 +1,14 @@ import { vtkObject } from '@kitware/vtk.js/interfaces'; import { useEffect } from 'react'; -import { useDownstream, useRepresentation } from './contexts'; +import { useDownstreamContext, useRepresentationContext } from './contexts'; export interface DatasetProps { dataset: vtkObject | null; } export default function Dataset(props: DatasetProps) { - const representation = useRepresentation(); - const downstream = useDownstream(); + const representation = useRepresentationContext(); + const downstream = useDownstreamContext(); const { dataset } = props; diff --git a/src/core/FieldData.tsx b/src/core/FieldData.tsx index 3a55dda..0dfc31c 100644 --- a/src/core/FieldData.tsx +++ b/src/core/FieldData.tsx @@ -1,8 +1,8 @@ import { PropsWithChildren, useCallback } from 'react'; -import { FieldDataContext, useDataset } from './contexts'; +import { FieldDataContext, useDatasetContext } from './contexts'; export default function FieldData(props: PropsWithChildren) { - const dataset = useDataset(); + const dataset = useDatasetContext(); const getFieldData = useCallback(() => { return dataset.getDataSet().getFieldData(); }, [dataset]); diff --git a/src/core/ImageData.tsx b/src/core/ImageData.tsx index 21f0581..5a8b2d5 100644 --- a/src/core/ImageData.tsx +++ b/src/core/ImageData.tsx @@ -11,7 +11,11 @@ import { IDataset } from '../types'; import deletionRegistry from '../utils/DeletionRegistry'; import useGetterRef from '../utils/useGetterRef'; import useUnmount from '../utils/useUnmount'; -import { DatasetContext, useDownstream, useRepresentation } from './contexts'; +import { + DatasetContext, + useDownstreamContext, + useRepresentationContext, +} from './contexts'; export interface ImageDataProps extends PropsWithChildren { /** @@ -63,8 +67,8 @@ export default forwardRef(function PolyData(props: ImageDataProps, fwdRef) { return im; }); - const representation = useRepresentation(); - const downstream = useDownstream(); + const representation = useRepresentationContext(); + const downstream = useDownstreamContext(); // dataset API const dataset = useMemo>( diff --git a/src/core/PointData.tsx b/src/core/PointData.tsx index c26cbcb..4cabe7d 100644 --- a/src/core/PointData.tsx +++ b/src/core/PointData.tsx @@ -1,8 +1,8 @@ import { PropsWithChildren, useCallback } from 'react'; -import { FieldDataContext, useDataset } from './contexts'; +import { FieldDataContext, useDatasetContext } from './contexts'; export default function PointData(props: PropsWithChildren) { - const dataset = useDataset(); + const dataset = useDatasetContext(); const getPointData = useCallback(() => { return dataset.getDataSet().getPointData(); }, [dataset]); diff --git a/src/core/PolyData.tsx b/src/core/PolyData.tsx index 5f7c5bb..1a100bc 100644 --- a/src/core/PolyData.tsx +++ b/src/core/PolyData.tsx @@ -17,7 +17,11 @@ import deletionRegistry from '../utils/DeletionRegistry'; import useGetterRef from '../utils/useGetterRef'; import { usePrevious } from '../utils/usePrevious'; import useUnmount from '../utils/useUnmount'; -import { DatasetContext, useDownstream, useRepresentation } from './contexts'; +import { + DatasetContext, + useDownstreamContext, + useRepresentationContext, +} from './contexts'; export interface PolyDataProps extends PropsWithChildren { /** @@ -103,8 +107,8 @@ export default forwardRef(function PolyData(props: PolyDataProps, fwdRef) { return pd; }); - const representation = useRepresentation(); - const downstream = useDownstream(); + const representation = useRepresentationContext(); + const downstream = useDownstreamContext(); // dataset API const dataset = useMemo>( diff --git a/src/core/Reader.tsx b/src/core/Reader.tsx index 1e46218..2b82b2f 100644 --- a/src/core/Reader.tsx +++ b/src/core/Reader.tsx @@ -4,7 +4,7 @@ import vtk from '@kitware/vtk.js/vtk'; import { PropsWithChildren, useCallback, useEffect, useRef } from 'react'; import { VtkConstructor } from '../types'; import deletionRegistry from '../utils/DeletionRegistry'; -import { useDownstream, useRepresentation } from './contexts'; +import { useDownstreamContext, useRepresentationContext } from './contexts'; export interface ReaderProps extends PropsWithChildren { /** @@ -71,7 +71,7 @@ export default function Reader(props: ReaderProps) { ); } - const representation = useRepresentation(); + const representation = useRepresentationContext(); const createReader = useCallback(() => { if (typeof vtkClass === 'string') { @@ -138,7 +138,7 @@ export default function Reader(props: ReaderProps) { // --- downstream registration --- // - const downstream = useDownstream(); + const downstream = useDownstreamContext(); const { port } = props; useEffect(() => { diff --git a/src/core/ShareDataSet.tsx b/src/core/ShareDataSet.tsx index 2e1172d..a09bc2b 100644 --- a/src/core/ShareDataSet.tsx +++ b/src/core/ShareDataSet.tsx @@ -27,9 +27,9 @@ import { DownstreamContext, RepresentationContext, ShareDataSetContext, - useDownstream, - useRepresentation, - useShareDataSet, + useDownstreamContext, + useRepresentationContext, + useShareDataSetContext, } from './contexts'; import useDataEvents from './modules/useDataEvents'; @@ -138,7 +138,7 @@ export interface RegisterDataSetProps extends PropsWithChildren { } export function RegisterDataSet(props: RegisterDataSetProps) { - const share = useShareDataSet(); + const share = useShareDataSetContext(); const { id } = props; // --- handle registrations --- // @@ -206,10 +206,10 @@ export interface UseDataSetProps extends PropsWithChildren { export function UseDataSet(props: UseDataSetProps) { const { id, port = 0 } = props; - const share = useShareDataSet(); + const share = useShareDataSetContext(); // TODO if useDataSet is input to an algorithm, should representation be null? - const representation = useRepresentation(); - const downstream = useDownstream(); + const representation = useRepresentationContext(); + const downstream = useDownstreamContext(); useEffect(() => { return share.onDataAvailable(id, (ds) => { diff --git a/src/core/VolumeController.tsx b/src/core/VolumeController.tsx index 4a251a7..2843273 100644 --- a/src/core/VolumeController.tsx +++ b/src/core/VolumeController.tsx @@ -5,7 +5,7 @@ import { Contexts } from '..'; import deletionRegistry from '../utils/DeletionRegistry'; import useGetterRef from '../utils/useGetterRef'; import useUnmount from '../utils/useUnmount'; -import { useRepresentation } from './contexts'; +import { useRepresentationContext } from './contexts'; export interface VolumeControllerProps { /** @@ -35,7 +35,7 @@ export default function VolumeController(props: VolumeControllerProps) { const view = useContext(Contexts.ViewContext); if (!view) throw new Error('Need view context'); - const volumeRep = useRepresentation(); + const volumeRep = useRepresentationContext(); const updateWidget = useCallback(() => { const volume = volumeRep.getMapper()?.getInputData() as diff --git a/src/core/contexts.ts b/src/core/contexts.ts index 3a69ffa..64ae9ec 100644 --- a/src/core/contexts.ts +++ b/src/core/contexts.ts @@ -37,6 +37,12 @@ export const MultiViewRootContext = createContext(false); export const ViewContext = createContext(null); +export function useViewContext() { + const view = useContext(ViewContext); + if (!view) throw new Error('No View context!'); + return view; +} + export function useRenderWindowContext() { const rw = useContext(RenderWindowContext); if (!rw) throw new Error('No RenderWindow context!'); @@ -49,31 +55,31 @@ export function useRendererContext() { return r; } -export function useFieldData() { +export function useFieldDataContext() { const fd = useContext(FieldDataContext); if (!fd) throw new Error('No FieldData context!'); return fd as () => T; } -export function useDataset() { +export function useDatasetContext() { const ds = useContext(DatasetContext); if (!ds) throw new Error('No Dataset context!'); return ds as IDataset; } -export function useRepresentation() { +export function useRepresentationContext() { const rep = useContext(RepresentationContext); if (!rep) throw new Error('No Representation context!'); return rep; } -export function useDownstream() { +export function useDownstreamContext() { const ds = useContext(DownstreamContext); if (!ds) throw new Error('No Downstream context!'); return ds; } -export function useShareDataSet() { +export function useShareDataSetContext() { const share = useContext(ShareDataSetContext); if (!share) throw new Error('No ShareDataSet context!'); return share; diff --git a/src/index.ts b/src/index.ts index 46ccee6..68fe1f6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,6 +6,7 @@ import '@kitware/vtk.js/Rendering/OpenGL/Profiles/Volume'; export { default as Algorithm } from './core/Algorithm'; export type { AlgorithmProps } from './core/Algorithm'; export { default as CellData } from './core/CellData'; +export * from './core/contexts'; export * as Contexts from './core/contexts'; export { default as DataArray } from './core/DataArray'; export type { DataArrayProps } from './core/DataArray'; @@ -46,3 +47,4 @@ export { default as View } from './core/View'; export type { ViewProps } from './core/View'; export { default as VolumeController } from './core/VolumeController'; export { default as VolumeRepresentation } from './core/VolumeRepresentation'; +export * from './suspense'; From e31d8036b006283bbf7921c24254cb375e1b32f9 Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 28 Feb 2024 13:06:33 -0500 Subject: [PATCH 095/110] fix(ParentedView): switch interactor on capture --- src/core/internal/ParentedView.tsx | 36 +++++++++++++++--------------- src/global.d.ts | 1 + 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/core/internal/ParentedView.tsx b/src/core/internal/ParentedView.tsx index b427cd5..f9d7559 100644 --- a/src/core/internal/ParentedView.tsx +++ b/src/core/internal/ParentedView.tsx @@ -91,11 +91,9 @@ const ParentedView = forwardRef(function ParentedView( const rendererAPI = rendererRef.current; if (!rendererAPI) return false; - const interactor = getInteractor(); + const interactor = getInteractor() as FixedVTKRenderWindowInteractor; - (interactor as FixedVTKRenderWindowInteractor).setCurrentRenderer( - rendererAPI.get() - ); + interactor.setCurrentRenderer(rendererAPI.get()); interactor.setInteractorStyle(getInteractorStyle()); const oldContainer = interactor.getContainer(); @@ -108,21 +106,23 @@ const ParentedView = forwardRef(function ParentedView( // Use wheel events to cover the posibility of interacting // with an out-of-focus browser window. - useEventListener(containerRef, 'wheel', (ev: WheelEvent) => { - if (switchTarget()) { - // forward wheel-event to interactor - const interactor = getInteractor(); - interactor.handleWheel(ev); - } - }); + useEventListener( + containerRef, + 'wheel', + () => { + switchTarget(); + }, + { capture: true } + ); - useEventListener(containerRef, 'pointerenter', (ev: PointerEvent) => { - if (switchTarget()) { - // forward pointer-event to interactor - const interactor = getInteractor(); - interactor.handlePointerEnter(ev); - } - }); + useEventListener( + containerRef, + 'pointerenter', + () => { + switchTarget(); + }, + { capture: true } + ); // --- resize handling --- // diff --git a/src/global.d.ts b/src/global.d.ts index 56aed86..b54bceb 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -6,6 +6,7 @@ declare module '@kitware/vtk.js/type-patches' { export interface FixedVTKRenderWindowInteractor extends vtkRenderWindowInteractor { setCurrentRenderer(ren: vtkRenderer): void; + setContainer(el: HTMLElement | null): boolean; } export interface VtkRendererEvent { From d47f388ea5462f1841d90bb984efa5f5ab9c8560 Mon Sep 17 00:00:00 2001 From: Forrest Date: Thu, 22 Feb 2024 12:30:49 -0500 Subject: [PATCH 096/110] feat: add view mounted suspense hook Add an example usage for how to use the useViewReadySuspense hook. --- src/core/View.tsx | 1 + src/core/internal/ParentedView.tsx | 9 ++++ src/core/internal/SingleView.tsx | 10 +++- src/core/internal/events.ts | 33 +++++++++++++ src/suspense/index.ts | 1 + src/suspense/useViewReadySuspense.ts | 38 +++++++++++++++ src/types.ts | 1 + src/utils/deferred.ts | 12 +++++ usage/src/App.jsx | 4 ++ usage/src/Suspense/GeometrySuspense.jsx | 63 +++++++++++++++++++++++++ 10 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 src/core/internal/events.ts create mode 100644 src/suspense/index.ts create mode 100644 src/suspense/useViewReadySuspense.ts create mode 100644 src/utils/deferred.ts create mode 100644 usage/src/Suspense/GeometrySuspense.jsx diff --git a/src/core/View.tsx b/src/core/View.tsx index 047e5d7..8a57f7d 100644 --- a/src/core/View.tsx +++ b/src/core/View.tsx @@ -24,6 +24,7 @@ export default forwardRef(function View(props: ViewProps, fwdRef) { multiViewRoot ? parentedViewRef.current : singleViewRef.current; return { isInMultiViewRoot: () => multiViewRoot, + isMounted: () => getView()?.isMounted() ?? false, getViewContainer: () => getView()?.getViewContainer() ?? null, getOpenGLRenderWindow: () => getView()?.getOpenGLRenderWindow() ?? null, getRenderWindow: () => getView()?.getRenderWindow() ?? null, diff --git a/src/core/internal/ParentedView.tsx b/src/core/internal/ParentedView.tsx index b427cd5..3c9235a 100644 --- a/src/core/internal/ParentedView.tsx +++ b/src/core/internal/ParentedView.tsx @@ -27,6 +27,7 @@ import { } from '../modules/useInteractorStyle'; import useViewEvents, { ViewEvents } from '../modules/useViewEvents'; import Renderer from '../Renderer'; +import { viewMountedEvent } from './events'; import { DefaultProps, ViewProps } from './view-shared'; /** @@ -172,9 +173,16 @@ const ParentedView = forwardRef(function ParentedView( // --- api --- // + let mounted = false; + useMount(() => { + mounted = true; + viewMountedEvent.trigger(); + }); + const api = useMemo( () => ({ isInMultiViewRoot: () => true, + isMounted: () => mounted, getViewContainer: () => containerRef.current, getOpenGLRenderWindow: () => openGLRenderWindowAPI, getRenderWindow: () => renderWindowAPI, @@ -187,6 +195,7 @@ const ParentedView = forwardRef(function ParentedView( rendererRef.current?.resetCamera(boundsToUse), }), [ + mounted, openGLRenderWindowAPI, renderWindowAPI, getInteractorStyle, diff --git a/src/core/internal/SingleView.tsx b/src/core/internal/SingleView.tsx index 605f30b..808af5f 100644 --- a/src/core/internal/SingleView.tsx +++ b/src/core/internal/SingleView.tsx @@ -24,6 +24,7 @@ import useViewEvents, { ViewEvents } from '../modules/useViewEvents'; import OpenGLRenderWindow from '../OpenGLRenderWindow'; import Renderer from '../Renderer'; import RenderWindow from '../RenderWindow'; +import { viewMountedEvent } from './events'; import { DefaultProps, ViewProps } from './view-shared'; /** @@ -84,9 +85,16 @@ const SingleView = forwardRef(function SingleView(props: ViewProps, fwdRef) { // --- api --- // + let mounted = false; + useMount(() => { + mounted = true; + viewMountedEvent.trigger(); + }); + const api = useMemo( () => ({ isInMultiViewRoot: () => false, + isMounted: () => mounted, getViewContainer: () => openGLRenderWindowRef.current?.getContainer() ?? null, getOpenGLRenderWindow: () => openGLRenderWindowRef.current, @@ -99,7 +107,7 @@ const SingleView = forwardRef(function SingleView(props: ViewProps, fwdRef) { resetCamera: (boundsToUse?: Bounds) => rendererRef.current?.resetCamera(boundsToUse), }), - [getInteractorStyle, setInteractorStyle] + [mounted, getInteractorStyle, setInteractorStyle] ); useImperativeHandle(fwdRef, () => api); diff --git a/src/core/internal/events.ts b/src/core/internal/events.ts new file mode 100644 index 0000000..b6a78a1 --- /dev/null +++ b/src/core/internal/events.ts @@ -0,0 +1,33 @@ +export type EventListener = (...args: any[]) => void; + +function createEvent() { + const callbacks: EventListener[] = []; + + const off = (callback: EventListener) => { + const idx = callbacks.indexOf(callback); + if (idx === -1) return; + callbacks.splice(idx, 1); + }; + + const on = (callback: EventListener) => { + callbacks.push(callback); + return () => off(callback); + }; + + const once = (callback: EventListener) => { + const stop = on(() => { + stop(); + callback(); + }); + }; + + const trigger = (...args: any[]) => { + callbacks.forEach((cb) => { + cb(...args); + }); + }; + + return { off, on, once, trigger }; +} + +export const viewMountedEvent = createEvent(); diff --git a/src/suspense/index.ts b/src/suspense/index.ts new file mode 100644 index 0000000..31d9826 --- /dev/null +++ b/src/suspense/index.ts @@ -0,0 +1 @@ +export * from './useViewReadySuspense'; diff --git a/src/suspense/useViewReadySuspense.ts b/src/suspense/useViewReadySuspense.ts new file mode 100644 index 0000000..80ae904 --- /dev/null +++ b/src/suspense/useViewReadySuspense.ts @@ -0,0 +1,38 @@ +import { useContext, useRef } from 'react'; +import { Contexts } from '..'; +import { viewMountedEvent } from '../core/internal/events'; +import { makeDeferred } from '../utils/deferred'; + +type Status = 'pending' | 'error' | 'success'; + +/** + * A suspense-aware hook that waits for the containing View to be mounted before evaluating the getter. + * @param getter + * @returns + */ +export function useViewReadySuspense(getter: () => T): T { + const view = useContext(Contexts.ViewContext); + if (!view) throw new Error('No view context'); + + let status = 'pending' as Status; + const deferred = useRef(makeDeferred()); + + if (view.isMounted()) { + status = 'success'; + } else { + viewMountedEvent.once(() => { + status = 'success'; + deferred.current.resolve(); + }); + } + + switch (status) { + case 'success': + return getter(); + case 'pending': + throw deferred.current.promise; + case 'error': + default: + throw new Error('Unexpected unreachable code execution'); + } +} diff --git a/src/types.ts b/src/types.ts index 16e3c13..5b251c4 100644 --- a/src/types.ts +++ b/src/types.ts @@ -56,6 +56,7 @@ export interface IRenderer { export interface IView { isInMultiViewRoot(): boolean; + isMounted(): boolean; getViewContainer(): HTMLElement | null; getRenderer(): IRenderer | null; getRenderWindow(): IRenderWindow | null; diff --git a/src/utils/deferred.ts b/src/utils/deferred.ts new file mode 100644 index 0000000..1cd2760 --- /dev/null +++ b/src/utils/deferred.ts @@ -0,0 +1,12 @@ +// eslint-disable-next-line @typescript-eslint/no-empty-function +const empty = () => {}; + +export function makeDeferred() { + let resolve: (value: T) => void = empty; + let reject: (error: unknown) => void = empty; + const promise = new Promise((_resolve, _reject) => { + resolve = _resolve; + reject = _reject; + }); + return { resolve, reject, promise }; +} diff --git a/usage/src/App.jsx b/usage/src/App.jsx index f00ed69..b030b4b 100644 --- a/usage/src/App.jsx +++ b/usage/src/App.jsx @@ -45,6 +45,10 @@ const demos = new Map([ lazy(() => import('./Tests/ChangeInteractorStyle')), ], ['MultiView', lazy(() => import('./MultiView'))], + [ + 'Suspense/GeometrySuspense', + lazy(() => import('./Suspense/GeometrySuspense')), + ], ]); function App() { diff --git a/usage/src/Suspense/GeometrySuspense.jsx b/usage/src/Suspense/GeometrySuspense.jsx new file mode 100644 index 0000000..9c53902 --- /dev/null +++ b/usage/src/Suspense/GeometrySuspense.jsx @@ -0,0 +1,63 @@ +import { Suspense, useRef } from 'react'; + +import { + Algorithm, + GeometryRepresentation, + useViewContext, + useViewReadySuspense, + View, +} from 'react-vtk-js'; + +import vtkConeSource from '@kitware/vtk.js/Filters/Sources/ConeSource'; + +const styles = { + position: 'relative', + zIndex: 10, + textAlign: 'center', + color: 'white', +}; + +function Inner() { + const view = useViewContext(); + const renderer = view.getRenderer(); + return ( +
+ Without Suspense: has renderer = {String(!!renderer)} +
+ ); +} + +function InnerSuspense() { + const useRenderer = () => useViewContext().getRenderer(); + const renderer = useViewReadySuspense(useRenderer); + return ( +
With Suspense: has renderer = {String(!!renderer)}
+ ); +} + +// React complains about unique key prop but I don't see why +function Example() { + const view = useRef(); + const rep = useRef(); + + return ( +
+ + + + + + + + + +
+ ); +} + +export default Example; From 1ccc505c818d808d78bce3953c49c93dc9ce56a7 Mon Sep 17 00:00:00 2001 From: Sankhesh Jhaveri Date: Sun, 14 Apr 2024 23:00:47 -0400 Subject: [PATCH 097/110] Example of PET-CT fusion overlay rendering --- usage/src/App.jsx | 1 + usage/src/Volume/PET_CT_Overlay.css | 73 ++++++++ usage/src/Volume/PET_CT_Overlay.jsx | 257 ++++++++++++++++++++++++++++ 3 files changed, 331 insertions(+) create mode 100644 usage/src/Volume/PET_CT_Overlay.css create mode 100644 usage/src/Volume/PET_CT_Overlay.jsx diff --git a/usage/src/App.jsx b/usage/src/App.jsx index b030b4b..86fdcd9 100644 --- a/usage/src/App.jsx +++ b/usage/src/App.jsx @@ -32,6 +32,7 @@ const demos = new Map([ 'Volume/ImageSeriesRendering', lazy(() => import('./Volume/ImageSeriesRendering')), ], + ['Volume/PET_CT_Overlay', lazy(() => import('./Volume/PET_CT_Overlay'))], ['Tests/PropertyUpdate', lazy(() => import('./Tests/PropertyUpdate'))], ['Tests/CameraTest', lazy(() => import('./Tests/CameraTest'))], ['Tests/ShareGeometry', lazy(() => import('./Tests/ShareGeometry'))], diff --git a/usage/src/Volume/PET_CT_Overlay.css b/usage/src/Volume/PET_CT_Overlay.css new file mode 100644 index 0000000..5964223 --- /dev/null +++ b/usage/src/Volume/PET_CT_Overlay.css @@ -0,0 +1,73 @@ +label { + color: lightGray; +} + +input[type=range] { + -webkit-appearance: none; +} + +input[type=range]::-webkit-slider-runnable-track { + width: 300px; + height: 5px; + background: #ddd; + border: none; + border-radius: 5px; +} + + +input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + border: none; + height: 15px; + width: 6px; + border-radius: 50%; + background: goldenrod; + margin-top: -4px; +} + + +input[type=range]:focus { + outline: none; +} + +input[type=range]:focus::-webkit-slider-runnable-track { + background: #ccc; +} + + +input[type=range][orient='vertical'] { + position: absolute; + zIndex: 1000; + margin: 0; + padding: 0; + width: 2500%; + height: 0.5em; + transform: translate(-50%, -50%) rotate(-90deg); + background: transparent; + font: 1em/1 arial, sans-serif; +} + +.loader { + border: 16px solid #f3f3f3; + border-radius: 50%; + border-top: 16px solid blue; + border-right: 16px solid green; + border-bottom: 16px solid red; + width: 120px; + height: 120px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} +@-webkit-keyframes spin { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); } +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} diff --git a/usage/src/Volume/PET_CT_Overlay.jsx b/usage/src/Volume/PET_CT_Overlay.jsx new file mode 100644 index 0000000..a8847c1 --- /dev/null +++ b/usage/src/Volume/PET_CT_Overlay.jsx @@ -0,0 +1,257 @@ +import vtkITKHelper from '@kitware/vtk.js/Common/DataModel/ITKHelper'; +import vtkLiteHttpDataAccessHelper from '@kitware/vtk.js/IO/Core/DataAccessHelper/LiteHttpDataAccessHelper'; +import vtkResourceLoader from '@kitware/vtk.js/IO/Core/ResourceLoader'; +import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps.js'; +import { unzipSync } from 'fflate'; +import { useContext, useEffect, useState } from 'react'; +import './PET_CT_Overlay.css'; + +import { + Contexts, + Dataset, + RegisterDataSet, + ShareDataSetRoot, + SliceRepresentation, + UseDataSet, + View, +} from 'react-vtk-js'; + +function Slider(props) { + const view = useContext(Contexts.ViewContext); + const onChange = (e) => { + const value = Number(e.currentTarget.value); + props.setValue(value); + setTimeout(view.renderView, 0); + }; + return ( + + ); +} + +function DropDown(props) { + const view = useContext(Contexts.ViewContext); + function onChange(e) { + const value = e.currentTarget.value; + props.setValue(value); + setTimeout(view.renderView, 0); + } + return ( +
+ + +
+ ); +} + +const loadData = async () => { + console.log('Loading itk module...'); + loadData.setStatusText('Loading itk module...'); + if (!window.itk) { + await vtkResourceLoader.loadScript( + 'https://cdn.jsdelivr.net/npm/itk-wasm@1.0.0-b.8/dist/umd/itk-wasm.js' + ); + } + + console.log('Fetching/downloading the input file, please wait...'); + loadData.setStatusText('Loading data, please wait...'); + const zipFileData = await vtkLiteHttpDataAccessHelper.fetchBinary( + 'https://data.kitware.com/api/v1/folder/661ad10a5165b19d36c87220/download' + ); + + console.log('Fetching/downloading input file done!'); + loadData.setStatusText('Download complete!'); + + const zipFileDataArray = new Uint8Array(zipFileData); + const decompressedFiles = unzipSync(zipFileDataArray); + const ctDCMFiles = []; + const ptDCMFiles = []; + const PTRe = /PET AC/; + const CTRe = /CT IMAGES/; + Object.keys(decompressedFiles).forEach((relativePath) => { + if (relativePath.endsWith('.dcm')) { + if (PTRe.test(relativePath)) { + ptDCMFiles.push(decompressedFiles[relativePath].buffer); + } else if (CTRe.test(relativePath)) { + ctDCMFiles.push(decompressedFiles[relativePath].buffer); + } + } + }); + + let ctImageData = null; + let ptImageData = null; + if (window.itk) { + const { image: ctitkImage, webWorkerPool: ctWebWorkers } = + await window.itk.readImageDICOMArrayBufferSeries(ctDCMFiles); + ctWebWorkers.terminateWorkers(); + ctImageData = vtkITKHelper.convertItkToVtkImage(ctitkImage); + const { image: ptitkImage, webWorkerPool: ptWebWorkers } = + await window.itk.readImageDICOMArrayBufferSeries(ptDCMFiles); + ptWebWorkers.terminateWorkers(); + ptImageData = vtkITKHelper.convertItkToVtkImage(ptitkImage); + } + loadData.setMaxSlicingValue(ctImageData.getDimensions()[2] - 1); + loadData.setStatusText(''); + loader.hidden = 'hidden'; + return [ctImageData, ptImageData]; +}; + +function Example(props) { + const [statusText, setStatusText] = useState('Loading data, please wait ...'); + const [kSlice, setKSlice] = useState(0); + const [colorWindow, setColorWindow] = useState(2048); + const [colorLevel, setColorLevel] = useState(0); + const [colorPreset, setColorPreset] = useState('jet'); + const [opacity, setOpacity] = useState(0.4); + const [maxKSlice, setMaxKSlice] = useState(310); + loadData.setMaxSlicingValue = setMaxKSlice; + loadData.setStatusText = setStatusText; + + useEffect(() => { + loadData().then(([ctData, ptData]) => { + window.ctData = ctData; + window.ptData = ptData; + setKSlice(155); + }); + }, []); + + return ( +
+ + + + + + + + + + + + + + +
+ + + + + + + + +
+ ); +} + +export default Example; From 986d52b75e625a18e2ea73fe0ca6598c5bc14dc5 Mon Sep 17 00:00:00 2001 From: Sankhesh Jhaveri Date: Mon, 15 Apr 2024 00:28:02 -0400 Subject: [PATCH 098/110] Add coronal view to the PET-CT overlay example --- usage/src/Volume/PET_CT_Overlay.css | 10 +- usage/src/Volume/PET_CT_Overlay.jsx | 153 +++++++++++++++++++++------- 2 files changed, 121 insertions(+), 42 deletions(-) diff --git a/usage/src/Volume/PET_CT_Overlay.css b/usage/src/Volume/PET_CT_Overlay.css index 5964223..0560c90 100644 --- a/usage/src/Volume/PET_CT_Overlay.css +++ b/usage/src/Volume/PET_CT_Overlay.css @@ -8,7 +8,7 @@ input[type=range] { input[type=range]::-webkit-slider-runnable-track { width: 300px; - height: 5px; + height: 3px; background: #ddd; border: none; border-radius: 5px; @@ -18,11 +18,11 @@ input[type=range]::-webkit-slider-runnable-track { input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; border: none; - height: 15px; - width: 6px; + height: 25px; + width: 8px; border-radius: 50%; background: goldenrod; - margin-top: -4px; + margin-top: -10px; } @@ -39,7 +39,7 @@ input[type=range][orient='vertical'] { position: absolute; zIndex: 1000; margin: 0; - padding: 0; + padding: 5; width: 2500%; height: 0.5em; transform: translate(-50%, -50%) rotate(-90deg); diff --git a/usage/src/Volume/PET_CT_Overlay.jsx b/usage/src/Volume/PET_CT_Overlay.jsx index a8847c1..e7a9d4b 100644 --- a/usage/src/Volume/PET_CT_Overlay.jsx +++ b/usage/src/Volume/PET_CT_Overlay.jsx @@ -9,6 +9,7 @@ import './PET_CT_Overlay.css'; import { Contexts, Dataset, + MultiViewRoot, RegisterDataSet, ShareDataSetRoot, SliceRepresentation, @@ -21,7 +22,10 @@ function Slider(props) { const onChange = (e) => { const value = Number(e.currentTarget.value); props.setValue(value); - setTimeout(view.renderView, 0); + if (props.setCTValue) { + props.setCTValue(value * 4); + } + setTimeout(view?.renderView, 0); }; return (
-
+ ); } From c13170cff3c6d01fdbc8576ad5da9319cae16e95 Mon Sep 17 00:00:00 2001 From: Sankhesh Jhaveri Date: Mon, 15 Apr 2024 10:34:27 -0400 Subject: [PATCH 099/110] Use the PET data scalar range for color mapping --- usage/src/Volume/PET_CT_Overlay.jsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/usage/src/Volume/PET_CT_Overlay.jsx b/usage/src/Volume/PET_CT_Overlay.jsx index e7a9d4b..c034727 100644 --- a/usage/src/Volume/PET_CT_Overlay.jsx +++ b/usage/src/Volume/PET_CT_Overlay.jsx @@ -140,9 +140,11 @@ const loadData = async () => { ptWebWorkers.terminateWorkers(); ptImageData = vtkITKHelper.convertItkToVtkImage(ptitkImage); } - console.log(ctImageData.getDimensions(), ptImageData.getDimensions()); loadData.setMaxKSlice(ctImageData.getDimensions()[2] - 1); loadData.setMaxJSlice(ptImageData.getDimensions()[1] - 1); + const range = ptImageData?.getPointData()?.getScalars()?.getRange(); + loadData.setPTColorWindow(range[1] - range[0]); + loadData.setPTColorLevel((range[1] + range[0]) * 0.5); loadData.setStatusText(''); loader.hidden = 'hidden'; return [ctImageData, ptImageData]; @@ -155,6 +157,8 @@ function Example(props) { const [ctjSlice, setCTJSlice] = useState(0); const [colorWindow, setColorWindow] = useState(2048); const [colorLevel, setColorLevel] = useState(0); + const [ptcolorWindow, setPTColorWindow] = useState(69222); + const [ptcolorLevel, setPTColorLevel] = useState(34611); const [colorPreset, setColorPreset] = useState('jet'); const [opacity, setOpacity] = useState(0.4); const [maxKSlice, setMaxKSlice] = useState(310); @@ -162,6 +166,8 @@ function Example(props) { loadData.setMaxKSlice = setMaxKSlice; loadData.setMaxJSlice = setMaxJSlice; loadData.setStatusText = setStatusText; + loadData.setPTColorWindow = setPTColorWindow; + loadData.setPTColorLevel = setPTColorLevel; useEffect(() => { loadData().then(([ctData, ptData]) => { @@ -263,8 +269,11 @@ function Example(props) { kSlice={kSlice} property={{ opacity, + colorWindow: ptcolorWindow, + colorLevel: ptcolorLevel, }} colorMapPreset={colorPreset} + useLookupTableScalarRange={false} > @@ -311,8 +320,11 @@ function Example(props) { jSlice={jSlice} property={{ opacity, + colorWindow: ptcolorWindow, + colorLevel: ptcolorLevel, }} colorMapPreset={colorPreset} + useLookupTableScalarRange={false} > From 8475197ce34caca917196a8d5b9a4dd90ffd8009 Mon Sep 17 00:00:00 2001 From: Sankhesh Jhaveri Date: Mon, 15 Apr 2024 11:27:40 -0400 Subject: [PATCH 100/110] Ensure PET data is always over using coincident offset --- usage/src/Volume/PET_CT_Overlay.jsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/usage/src/Volume/PET_CT_Overlay.jsx b/usage/src/Volume/PET_CT_Overlay.jsx index c034727..a1b9f61 100644 --- a/usage/src/Volume/PET_CT_Overlay.jsx +++ b/usage/src/Volume/PET_CT_Overlay.jsx @@ -267,6 +267,13 @@ function Example(props) { /> Date: Mon, 22 Apr 2024 16:12:44 -0400 Subject: [PATCH 101/110] fix(Picking): guard against unmounted state --- src/core/Picking.ts | 15 ++++++++++++--- src/utils/useIsMounted.ts | 17 +++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 src/utils/useIsMounted.ts diff --git a/src/core/Picking.ts b/src/core/Picking.ts index 8ac523e..8d25cbd 100644 --- a/src/core/Picking.ts +++ b/src/core/Picking.ts @@ -13,6 +13,7 @@ import { import deletionRegistry from '../utils/DeletionRegistry'; import useDebounce from '../utils/useDebounce'; import useGetterRef from '../utils/useGetterRef'; +import { useIsMounted } from '../utils/useIsMounted'; import useMount from '../utils/useMount'; import useUnmount from '../utils/useUnmount'; import { @@ -136,6 +137,8 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { }; }); + const isMounted = useIsMounted(); + // --- Props --- // const { @@ -152,6 +155,8 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { const pickClosest = useCallback( (xp: number, yp: number, tolerance: number): PickResult[] => { + if (!isMounted.current) return []; + const x1 = Math.floor(xp - tolerance); const y1 = Math.floor(yp - tolerance); const x2 = Math.ceil(xp + tolerance); @@ -218,11 +223,13 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { }, ] as PickResult[]; }, - [rendererAPI, openGLRenderWindowAPI, getSelector] + [rendererAPI, openGLRenderWindowAPI, isMounted, getSelector] ); const pick = useCallback( (x1: number, y1: number, x2: number, y2: number): PickResult[] => { + if (!isMounted.current) return []; + const selector = getSelector(); const openGLRenderWindow = openGLRenderWindowAPI.get(); const renderer = rendererAPI.get(); @@ -277,7 +284,7 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { }) .filter(Boolean) as PickResult[]; }, - [rendererAPI, openGLRenderWindowAPI, getSelector] + [rendererAPI, openGLRenderWindowAPI, isMounted, getSelector] ); const pickWithFrustum = useCallback( @@ -287,6 +294,8 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { x2: number, y2: number ): FrustumPickResult | null => { + if (!isMounted.current) return null; + const selector = getSelector(); const openGLRenderWindow = openGLRenderWindowAPI.get(); const renderer = rendererAPI.get(); @@ -324,7 +333,7 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { }); return { frustum, representationIds }; }, - [rendererAPI, openGLRenderWindowAPI, getSelector] + [rendererAPI, openGLRenderWindowAPI, isMounted, getSelector] ); const api = useMemo( diff --git a/src/utils/useIsMounted.ts b/src/utils/useIsMounted.ts new file mode 100644 index 0000000..a13403f --- /dev/null +++ b/src/utils/useIsMounted.ts @@ -0,0 +1,17 @@ +import { useRef } from 'react'; +import useMount from './useMount'; +import useUnmount from './useUnmount'; + +export function useIsMounted() { + const isMounted = useRef(false); + + useMount(() => { + isMounted.current = true; + }); + + useUnmount(() => { + isMounted.current = false; + }); + + return isMounted; +} From 4d036281ebdad0dc2be72e7625ac8ef7620d2629 Mon Sep 17 00:00:00 2001 From: Forrest Date: Mon, 22 Apr 2024 18:18:22 -0400 Subject: [PATCH 102/110] fix(Picking): guard against deleted selector --- src/core/Picking.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/core/Picking.ts b/src/core/Picking.ts index 8d25cbd..0aa0059 100644 --- a/src/core/Picking.ts +++ b/src/core/Picking.ts @@ -163,6 +163,8 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { const y2 = Math.ceil(yp + tolerance); const selector = getSelector(); + if (selector.isDeleted()) return []; + const openGLRenderWindow = openGLRenderWindowAPI.get(); const renderer = rendererAPI.get(); @@ -231,6 +233,8 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { if (!isMounted.current) return []; const selector = getSelector(); + if (selector.isDeleted()) return []; + const openGLRenderWindow = openGLRenderWindowAPI.get(); const renderer = rendererAPI.get(); @@ -297,6 +301,8 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) { if (!isMounted.current) return null; const selector = getSelector(); + if (selector.isDeleted()) return null; + const openGLRenderWindow = openGLRenderWindowAPI.get(); const renderer = rendererAPI.get(); From 39f142df3e798942fae12e4ba52f4f7a155fe7dd Mon Sep 17 00:00:00 2001 From: Sankhesh Jhaveri Date: Wed, 24 Apr 2024 11:53:27 -0400 Subject: [PATCH 103/110] Add MIP rendering of PET data --- usage/src/Volume/PET_CT_Overlay.jsx | 39 ++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/usage/src/Volume/PET_CT_Overlay.jsx b/usage/src/Volume/PET_CT_Overlay.jsx index a1b9f61..98abd4c 100644 --- a/usage/src/Volume/PET_CT_Overlay.jsx +++ b/usage/src/Volume/PET_CT_Overlay.jsx @@ -2,6 +2,7 @@ import vtkITKHelper from '@kitware/vtk.js/Common/DataModel/ITKHelper'; import vtkLiteHttpDataAccessHelper from '@kitware/vtk.js/IO/Core/DataAccessHelper/LiteHttpDataAccessHelper'; import vtkResourceLoader from '@kitware/vtk.js/IO/Core/ResourceLoader'; import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps.js'; +import { BlendMode } from '@kitware/vtk.js/Rendering/Core/VolumeMapper/Constants.js'; import { unzipSync } from 'fflate'; import { useContext, useEffect, useState } from 'react'; import './PET_CT_Overlay.css'; @@ -15,6 +16,7 @@ import { SliceRepresentation, UseDataSet, View, + VolumeRepresentation, } from 'react-vtk-js'; function Slider(props) { @@ -243,7 +245,7 @@ function Example(props) { style={{ position: 'absolute', left: '0px', - width: '50%', + width: '33%', height: '100%', }} > @@ -298,8 +300,8 @@ function Example(props) {
@@ -353,6 +355,37 @@ function Example(props) {
+
+ + + + + +
From e5d61879f5776efeef2d04b19ab9bbc943c19734 Mon Sep 17 00:00:00 2001 From: Shreeraj Jadhav Date: Tue, 4 Jun 2024 20:34:56 -0400 Subject: [PATCH 104/110] ENH: Generalize detection and handling of PT-CT overlap --- usage/src/Volume/PET_CT_Overlay.jsx | 189 ++++++++++++++++++++++------ 1 file changed, 149 insertions(+), 40 deletions(-) diff --git a/usage/src/Volume/PET_CT_Overlay.jsx b/usage/src/Volume/PET_CT_Overlay.jsx index 98abd4c..184f5d6 100644 --- a/usage/src/Volume/PET_CT_Overlay.jsx +++ b/usage/src/Volume/PET_CT_Overlay.jsx @@ -3,6 +3,7 @@ import vtkLiteHttpDataAccessHelper from '@kitware/vtk.js/IO/Core/DataAccessHelpe import vtkResourceLoader from '@kitware/vtk.js/IO/Core/ResourceLoader'; import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps.js'; import { BlendMode } from '@kitware/vtk.js/Rendering/Core/VolumeMapper/Constants.js'; +import vtkMath from '@kitware/vtk.js/Common/Core/Math'; import { unzipSync } from 'fflate'; import { useContext, useEffect, useState } from 'react'; import './PET_CT_Overlay.css'; @@ -18,15 +19,15 @@ import { View, VolumeRepresentation, } from 'react-vtk-js'; +import vtkImageReslice from '@kitware/vtk.js/Imaging/Core/ImageReslice'; +import { InterpolationMode } from '@kitware/vtk.js/Imaging/Core/AbstractImageInterpolator/Constants'; function Slider(props) { const view = useContext(Contexts.ViewContext); const onChange = (e) => { const value = Number(e.currentTarget.value); props.setValue(value); - if (props.setCTValue) { - props.setCTValue(value * 4); - } + props.setPTValue(value); setTimeout(view?.renderView, 0); }; return ( @@ -96,9 +97,120 @@ function DropDown(props) { ); } +function haveOverlappingGrids(img1, img2, tolerance = vtkMath.EPSILON) { + if (!img1 || !img2) { + return false; + } + const sameVec3 = (p1, p2, tolerance) => vtkMath.distance2BetweenPoints(p1, p2) < tolerance*tolerance; + if (!sameVec3(img1.getOrigin(), img2.getOrigin())) { + return false; + } + if (!sameVec3(img1.getSpacing(), img2.getSpacing())) { + return false; + } + if (!sameVec3(img1.getDimensions(), img2.getDimensions())) { + return false; + } + const dir1 = img1.getDirection(); + const dir2 = img2.getDirection(); + const dirDelta = dir1.reduce((accumulator, currentValue, currentIndex) => accumulator + Math.abs(currentValue - dir2[currentIndex]), 0); + if (dirDelta > tolerance) { + return false; + } + return true; +} + +function resliceAndSetup(ctImageData, ptImageData) { + loader.hidden = 'hidden'; + fileInput.hidden = 'hidden'; + exampleInput.hidden = 'hidden'; + const overlappingGrids = haveOverlappingGrids(ctImageData, ptImageData, 1e-3); + if (!overlappingGrids) { + // Resample the image with background series grid: + const reslicer = vtkImageReslice.newInstance(); + reslicer.setInputData(ptImageData); + reslicer.setOutputDimensionality(3); + reslicer.setOutputExtent(ctImageData.getExtent()); + reslicer.setOutputSpacing(ctImageData.getSpacing()); + reslicer.setOutputDirection(ctImageData.getDirection()); + reslicer.setOutputOrigin(ctImageData.getOrigin()); + reslicer.setTransformInputSampling(false); + reslicer.setInterpolationMode(InterpolationMode.LINEAR) + ptImageData = reslicer.getOutputData(); + window.setResliced(true); + } + window.ptData = ptImageData; + window.ctData = ctImageData; + window.setMaxKSlice(ctImageData.getDimensions()[2] - 1); + window.setMaxJSlice(ctImageData.getDimensions()[1] - 1); + const range = ptImageData?.getPointData()?.getScalars()?.getRange(); + window.setPTColorWindow(range[1] - range[0]); + window.setPTColorLevel((range[1] + range[0]) * 0.5); + window.setStatusText(''); + return [ctImageData, ptImageData]; +} + +/** + * Loads data from local storage. Function expects a zip file with two subfolders: CT, PT + */ +const loadLocalData = async function (event) { + event.preventDefault(); + console.log('Loading itk module...'); + window.setStatusText('Loading itk module...'); + if (!window.itk) { + await vtkResourceLoader.loadScript( + 'https://cdn.jsdelivr.net/npm/itk-wasm@1.0.0-b.8/dist/umd/itk-wasm.js' + ); + } + const files = event.target.files; + if (files.length === 1) { + const fileReader = new FileReader(); + fileReader.onload = async function onLoad(e) { + const zipFileDataArray = new Uint8Array(fileReader.result); + const decompressedFiles = unzipSync(zipFileDataArray); + const ctDCMFiles = []; + const ptDCMFiles = []; + const PTRe = /PT/; + const CTRe = /CT/; + Object.keys(decompressedFiles).forEach((relativePath) => { + if (relativePath.endsWith('.dcm')) { + if (PTRe.test(relativePath)) { + ptDCMFiles.push(decompressedFiles[relativePath].buffer); + } else if (CTRe.test(relativePath)) { + ctDCMFiles.push(decompressedFiles[relativePath].buffer); + } + } + }); + + if (ptDCMFiles.length === 0 || ctDCMFiles.length === 0) { + const msg = 'Expected two directories in the zip file: "PT" and "CT"'; + console.error(msg); + window.alert(msg); + return; + } + + let ctImageData = null; + let ptImageData = null; + if (window.itk) { + const { image: ctitkImage, webWorkerPool: ctWebWorkers } = + await window.itk.readImageDICOMArrayBufferSeries(ctDCMFiles); + ctWebWorkers.terminateWorkers(); + ctImageData = vtkITKHelper.convertItkToVtkImage(ctitkImage); + const { image: ptitkImage, webWorkerPool: ptWebWorkers } = + await window.itk.readImageDICOMArrayBufferSeries(ptDCMFiles); + ptWebWorkers.terminateWorkers(); + ptImageData = vtkITKHelper.convertItkToVtkImage(ptitkImage); + } + return resliceAndSetup(ctImageData, ptImageData); + }; + + fileReader.readAsArrayBuffer(files[0]); + } +}; + const loadData = async () => { console.log('Loading itk module...'); - loadData.setStatusText('Loading itk module...'); + window.setStatusText('Loading itk module...'); if (!window.itk) { await vtkResourceLoader.loadScript( 'https://cdn.jsdelivr.net/npm/itk-wasm@1.0.0-b.8/dist/umd/itk-wasm.js' @@ -106,13 +218,13 @@ const loadData = async () => { } console.log('Fetching/downloading the input file, please wait...'); - loadData.setStatusText('Loading data, please wait...'); + window.setStatusText('Loading data, please wait...'); const zipFileData = await vtkLiteHttpDataAccessHelper.fetchBinary( 'https://data.kitware.com/api/v1/folder/661ad10a5165b19d36c87220/download' ); console.log('Fetching/downloading input file done!'); - loadData.setStatusText('Download complete!'); + window.setStatusText('Download complete!'); const zipFileDataArray = new Uint8Array(zipFileData); const decompressedFiles = unzipSync(zipFileDataArray); @@ -142,20 +254,13 @@ const loadData = async () => { ptWebWorkers.terminateWorkers(); ptImageData = vtkITKHelper.convertItkToVtkImage(ptitkImage); } - loadData.setMaxKSlice(ctImageData.getDimensions()[2] - 1); - loadData.setMaxJSlice(ptImageData.getDimensions()[1] - 1); - const range = ptImageData?.getPointData()?.getScalars()?.getRange(); - loadData.setPTColorWindow(range[1] - range[0]); - loadData.setPTColorLevel((range[1] + range[0]) * 0.5); - loadData.setStatusText(''); - loader.hidden = 'hidden'; - return [ctImageData, ptImageData]; + return resliceAndSetup(ctImageData, ptImageData); }; function Example(props) { const [statusText, setStatusText] = useState('Loading data, please wait ...'); const [kSlice, setKSlice] = useState(0); - const [jSlice, setJSlice] = useState(0); + const [ptjSlice, setJSlice] = useState(0); const [ctjSlice, setCTJSlice] = useState(0); const [colorWindow, setColorWindow] = useState(2048); const [colorLevel, setColorLevel] = useState(0); @@ -165,24 +270,28 @@ function Example(props) { const [opacity, setOpacity] = useState(0.4); const [maxKSlice, setMaxKSlice] = useState(310); const [maxJSlice, setMaxJSlice] = useState(110); - loadData.setMaxKSlice = setMaxKSlice; - loadData.setMaxJSlice = setMaxJSlice; - loadData.setStatusText = setStatusText; - loadData.setPTColorWindow = setPTColorWindow; - loadData.setPTColorLevel = setPTColorLevel; + const [resliced, setResliced] = useState(false); + window.setMaxKSlice = setMaxKSlice; + window.setMaxJSlice = setMaxJSlice; + window.setStatusText = setStatusText; + window.setPTColorWindow = setPTColorWindow; + window.setPTColorLevel = setPTColorLevel; + window.setResliced = setResliced; useEffect(() => { - loadData().then(([ctData, ptData]) => { - window.ctData = ctData; - window.ptData = ptData; - setKSlice(155); - setJSlice(64); - setCTJSlice(256); - }); - }, []); + if (window.ctData && window.ptData) { + const ptDim = window.ptData.getDimensions(); + setKSlice(Math.floor(ptDim[2]/2)); + setJSlice(Math.floor(ptDim[1]/2)); + const ctDim = window.ctData.getDimensions(); + setCTJSlice(Math.floor(ctDim[1]/2)); + } + }, [window.ctData, window.ptData]); return ( + + @@ -215,7 +324,7 @@ function Example(props) { max={4095} value={colorLevel} setValue={setColorLevel} - style={{ top: '60px', left: '205px' }} + style={{ top: '60px', left: '5px' }} />
Date: Thu, 13 Jun 2024 12:36:51 -0400 Subject: [PATCH 105/110] feat: add color + opacity funcs to slice + volume --- src/core/SliceRepresentation.tsx | 28 ++++++++ src/core/VolumeRepresentation.tsx | 28 ++++++++ src/core/modules/useColorAndOpacity.ts | 90 ++++++++++++++++++++++++++ usage/src/Volume/VolumeRendering.jsx | 13 +++- 4 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 src/core/modules/useColorAndOpacity.ts diff --git a/src/core/SliceRepresentation.tsx b/src/core/SliceRepresentation.tsx index ad0843e..d2956b0 100644 --- a/src/core/SliceRepresentation.tsx +++ b/src/core/SliceRepresentation.tsx @@ -1,7 +1,9 @@ import vtkImageData from '@kitware/vtk.js/Common/DataModel/ImageData'; +import vtkPiecewiseFunction from '@kitware/vtk.js/Common/DataModel/PiecewiseFunction'; import AbstractImageMapper, { vtkAbstractImageMapper, } from '@kitware/vtk.js/Rendering/Core/AbstractImageMapper'; +import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; import vtkImageArrayMapper from '@kitware/vtk.js/Rendering/Core/ImageArrayMapper'; import vtkImageMapper, { IImageMapperInitialValues, @@ -29,6 +31,7 @@ import { RepresentationContext, useRendererContext, } from './contexts'; +import useColorAndOpacity from './modules/useColorAndOpacity'; import useColorTransferFunction from './modules/useColorTransferFunction'; import useDataEvents from './modules/useDataEvents'; import useMapper from './modules/useMapper'; @@ -70,6 +73,20 @@ export interface SliceRepresentationProps extends PropsWithChildren { */ colorDataRange?: 'auto' | Vector2; + /** + * Specify the color transfer functions. + * + * Each index cooresponds to an image component. There are max 4 components supported. + */ + colorTransferFunctions?: Array; + + /** + * Specify the scalar opacity functions. + * + * Each index cooresponds to an image component. There are max 4 components supported. + */ + scalarOpacityFunctions?: Array; + /** * index of the slice along i */ @@ -186,11 +203,22 @@ export default forwardRef(function SliceRepresentation( getActor().setMapper(getMapper() as vtkImageMapper); }, [getActor, getMapper]); + // --- color and opacity --- // + + const { colorTransferFunctions, scalarOpacityFunctions } = props; + useEffect(() => { getActor().getProperty().setRGBTransferFunction(0, getLookupTable()); getActor().getProperty().setInterpolationTypeToLinear(); }, [getActor, getLookupTable]); + useColorAndOpacity( + getActor, + colorTransferFunctions, + scalarOpacityFunctions, + trackModified + ); + // set actor property props const { property: propertyProps } = props; useComparableEffect( diff --git a/src/core/VolumeRepresentation.tsx b/src/core/VolumeRepresentation.tsx index 9623edb..1bfcbf9 100644 --- a/src/core/VolumeRepresentation.tsx +++ b/src/core/VolumeRepresentation.tsx @@ -1,5 +1,7 @@ import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray'; import vtkImageData from '@kitware/vtk.js/Common/DataModel/ImageData'; +import vtkPiecewiseFunction from '@kitware/vtk.js/Common/DataModel/PiecewiseFunction'; +import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; import vtkVolume, { IVolumeInitialValues, } from '@kitware/vtk.js/Rendering/Core/Volume'; @@ -26,6 +28,7 @@ import { RepresentationContext, useRendererContext, } from './contexts'; +import useColorAndOpacity from './modules/useColorAndOpacity'; import useColorTransferFunction from './modules/useColorTransferFunction'; import useDataEvents from './modules/useDataEvents'; import useDataRange from './modules/useDataRange'; @@ -69,6 +72,20 @@ export interface VolumeRepresentationProps extends PropsWithChildren { */ colorDataRange?: 'auto' | Vector2; + /** + * Specify the color transfer functions. + * + * Each index cooresponds to an image component. There are max 4 components supported. + */ + colorTransferFunctions?: Array; + + /** + * Specify the scalar opacity functions. + * + * Each index cooresponds to an image component. There are max 4 components supported. + */ + scalarOpacityFunctions?: Array; + /** * Event callback for when data is made available. * @@ -164,6 +181,10 @@ export default forwardRef(function VolumeRepresentation( trackModified, }); + // --- color and opacity --- // + + const { colorTransferFunctions, scalarOpacityFunctions } = props; + useEffect(() => { getActor().setMapper(getMapper()); }, [getActor, getMapper]); @@ -174,6 +195,13 @@ export default forwardRef(function VolumeRepresentation( getActor().getProperty().setInterpolationTypeToLinear(); }, [getActor, getLookupTable, getPiecewiseFunction]); + useColorAndOpacity( + getActor, + colorTransferFunctions, + scalarOpacityFunctions, + trackModified + ); + // set actor property props const { property: propertyProps } = props; useComparableEffect( diff --git a/src/core/modules/useColorAndOpacity.ts b/src/core/modules/useColorAndOpacity.ts new file mode 100644 index 0000000..03488b7 --- /dev/null +++ b/src/core/modules/useColorAndOpacity.ts @@ -0,0 +1,90 @@ +import vtkPiecewiseFunction from '@kitware/vtk.js/Common/DataModel/PiecewiseFunction'; +import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; +import vtkProp3D from '@kitware/vtk.js/Rendering/Core/Prop3D'; +import { useEffect } from 'react'; + +interface PropertyWithColorAndOpacity { + setRGBTransferFunction( + index: number, + fn: vtkColorTransferFunction | null + ): boolean; + getRGBTransferFunction(index?: number): vtkColorTransferFunction | null; + setScalarOpacity(index: number, fn: vtkPiecewiseFunction | null): boolean; + getScalarOpacity(index?: number): vtkPiecewiseFunction | null; +} + +interface ActorWithColorAndOpacity extends vtkProp3D { + getProperty(): E; +} + +export default function useColorAndOpacity< + E extends PropertyWithColorAndOpacity, + T extends ActorWithColorAndOpacity +>( + getActor: () => T, + colorTransferFunctions: + | Array + | null + | undefined, + scalarOpacityFunctions: + | Array + | null + | undefined, + trackModified: (b: boolean) => void +) { + useEffect(() => { + if (!colorTransferFunctions?.length) return; + const property = getActor().getProperty(); + + colorTransferFunctions.forEach((fn, component) => { + property.setRGBTransferFunction(component, fn); + }); + + return () => { + for (let i = 0; i < 4; i++) { + property.setRGBTransferFunction(i, null); + } + }; + }, [colorTransferFunctions, getActor]); + + useEffect(() => { + if (!scalarOpacityFunctions?.length) return; + const property = getActor().getProperty(); + + scalarOpacityFunctions.forEach((fn, component) => { + property.setScalarOpacity(component, fn); + }); + + return () => { + for (let i = 0; i < 4; i++) { + property.setScalarOpacity(i, null); + } + }; + }, [scalarOpacityFunctions, getActor]); + + // watch for vtk.js object changes + + useEffect(() => { + if (!colorTransferFunctions?.length) return; + const subs = colorTransferFunctions + .filter((fn): fn is vtkColorTransferFunction => !!fn) + .map((fn) => { + return fn.onModified(() => { + trackModified(true); + }); + }); + return () => subs.forEach((sub) => sub.unsubscribe()); + }); + + useEffect(() => { + if (!scalarOpacityFunctions?.length) return; + const subs = scalarOpacityFunctions + .filter((fn): fn is vtkPiecewiseFunction => !!fn) + .map((fn) => { + return fn.onModified(() => { + trackModified(true); + }); + }); + return () => subs.forEach((sub) => sub.unsubscribe()); + }); +} diff --git a/usage/src/Volume/VolumeRendering.jsx b/usage/src/Volume/VolumeRendering.jsx index 68c87d7..7907f50 100644 --- a/usage/src/Volume/VolumeRendering.jsx +++ b/usage/src/Volume/VolumeRendering.jsx @@ -1,4 +1,5 @@ import vtkXMLImageDataReader from '@kitware/vtk.js/IO/XML/XMLImageDataReader'; +import { useRef } from 'react'; import { Reader, View, @@ -7,9 +8,19 @@ import { } from 'react-vtk-js'; function Example() { + const view = useRef(); + const run = () => { + const v = view.current; + const camera = v.getCamera(); + camera.azimuth(0.5); + v.requestRender(); + requestAnimationFrame(run); + }; + return (
- + + Date: Mon, 17 Jun 2024 12:56:08 -0400 Subject: [PATCH 106/110] fix(useColorAndOpacity): set as null --- src/core/modules/useColorAndOpacity.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/modules/useColorAndOpacity.ts b/src/core/modules/useColorAndOpacity.ts index 03488b7..3bb4b9e 100644 --- a/src/core/modules/useColorAndOpacity.ts +++ b/src/core/modules/useColorAndOpacity.ts @@ -37,7 +37,7 @@ export default function useColorAndOpacity< const property = getActor().getProperty(); colorTransferFunctions.forEach((fn, component) => { - property.setRGBTransferFunction(component, fn); + property.setRGBTransferFunction(component, fn ?? null); }); return () => { @@ -52,7 +52,7 @@ export default function useColorAndOpacity< const property = getActor().getProperty(); scalarOpacityFunctions.forEach((fn, component) => { - property.setScalarOpacity(component, fn); + property.setScalarOpacity(component, fn ?? null); }); return () => { From e94f74491ad8dbfc495468837cb33c3dd750da11 Mon Sep 17 00:00:00 2001 From: CORN Wong Date: Wed, 19 Jun 2024 13:39:01 +0930 Subject: [PATCH 107/110] =?UTF-8?q?=F0=9F=94=A7=20MA-34=20Fix=20Reader=20T?= =?UTF-8?q?SX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/Reader.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/Reader.tsx b/src/core/Reader.tsx index 2b82b2f..ac40aeb 100644 --- a/src/core/Reader.tsx +++ b/src/core/Reader.tsx @@ -147,4 +147,6 @@ export default function Reader(props: ReaderProps) { downstream.setInputConnection(reader.getOutputPort(), port); }); + + return <>; } From 6d6bb0d116fda44f5e276c644a8a788bf855be4e Mon Sep 17 00:00:00 2001 From: Shreeraj Jadhav Date: Mon, 29 Jul 2024 23:45:15 -0400 Subject: [PATCH 108/110] feat(example): PET MIP with window/level adjustment --- usage/src/Volume/PET_CT_Overlay.jsx | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/usage/src/Volume/PET_CT_Overlay.jsx b/usage/src/Volume/PET_CT_Overlay.jsx index 184f5d6..81214b2 100644 --- a/usage/src/Volume/PET_CT_Overlay.jsx +++ b/usage/src/Volume/PET_CT_Overlay.jsx @@ -27,7 +27,9 @@ function Slider(props) { const onChange = (e) => { const value = Number(e.currentTarget.value); props.setValue(value); - props.setPTValue(value); + if (props.setPTValue) { + props.setPTValue(value); + } setTimeout(view?.renderView, 0); }; return ( @@ -288,6 +290,9 @@ function Example(props) { } }, [window.ctData, window.ptData]); + const cdrMin = ptcolorLevel - ptcolorWindow / 2.0; + const cdrMax = ptcolorLevel + ptcolorWindow / 2.0; + return ( @@ -349,6 +354,20 @@ function Example(props) { setValue={setColorPreset} style={{ top: '10px', left: '405px' }} /> + +
From c9aa1a18a4f664336822d60f95b99d2a182fd52a Mon Sep 17 00:00:00 2001 From: Sigma Date: Fri, 15 Nov 2024 10:31:46 +0800 Subject: [PATCH 109/110] Support user defined color map preset --- src/core/Geometry2DRepresentation.tsx | 5 +++-- src/core/GeometryRepresentation.tsx | 5 +++-- src/core/SliceRepresentation.tsx | 5 +++-- src/core/VolumeRepresentation.tsx | 5 +++-- src/core/modules/useColorTransferFunction.ts | 15 ++++++++++++--- 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/core/Geometry2DRepresentation.tsx b/src/core/Geometry2DRepresentation.tsx index 5ef07fb..c59488a 100644 --- a/src/core/Geometry2DRepresentation.tsx +++ b/src/core/Geometry2DRepresentation.tsx @@ -2,6 +2,7 @@ import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData'; import vtkActor2D, { IActor2DInitialValues, } from '@kitware/vtk.js/Rendering/Core/Actor2D'; +import { IColorMapPreset } from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'; import { ICoordinateInitialValues } from '@kitware/vtk.js/Rendering/Core/Coordinate'; import { Coordinate } from '@kitware/vtk.js/Rendering/Core/Coordinate/Constants'; import vtkMapper2D, { @@ -55,9 +56,9 @@ export interface Geometry2DRepresentationProps extends PropsWithChildren { property?: IProperty2DInitialValues; /** - * Preset name for the lookup table color map + * Preset name for the lookup table color map or user provided color map preset */ - colorMapPreset?: string; + colorMapPreset?: string | IColorMapPreset; /** * Data range use for the colorMap diff --git a/src/core/GeometryRepresentation.tsx b/src/core/GeometryRepresentation.tsx index 1f18c50..ab321a0 100644 --- a/src/core/GeometryRepresentation.tsx +++ b/src/core/GeometryRepresentation.tsx @@ -2,6 +2,7 @@ import vtkPolyData from '@kitware/vtk.js/Common/DataModel/PolyData'; import vtkActor, { IActorInitialValues, } from '@kitware/vtk.js/Rendering/Core/Actor'; +import { IColorMapPreset } from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'; import vtkMapper, { IMapperInitialValues, } from '@kitware/vtk.js/Rendering/Core/Mapper'; @@ -52,9 +53,9 @@ export interface GeometryRepresentationProps extends PropsWithChildren { property?: IPropertyInitialValues; /** - * Preset name for the lookup table color map + * Preset name for the lookup table color map or user provided color map preset */ - colorMapPreset?: string; + colorMapPreset?: string | IColorMapPreset; /** * Data range use for the colorMap diff --git a/src/core/SliceRepresentation.tsx b/src/core/SliceRepresentation.tsx index d2956b0..0c5091a 100644 --- a/src/core/SliceRepresentation.tsx +++ b/src/core/SliceRepresentation.tsx @@ -4,6 +4,7 @@ import AbstractImageMapper, { vtkAbstractImageMapper, } from '@kitware/vtk.js/Rendering/Core/AbstractImageMapper'; import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; +import { IColorMapPreset } from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'; import vtkImageArrayMapper from '@kitware/vtk.js/Rendering/Core/ImageArrayMapper'; import vtkImageMapper, { IImageMapperInitialValues, @@ -64,9 +65,9 @@ export interface SliceRepresentationProps extends PropsWithChildren { property?: IImagePropertyInitialValues; /** - * Preset name for the lookup table color map + * Preset name for the lookup table color map or user provided color map preset */ - colorMapPreset?: string; + colorMapPreset?: string | IColorMapPreset; /** * Data range use for the colorMap diff --git a/src/core/VolumeRepresentation.tsx b/src/core/VolumeRepresentation.tsx index 1bfcbf9..bc5bb10 100644 --- a/src/core/VolumeRepresentation.tsx +++ b/src/core/VolumeRepresentation.tsx @@ -2,6 +2,7 @@ import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray'; import vtkImageData from '@kitware/vtk.js/Common/DataModel/ImageData'; import vtkPiecewiseFunction from '@kitware/vtk.js/Common/DataModel/PiecewiseFunction'; import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; +import { IColorMapPreset } from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'; import vtkVolume, { IVolumeInitialValues, } from '@kitware/vtk.js/Rendering/Core/Volume'; @@ -63,9 +64,9 @@ export interface VolumeRepresentationProps extends PropsWithChildren { property?: IVolumePropertyInitialValues; /** - * Preset name for the lookup table color map + * Preset name for the lookup table color map or user provided color map preset */ - colorMapPreset?: string; + colorMapPreset?: string | IColorMapPreset; /** * Data range use for the colorMap diff --git a/src/core/modules/useColorTransferFunction.ts b/src/core/modules/useColorTransferFunction.ts index 7a1235c..64482e2 100644 --- a/src/core/modules/useColorTransferFunction.ts +++ b/src/core/modules/useColorTransferFunction.ts @@ -1,5 +1,7 @@ import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; -import vtkColorMaps from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'; +import vtkColorMaps, { + IColorMapPreset, +} from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction/ColorMaps'; import { Vector2 } from '@kitware/vtk.js/types'; import { compareVector2 } from '../../utils/comparators'; import deletionRegistry from '../../utils/DeletionRegistry'; @@ -9,7 +11,7 @@ import useGetterRef from '../../utils/useGetterRef'; import useUnmount from '../../utils/useUnmount'; export default function useColorTransferFunction( - presetName: string, + colorMapPreset: string | IColorMapPreset, range: Vector2, trackModified: BooleanAccumulator ) { @@ -19,11 +21,18 @@ export default function useColorTransferFunction( return func; }); + const isPassedInPresetName = typeof colorMapPreset === 'string'; + const presetName = isPassedInPresetName + ? colorMapPreset + : colorMapPreset.Name; + useComparableEffect( () => { if (!presetName || !range) return; const lut = getLUT(); - const preset = vtkColorMaps.getPresetByName(presetName); + const preset = isPassedInPresetName + ? vtkColorMaps.getPresetByName(presetName) + : colorMapPreset; lut.applyColorMap(preset); lut.setMappingRange(range[0], range[1]); lut.updateRange(); From 707ca3fb5fa04da8cf044f716d451964da74e987 Mon Sep 17 00:00:00 2001 From: Forrest Date: Wed, 20 Aug 2025 16:22:13 -0400 Subject: [PATCH 110/110] chore: update github runner versions --- .github/workflows/publish.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 07fc45b..4f99693 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -8,7 +8,7 @@ on: jobs: publish: name: Publish - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v2 @@ -17,7 +17,7 @@ jobs: - name: Setup node uses: actions/setup-node@v1 with: - node-version: 18 + node-version: 22 - name: Install dependencies run: npm ci - name: Build