diff --git a/.yarn/cache/@babel-runtime-npm-7.20.13-45eeb6d8ad-09b7a97a05.zip b/.yarn/cache/@babel-runtime-npm-7.20.13-45eeb6d8ad-09b7a97a05.zip new file mode 100644 index 000000000..1f68f79f5 Binary files /dev/null and b/.yarn/cache/@babel-runtime-npm-7.20.13-45eeb6d8ad-09b7a97a05.zip differ diff --git a/.yarn/cache/@devicefarmer-adbkit-logcat-npm-2.1.2-7716683e3d-4defd49b2a.zip b/.yarn/cache/@devicefarmer-adbkit-logcat-npm-2.1.2-7716683e3d-4defd49b2a.zip new file mode 100644 index 000000000..4a7a72d07 Binary files /dev/null and b/.yarn/cache/@devicefarmer-adbkit-logcat-npm-2.1.2-7716683e3d-4defd49b2a.zip differ diff --git a/.yarn/cache/@devicefarmer-adbkit-monkey-npm-1.2.1-c3c2cdec90-6eab557f14.zip b/.yarn/cache/@devicefarmer-adbkit-monkey-npm-1.2.1-c3c2cdec90-6eab557f14.zip new file mode 100644 index 000000000..03f52b69d Binary files /dev/null and b/.yarn/cache/@devicefarmer-adbkit-monkey-npm-1.2.1-c3c2cdec90-6eab557f14.zip differ diff --git a/.yarn/cache/@devicefarmer-adbkit-npm-3.2.3-0d22e0d679-9298d59ca6.zip b/.yarn/cache/@devicefarmer-adbkit-npm-3.2.3-0d22e0d679-9298d59ca6.zip new file mode 100644 index 000000000..d62e2b4c4 Binary files /dev/null and b/.yarn/cache/@devicefarmer-adbkit-npm-3.2.3-0d22e0d679-9298d59ca6.zip differ diff --git a/.yarn/cache/@eslint-eslintrc-npm-1.4.1-007f670de2-cd3e5a8683.zip b/.yarn/cache/@eslint-eslintrc-npm-1.4.1-007f670de2-cd3e5a8683.zip new file mode 100644 index 000000000..b51019b7a Binary files /dev/null and b/.yarn/cache/@eslint-eslintrc-npm-1.4.1-007f670de2-cd3e5a8683.zip differ diff --git a/.yarn/cache/@humanwhocodes-config-array-npm-0.11.8-7955bfecc2-0fd6b3c54f.zip b/.yarn/cache/@humanwhocodes-config-array-npm-0.11.8-7955bfecc2-0fd6b3c54f.zip new file mode 100644 index 000000000..dc21af1cb Binary files /dev/null and b/.yarn/cache/@humanwhocodes-config-array-npm-0.11.8-7955bfecc2-0fd6b3c54f.zip differ diff --git a/.yarn/cache/@mdn-browser-compat-data-npm-5.2.29-c03d819b23-2f93497fe8.zip b/.yarn/cache/@mdn-browser-compat-data-npm-5.2.29-c03d819b23-2f93497fe8.zip new file mode 100644 index 000000000..adfe90d26 Binary files /dev/null and b/.yarn/cache/@mdn-browser-compat-data-npm-5.2.29-c03d819b23-2f93497fe8.zip differ diff --git a/.yarn/cache/@mozilla-readability-npm-0.4.2-9e722855e1-daeeb1d68e.zip b/.yarn/cache/@mozilla-readability-npm-0.4.2-9e722855e1-daeeb1d68e.zip new file mode 100644 index 000000000..b48d295e4 Binary files /dev/null and b/.yarn/cache/@mozilla-readability-npm-0.4.2-9e722855e1-daeeb1d68e.zip differ diff --git a/.yarn/cache/@types-webextension-polyfill-npm-0.10.0-bd8dcf3edd-1c6d0b3f6f.zip b/.yarn/cache/@types-webextension-polyfill-npm-0.10.0-bd8dcf3edd-1c6d0b3f6f.zip new file mode 100644 index 000000000..e5dc96829 Binary files /dev/null and b/.yarn/cache/@types-webextension-polyfill-npm-0.10.0-bd8dcf3edd-1c6d0b3f6f.zip differ diff --git a/.yarn/cache/addons-linter-npm-5.27.0-c7da0a69ee-cf92f54ce9.zip b/.yarn/cache/addons-linter-npm-5.27.0-c7da0a69ee-cf92f54ce9.zip new file mode 100644 index 000000000..d8d8f7ec7 Binary files /dev/null and b/.yarn/cache/addons-linter-npm-5.27.0-c7da0a69ee-cf92f54ce9.zip differ diff --git a/.yarn/cache/addons-moz-compare-npm-1.3.0-4b932e6d73-f3464dfe19.zip b/.yarn/cache/addons-moz-compare-npm-1.3.0-4b932e6d73-f3464dfe19.zip new file mode 100644 index 000000000..85cf58e33 Binary files /dev/null and b/.yarn/cache/addons-moz-compare-npm-1.3.0-4b932e6d73-f3464dfe19.zip differ diff --git a/.yarn/cache/addons-scanner-utils-npm-8.3.0-19bb6b25f1-913d84900b.zip b/.yarn/cache/addons-scanner-utils-npm-8.3.0-19bb6b25f1-913d84900b.zip new file mode 100644 index 000000000..6a7f4a64f Binary files /dev/null and b/.yarn/cache/addons-scanner-utils-npm-8.3.0-19bb6b25f1-913d84900b.zip differ diff --git a/.yarn/cache/adm-zip-npm-0.5.10-17a872f2fd-07ed91cf64.zip b/.yarn/cache/adm-zip-npm-0.5.10-17a872f2fd-07ed91cf64.zip new file mode 100644 index 000000000..c1fad7888 Binary files /dev/null and b/.yarn/cache/adm-zip-npm-0.5.10-17a872f2fd-07ed91cf64.zip differ diff --git a/.yarn/cache/ajv-npm-8.12.0-3bf6e30741-4dc13714e3.zip b/.yarn/cache/ajv-npm-8.12.0-3bf6e30741-4dc13714e3.zip new file mode 100644 index 000000000..9e66b6f2f Binary files /dev/null and b/.yarn/cache/ajv-npm-8.12.0-3bf6e30741-4dc13714e3.zip differ diff --git a/.yarn/cache/any-promise-npm-1.3.0-f34eeaa7e7-0ee8a9bdbe.zip b/.yarn/cache/any-promise-npm-1.3.0-f34eeaa7e7-0ee8a9bdbe.zip new file mode 100644 index 000000000..2f709d5ca Binary files /dev/null and b/.yarn/cache/any-promise-npm-1.3.0-f34eeaa7e7-0ee8a9bdbe.zip differ diff --git a/.yarn/cache/array-differ-npm-4.0.0-90d42db74d-1de99a06bc.zip b/.yarn/cache/array-differ-npm-4.0.0-90d42db74d-1de99a06bc.zip new file mode 100644 index 000000000..17b551f18 Binary files /dev/null and b/.yarn/cache/array-differ-npm-4.0.0-90d42db74d-1de99a06bc.zip differ diff --git a/.yarn/cache/array-union-npm-3.0.1-3ee2eb5947-47b29f8825.zip b/.yarn/cache/array-union-npm-3.0.1-3ee2eb5947-47b29f8825.zip new file mode 100644 index 000000000..e4f6918ff Binary files /dev/null and b/.yarn/cache/array-union-npm-3.0.1-3ee2eb5947-47b29f8825.zip differ diff --git a/.yarn/cache/asn1-npm-0.2.6-bdd07356c4-39f2ae343b.zip b/.yarn/cache/asn1-npm-0.2.6-bdd07356c4-39f2ae343b.zip new file mode 100644 index 000000000..a6463962d Binary files /dev/null and b/.yarn/cache/asn1-npm-0.2.6-bdd07356c4-39f2ae343b.zip differ diff --git a/.yarn/cache/atomic-sleep-npm-1.0.0-17d8a762a3-b95275afb2.zip b/.yarn/cache/atomic-sleep-npm-1.0.0-17d8a762a3-b95275afb2.zip new file mode 100644 index 000000000..d172f9448 Binary files /dev/null and b/.yarn/cache/atomic-sleep-npm-1.0.0-17d8a762a3-b95275afb2.zip differ diff --git a/.yarn/cache/aws-sign2-npm-0.7.0-656c6cb84d-b148b0bb07.zip b/.yarn/cache/aws-sign2-npm-0.7.0-656c6cb84d-b148b0bb07.zip new file mode 100644 index 000000000..6d4194785 Binary files /dev/null and b/.yarn/cache/aws-sign2-npm-0.7.0-656c6cb84d-b148b0bb07.zip differ diff --git a/.yarn/cache/aws4-npm-1.12.0-af8e48a2ab-68f79708ac.zip b/.yarn/cache/aws4-npm-1.12.0-af8e48a2ab-68f79708ac.zip new file mode 100644 index 000000000..c730171b5 Binary files /dev/null and b/.yarn/cache/aws4-npm-1.12.0-af8e48a2ab-68f79708ac.zip differ diff --git a/.yarn/cache/bcrypt-pbkdf-npm-1.0.2-80db8b16ed-4edfc9fe7d.zip b/.yarn/cache/bcrypt-pbkdf-npm-1.0.2-80db8b16ed-4edfc9fe7d.zip new file mode 100644 index 000000000..75152520d Binary files /dev/null and b/.yarn/cache/bcrypt-pbkdf-npm-1.0.2-80db8b16ed-4edfc9fe7d.zip differ diff --git a/.yarn/cache/camelcase-npm-7.0.1-d41d97bb0d-86ab8f3ebf.zip b/.yarn/cache/camelcase-npm-7.0.1-d41d97bb0d-86ab8f3ebf.zip new file mode 100644 index 000000000..1f5e860ed Binary files /dev/null and b/.yarn/cache/camelcase-npm-7.0.1-d41d97bb0d-86ab8f3ebf.zip differ diff --git a/.yarn/cache/caseless-npm-0.12.0-e83bc5df83-b43bd4c440.zip b/.yarn/cache/caseless-npm-0.12.0-e83bc5df83-b43bd4c440.zip new file mode 100644 index 000000000..a12be75cd Binary files /dev/null and b/.yarn/cache/caseless-npm-0.12.0-e83bc5df83-b43bd4c440.zip differ diff --git a/.yarn/cache/cheerio-npm-1.0.0-rc.12-6785a97c2a-5d4c1b7a53.zip b/.yarn/cache/cheerio-npm-1.0.0-rc.12-6785a97c2a-5d4c1b7a53.zip new file mode 100644 index 000000000..52387ebf2 Binary files /dev/null and b/.yarn/cache/cheerio-npm-1.0.0-rc.12-6785a97c2a-5d4c1b7a53.zip differ diff --git a/.yarn/cache/cheerio-select-npm-2.1.0-e92bc2f296-843d6d4799.zip b/.yarn/cache/cheerio-select-npm-2.1.0-e92bc2f296-843d6d4799.zip new file mode 100644 index 000000000..e6e7bc629 Binary files /dev/null and b/.yarn/cache/cheerio-select-npm-2.1.0-e92bc2f296-843d6d4799.zip differ diff --git a/.yarn/cache/chrome-launcher-npm-0.15.1-93903cae0a-b534221b83.zip b/.yarn/cache/chrome-launcher-npm-0.15.1-93903cae0a-b534221b83.zip new file mode 100644 index 000000000..dfd4ef1b2 Binary files /dev/null and b/.yarn/cache/chrome-launcher-npm-0.15.1-93903cae0a-b534221b83.zip differ diff --git a/.yarn/cache/commander-npm-9.5.0-993b3f2434-c7a3e27aa5.zip b/.yarn/cache/commander-npm-9.5.0-993b3f2434-c7a3e27aa5.zip new file mode 100644 index 000000000..a254243be Binary files /dev/null and b/.yarn/cache/commander-npm-9.5.0-993b3f2434-c7a3e27aa5.zip differ diff --git a/.yarn/cache/common-tags-npm-1.8.2-2c30ba69b3-767a6255a8.zip b/.yarn/cache/common-tags-npm-1.8.2-2c30ba69b3-767a6255a8.zip new file mode 100644 index 000000000..3b1eefb4c Binary files /dev/null and b/.yarn/cache/common-tags-npm-1.8.2-2c30ba69b3-767a6255a8.zip differ diff --git a/.yarn/cache/concat-stream-npm-1.6.2-2bee337060-1ef77032cb.zip b/.yarn/cache/concat-stream-npm-1.6.2-2bee337060-1ef77032cb.zip new file mode 100644 index 000000000..2adcea761 Binary files /dev/null and b/.yarn/cache/concat-stream-npm-1.6.2-2bee337060-1ef77032cb.zip differ diff --git a/.yarn/cache/core-js-npm-3.27.1-7b0086b1f4-d50b5f88ae.zip b/.yarn/cache/core-js-npm-3.27.1-7b0086b1f4-d50b5f88ae.zip new file mode 100644 index 000000000..bcdf10130 Binary files /dev/null and b/.yarn/cache/core-js-npm-3.27.1-7b0086b1f4-d50b5f88ae.zip differ diff --git a/.yarn/cache/css-select-npm-5.1.0-9365a79de5-2772c049b1.zip b/.yarn/cache/css-select-npm-5.1.0-9365a79de5-2772c049b1.zip new file mode 100644 index 000000000..5c72f05f5 Binary files /dev/null and b/.yarn/cache/css-select-npm-5.1.0-9365a79de5-2772c049b1.zip differ diff --git a/.yarn/cache/dashdash-npm-1.14.1-be8f10a286-3634c24957.zip b/.yarn/cache/dashdash-npm-1.14.1-be8f10a286-3634c24957.zip new file mode 100644 index 000000000..108f90531 Binary files /dev/null and b/.yarn/cache/dashdash-npm-1.14.1-be8f10a286-3634c24957.zip differ diff --git a/.yarn/cache/data-uri-to-buffer-npm-4.0.1-5c66a78beb-0d0790b67f.zip b/.yarn/cache/data-uri-to-buffer-npm-4.0.1-5c66a78beb-0d0790b67f.zip new file mode 100644 index 000000000..dc18c8811 Binary files /dev/null and b/.yarn/cache/data-uri-to-buffer-npm-4.0.1-5c66a78beb-0d0790b67f.zip differ diff --git a/.yarn/cache/debounce-npm-1.2.1-b09266a260-682a89506d.zip b/.yarn/cache/debounce-npm-1.2.1-b09266a260-682a89506d.zip new file mode 100644 index 000000000..68307da56 Binary files /dev/null and b/.yarn/cache/debounce-npm-1.2.1-b09266a260-682a89506d.zip differ diff --git a/.yarn/cache/decamelize-npm-6.0.0-109b08ac0a-0066bc3079.zip b/.yarn/cache/decamelize-npm-6.0.0-109b08ac0a-0066bc3079.zip new file mode 100644 index 000000000..f829d061d Binary files /dev/null and b/.yarn/cache/decamelize-npm-6.0.0-109b08ac0a-0066bc3079.zip differ diff --git a/.yarn/cache/deepcopy-npm-2.1.0-cce3dcae61-7890ccaa8a.zip b/.yarn/cache/deepcopy-npm-2.1.0-cce3dcae61-7890ccaa8a.zip new file mode 100644 index 000000000..01c6f28c9 Binary files /dev/null and b/.yarn/cache/deepcopy-npm-2.1.0-cce3dcae61-7890ccaa8a.zip differ diff --git a/.yarn/cache/dom-serializer-npm-2.0.0-378ebc7200-cd1810544f.zip b/.yarn/cache/dom-serializer-npm-2.0.0-378ebc7200-cd1810544f.zip new file mode 100644 index 000000000..0c9bd35a4 Binary files /dev/null and b/.yarn/cache/dom-serializer-npm-2.0.0-378ebc7200-cd1810544f.zip differ diff --git a/.yarn/cache/domhandler-npm-5.0.3-3ede73dc10-0f58f4a6af.zip b/.yarn/cache/domhandler-npm-5.0.3-3ede73dc10-0f58f4a6af.zip new file mode 100644 index 000000000..fd6d19e9e Binary files /dev/null and b/.yarn/cache/domhandler-npm-5.0.3-3ede73dc10-0f58f4a6af.zip differ diff --git a/.yarn/cache/domutils-npm-3.0.1-7937818218-23aa7a8405.zip b/.yarn/cache/domutils-npm-3.0.1-7937818218-23aa7a8405.zip new file mode 100644 index 000000000..9c750d6fe Binary files /dev/null and b/.yarn/cache/domutils-npm-3.0.1-7937818218-23aa7a8405.zip differ diff --git a/.yarn/cache/ecc-jsbn-npm-0.1.2-85b7a7be89-22fef4b620.zip b/.yarn/cache/ecc-jsbn-npm-0.1.2-85b7a7be89-22fef4b620.zip new file mode 100644 index 000000000..80e362ad7 Binary files /dev/null and b/.yarn/cache/ecc-jsbn-npm-0.1.2-85b7a7be89-22fef4b620.zip differ diff --git a/.yarn/cache/es6-promisify-npm-7.0.0-65cfae362d-461305147b.zip b/.yarn/cache/es6-promisify-npm-7.0.0-65cfae362d-461305147b.zip new file mode 100644 index 000000000..a9d04887f Binary files /dev/null and b/.yarn/cache/es6-promisify-npm-7.0.0-65cfae362d-461305147b.zip differ diff --git a/.yarn/cache/eslint-npm-8.32.0-ce390f6a3f-23c8fb3c57.zip b/.yarn/cache/eslint-npm-8.32.0-ce390f6a3f-23c8fb3c57.zip new file mode 100644 index 000000000..3a802878b Binary files /dev/null and b/.yarn/cache/eslint-npm-8.32.0-ce390f6a3f-23c8fb3c57.zip differ diff --git a/.yarn/cache/eslint-plugin-no-unsanitized-npm-4.0.2-51422091a6-c3b171c31a.zip b/.yarn/cache/eslint-plugin-no-unsanitized-npm-4.0.2-51422091a6-c3b171c31a.zip new file mode 100644 index 000000000..38a204bf8 Binary files /dev/null and b/.yarn/cache/eslint-plugin-no-unsanitized-npm-4.0.2-51422091a6-c3b171c31a.zip differ diff --git a/.yarn/cache/espree-npm-9.4.1-b88faf10bc-4d266b0cf8.zip b/.yarn/cache/espree-npm-9.4.1-b88faf10bc-4d266b0cf8.zip new file mode 100644 index 000000000..557f3c35d Binary files /dev/null and b/.yarn/cache/espree-npm-9.4.1-b88faf10bc-4d266b0cf8.zip differ diff --git a/.yarn/cache/execa-npm-4.1.0-cc675b4189-e30d298934.zip b/.yarn/cache/execa-npm-4.1.0-cc675b4189-e30d298934.zip new file mode 100644 index 000000000..bffd89818 Binary files /dev/null and b/.yarn/cache/execa-npm-4.1.0-cc675b4189-e30d298934.zip differ diff --git a/.yarn/cache/extend-npm-3.0.2-e1ca07ac54-a50a8309ca.zip b/.yarn/cache/extend-npm-3.0.2-e1ca07ac54-a50a8309ca.zip new file mode 100644 index 000000000..a33fb285f Binary files /dev/null and b/.yarn/cache/extend-npm-3.0.2-e1ca07ac54-a50a8309ca.zip differ diff --git a/.yarn/cache/extsprintf-npm-1.3.0-61a92b324c-cee7a4a1e3.zip b/.yarn/cache/extsprintf-npm-1.3.0-61a92b324c-cee7a4a1e3.zip new file mode 100644 index 000000000..e72ea1cf4 Binary files /dev/null and b/.yarn/cache/extsprintf-npm-1.3.0-61a92b324c-cee7a4a1e3.zip differ diff --git a/.yarn/cache/fast-json-patch-npm-3.1.1-7e8bb70a45-c4525b61b2.zip b/.yarn/cache/fast-json-patch-npm-3.1.1-7e8bb70a45-c4525b61b2.zip new file mode 100644 index 000000000..4a423f705 Binary files /dev/null and b/.yarn/cache/fast-json-patch-npm-3.1.1-7e8bb70a45-c4525b61b2.zip differ diff --git a/.yarn/cache/fast-redact-npm-3.1.2-e090ce0184-a30eb6b683.zip b/.yarn/cache/fast-redact-npm-3.1.2-e090ce0184-a30eb6b683.zip new file mode 100644 index 000000000..a8f46bce9 Binary files /dev/null and b/.yarn/cache/fast-redact-npm-3.1.2-e090ce0184-a30eb6b683.zip differ diff --git a/.yarn/cache/fetch-blob-npm-3.2.0-28e01becfc-f19bc28a2a.zip b/.yarn/cache/fetch-blob-npm-3.2.0-28e01becfc-f19bc28a2a.zip new file mode 100644 index 000000000..e90e7e285 Binary files /dev/null and b/.yarn/cache/fetch-blob-npm-3.2.0-28e01becfc-f19bc28a2a.zip differ diff --git a/.yarn/cache/firefox-profile-npm-4.2.2-41ba0ada9c-21f338accb.zip b/.yarn/cache/firefox-profile-npm-4.2.2-41ba0ada9c-21f338accb.zip new file mode 100644 index 000000000..15b67c71e Binary files /dev/null and b/.yarn/cache/firefox-profile-npm-4.2.2-41ba0ada9c-21f338accb.zip differ diff --git a/.yarn/cache/first-chunk-stream-npm-3.0.0-8ea4099b38-85fe6ef654.zip b/.yarn/cache/first-chunk-stream-npm-3.0.0-8ea4099b38-85fe6ef654.zip new file mode 100644 index 000000000..42562a883 Binary files /dev/null and b/.yarn/cache/first-chunk-stream-npm-3.0.0-8ea4099b38-85fe6ef654.zip differ diff --git a/.yarn/cache/fluent-syntax-npm-0.14.0-13b7cb1b7b-3d27eaa39d.zip b/.yarn/cache/fluent-syntax-npm-0.14.0-13b7cb1b7b-3d27eaa39d.zip new file mode 100644 index 000000000..473b98647 Binary files /dev/null and b/.yarn/cache/fluent-syntax-npm-0.14.0-13b7cb1b7b-3d27eaa39d.zip differ diff --git a/.yarn/cache/forever-agent-npm-0.6.1-01dae53bf9-766ae6e220.zip b/.yarn/cache/forever-agent-npm-0.6.1-01dae53bf9-766ae6e220.zip new file mode 100644 index 000000000..8250de6b4 Binary files /dev/null and b/.yarn/cache/forever-agent-npm-0.6.1-01dae53bf9-766ae6e220.zip differ diff --git a/.yarn/cache/form-data-npm-2.3.3-c016cc11c0-10c1780fa1.zip b/.yarn/cache/form-data-npm-2.3.3-c016cc11c0-10c1780fa1.zip new file mode 100644 index 000000000..9e2c84d84 Binary files /dev/null and b/.yarn/cache/form-data-npm-2.3.3-c016cc11c0-10c1780fa1.zip differ diff --git a/.yarn/cache/formdata-polyfill-npm-4.0.10-e03013c013-82a34df292.zip b/.yarn/cache/formdata-polyfill-npm-4.0.10-e03013c013-82a34df292.zip new file mode 100644 index 000000000..118da5ce6 Binary files /dev/null and b/.yarn/cache/formdata-polyfill-npm-4.0.10-e03013c013-82a34df292.zip differ diff --git a/.yarn/cache/fs-extra-npm-11.1.0-2cd157426f-5ca476103f.zip b/.yarn/cache/fs-extra-npm-11.1.0-2cd157426f-5ca476103f.zip new file mode 100644 index 000000000..81fe0f976 Binary files /dev/null and b/.yarn/cache/fs-extra-npm-11.1.0-2cd157426f-5ca476103f.zip differ diff --git a/.yarn/cache/fs-extra-npm-9.0.1-2925889105-0110da06b4.zip b/.yarn/cache/fs-extra-npm-9.0.1-2925889105-0110da06b4.zip new file mode 100644 index 000000000..f6f686c24 Binary files /dev/null and b/.yarn/cache/fs-extra-npm-9.0.1-2925889105-0110da06b4.zip differ diff --git a/.yarn/cache/fx-runner-npm-1.3.0-f14542922d-cb74f06c8b.zip b/.yarn/cache/fx-runner-npm-1.3.0-f14542922d-cb74f06c8b.zip new file mode 100644 index 000000000..aa94a0bae Binary files /dev/null and b/.yarn/cache/fx-runner-npm-1.3.0-f14542922d-cb74f06c8b.zip differ diff --git a/.yarn/cache/getpass-npm-0.1.7-519164a3be-ab18d55661.zip b/.yarn/cache/getpass-npm-0.1.7-519164a3be-ab18d55661.zip new file mode 100644 index 000000000..c0a0abf62 Binary files /dev/null and b/.yarn/cache/getpass-npm-0.1.7-519164a3be-ab18d55661.zip differ diff --git a/.yarn/cache/glob-npm-8.1.0-65f64af8b1-92fbea3221.zip b/.yarn/cache/glob-npm-8.1.0-65f64af8b1-92fbea3221.zip new file mode 100644 index 000000000..3fc76b578 Binary files /dev/null and b/.yarn/cache/glob-npm-8.1.0-65f64af8b1-92fbea3221.zip differ diff --git a/.yarn/cache/globals-npm-13.20.0-4565a722e7-ad1ecf914b.zip b/.yarn/cache/globals-npm-13.20.0-4565a722e7-ad1ecf914b.zip new file mode 100644 index 000000000..e8add5b6b Binary files /dev/null and b/.yarn/cache/globals-npm-13.20.0-4565a722e7-ad1ecf914b.zip differ diff --git a/.yarn/cache/growly-npm-1.3.0-b3a02d4d2a-53cdecd4c1.zip b/.yarn/cache/growly-npm-1.3.0-b3a02d4d2a-53cdecd4c1.zip new file mode 100644 index 000000000..559ccedda Binary files /dev/null and b/.yarn/cache/growly-npm-1.3.0-b3a02d4d2a-53cdecd4c1.zip differ diff --git a/.yarn/cache/har-schema-npm-2.0.0-3a318c0ca5-d8946348f3.zip b/.yarn/cache/har-schema-npm-2.0.0-3a318c0ca5-d8946348f3.zip new file mode 100644 index 000000000..e9ea17573 Binary files /dev/null and b/.yarn/cache/har-schema-npm-2.0.0-3a318c0ca5-d8946348f3.zip differ diff --git a/.yarn/cache/har-validator-npm-5.1.5-bd9ac162f5-b998a7269c.zip b/.yarn/cache/har-validator-npm-5.1.5-bd9ac162f5-b998a7269c.zip new file mode 100644 index 000000000..5ae256de3 Binary files /dev/null and b/.yarn/cache/har-validator-npm-5.1.5-bd9ac162f5-b998a7269c.zip differ diff --git a/.yarn/cache/htmlparser2-npm-8.0.1-b432299617-06d5c71e83.zip b/.yarn/cache/htmlparser2-npm-8.0.1-b432299617-06d5c71e83.zip new file mode 100644 index 000000000..51e8d38be Binary files /dev/null and b/.yarn/cache/htmlparser2-npm-8.0.1-b432299617-06d5c71e83.zip differ diff --git a/.yarn/cache/http-signature-npm-1.2.0-ee92426f34-3324598712.zip b/.yarn/cache/http-signature-npm-1.2.0-ee92426f34-3324598712.zip new file mode 100644 index 000000000..06ea3b244 Binary files /dev/null and b/.yarn/cache/http-signature-npm-1.2.0-ee92426f34-3324598712.zip differ diff --git a/.yarn/cache/human-signals-npm-1.1.1-616b2586c2-d587647c9e.zip b/.yarn/cache/human-signals-npm-1.1.1-616b2586c2-d587647c9e.zip new file mode 100644 index 000000000..1dcc5877f Binary files /dev/null and b/.yarn/cache/human-signals-npm-1.1.1-616b2586c2-d587647c9e.zip differ diff --git a/.yarn/cache/image-size-npm-1.0.2-ed5424d843-01745fdb47.zip b/.yarn/cache/image-size-npm-1.0.2-ed5424d843-01745fdb47.zip new file mode 100644 index 000000000..a50468605 Binary files /dev/null and b/.yarn/cache/image-size-npm-1.0.2-ed5424d843-01745fdb47.zip differ diff --git a/.yarn/cache/immediate-npm-3.0.6-c27588a2d3-f9b3486477.zip b/.yarn/cache/immediate-npm-3.0.6-c27588a2d3-f9b3486477.zip new file mode 100644 index 000000000..d3f74981e Binary files /dev/null and b/.yarn/cache/immediate-npm-3.0.6-c27588a2d3-f9b3486477.zip differ diff --git a/.yarn/cache/invert-kv-npm-3.0.1-727c460352-782c44c97f.zip b/.yarn/cache/invert-kv-npm-3.0.1-727c460352-782c44c97f.zip new file mode 100644 index 000000000..9b2a222ab Binary files /dev/null and b/.yarn/cache/invert-kv-npm-3.0.1-727c460352-782c44c97f.zip differ diff --git a/.yarn/cache/is-absolute-npm-0.1.7-650ff7ee16-5f26dc3616.zip b/.yarn/cache/is-absolute-npm-0.1.7-650ff7ee16-5f26dc3616.zip new file mode 100644 index 000000000..aee9f91b8 Binary files /dev/null and b/.yarn/cache/is-absolute-npm-0.1.7-650ff7ee16-5f26dc3616.zip differ diff --git a/.yarn/cache/is-mergeable-object-npm-1.1.1-4e4fe8efd7-19a29bc618.zip b/.yarn/cache/is-mergeable-object-npm-1.1.1-4e4fe8efd7-19a29bc618.zip new file mode 100644 index 000000000..949eea016 Binary files /dev/null and b/.yarn/cache/is-mergeable-object-npm-1.1.1-4e4fe8efd7-19a29bc618.zip differ diff --git a/.yarn/cache/is-relative-npm-0.1.3-29185bb139-bfe53d31d2.zip b/.yarn/cache/is-relative-npm-0.1.3-29185bb139-bfe53d31d2.zip new file mode 100644 index 000000000..6466fbb4f Binary files /dev/null and b/.yarn/cache/is-relative-npm-0.1.3-29185bb139-bfe53d31d2.zip differ diff --git a/.yarn/cache/is-utf8-npm-0.2.1-46ab364e2f-167ccd2be8.zip b/.yarn/cache/is-utf8-npm-0.2.1-46ab364e2f-167ccd2be8.zip new file mode 100644 index 000000000..952563a49 Binary files /dev/null and b/.yarn/cache/is-utf8-npm-0.2.1-46ab364e2f-167ccd2be8.zip differ diff --git a/.yarn/cache/isexe-npm-1.1.2-a52e8e0453-a35523bc88.zip b/.yarn/cache/isexe-npm-1.1.2-a52e8e0453-a35523bc88.zip new file mode 100644 index 000000000..b8ba9767d Binary files /dev/null and b/.yarn/cache/isexe-npm-1.1.2-a52e8e0453-a35523bc88.zip differ diff --git a/.yarn/cache/isstream-npm-0.1.2-8581c75385-1eb2fe63a7.zip b/.yarn/cache/isstream-npm-0.1.2-8581c75385-1eb2fe63a7.zip new file mode 100644 index 000000000..7c1a1e171 Binary files /dev/null and b/.yarn/cache/isstream-npm-0.1.2-8581c75385-1eb2fe63a7.zip differ diff --git a/.yarn/cache/jed-npm-1.1.1-00d623c2ff-657949a281.zip b/.yarn/cache/jed-npm-1.1.1-00d623c2ff-657949a281.zip new file mode 100644 index 000000000..111f9888b Binary files /dev/null and b/.yarn/cache/jed-npm-1.1.1-00d623c2ff-657949a281.zip differ diff --git a/.yarn/cache/jose-npm-4.11.2-f3f8bb7bbb-bc9b2271c3.zip b/.yarn/cache/jose-npm-4.11.2-f3f8bb7bbb-bc9b2271c3.zip new file mode 100644 index 000000000..fde820d72 Binary files /dev/null and b/.yarn/cache/jose-npm-4.11.2-f3f8bb7bbb-bc9b2271c3.zip differ diff --git a/.yarn/cache/jsbn-npm-0.1.1-0eb7132404-e5ff29c1b8.zip b/.yarn/cache/jsbn-npm-0.1.1-0eb7132404-e5ff29c1b8.zip new file mode 100644 index 000000000..8ec54a26c Binary files /dev/null and b/.yarn/cache/jsbn-npm-0.1.1-0eb7132404-e5ff29c1b8.zip differ diff --git a/.yarn/cache/json-merge-patch-npm-1.0.2-c39aa8231c-06867dbb93.zip b/.yarn/cache/json-merge-patch-npm-1.0.2-c39aa8231c-06867dbb93.zip new file mode 100644 index 000000000..14a0bb8ec Binary files /dev/null and b/.yarn/cache/json-merge-patch-npm-1.0.2-c39aa8231c-06867dbb93.zip differ diff --git a/.yarn/cache/json-schema-npm-0.4.0-e776313070-66389434c3.zip b/.yarn/cache/json-schema-npm-0.4.0-e776313070-66389434c3.zip new file mode 100644 index 000000000..1946e3075 Binary files /dev/null and b/.yarn/cache/json-schema-npm-0.4.0-e776313070-66389434c3.zip differ diff --git a/.yarn/cache/jsprim-npm-1.4.2-1ae6cade9a-2ad1b9fdcc.zip b/.yarn/cache/jsprim-npm-1.4.2-1ae6cade9a-2ad1b9fdcc.zip new file mode 100644 index 000000000..955098325 Binary files /dev/null and b/.yarn/cache/jsprim-npm-1.4.2-1ae6cade9a-2ad1b9fdcc.zip differ diff --git a/.yarn/cache/jszip-npm-3.10.1-2862546cfb-abc77bfbe3.zip b/.yarn/cache/jszip-npm-3.10.1-2862546cfb-abc77bfbe3.zip new file mode 100644 index 000000000..aa825dede Binary files /dev/null and b/.yarn/cache/jszip-npm-3.10.1-2862546cfb-abc77bfbe3.zip differ diff --git a/.yarn/cache/lcid-npm-3.1.1-d480bf5066-7ebab7a269.zip b/.yarn/cache/lcid-npm-3.1.1-d480bf5066-7ebab7a269.zip new file mode 100644 index 000000000..c7cf9b889 Binary files /dev/null and b/.yarn/cache/lcid-npm-3.1.1-d480bf5066-7ebab7a269.zip differ diff --git a/.yarn/cache/lie-npm-3.3.0-35ddd11a4d-33102302cf.zip b/.yarn/cache/lie-npm-3.3.0-35ddd11a4d-33102302cf.zip new file mode 100644 index 000000000..bc2fb940f Binary files /dev/null and b/.yarn/cache/lie-npm-3.3.0-35ddd11a4d-33102302cf.zip differ diff --git a/.yarn/cache/lighthouse-logger-npm-1.3.0-3f60201e4a-82655f1862.zip b/.yarn/cache/lighthouse-logger-npm-1.3.0-3f60201e4a-82655f1862.zip new file mode 100644 index 000000000..1fecbf143 Binary files /dev/null and b/.yarn/cache/lighthouse-logger-npm-1.3.0-3f60201e4a-82655f1862.zip differ diff --git a/.yarn/cache/lines-and-columns-npm-2.0.3-68ede50723-5955363dfd.zip b/.yarn/cache/lines-and-columns-npm-2.0.3-68ede50723-5955363dfd.zip new file mode 100644 index 000000000..20fccc1c4 Binary files /dev/null and b/.yarn/cache/lines-and-columns-npm-2.0.3-68ede50723-5955363dfd.zip differ diff --git a/.yarn/cache/marky-npm-1.2.5-007e6cc885-823b946677.zip b/.yarn/cache/marky-npm-1.2.5-007e6cc885-823b946677.zip new file mode 100644 index 000000000..886d0928f Binary files /dev/null and b/.yarn/cache/marky-npm-1.2.5-007e6cc885-823b946677.zip differ diff --git a/.yarn/cache/mem-npm-5.1.1-2d4979148e-134ec3af9a.zip b/.yarn/cache/mem-npm-5.1.1-2d4979148e-134ec3af9a.zip new file mode 100644 index 000000000..03e47f19b Binary files /dev/null and b/.yarn/cache/mem-npm-5.1.1-2d4979148e-134ec3af9a.zip differ diff --git a/.yarn/cache/multimatch-npm-6.0.0-04c984409d-c04233765f.zip b/.yarn/cache/multimatch-npm-6.0.0-04c984409d-c04233765f.zip new file mode 100644 index 000000000..300ca357f Binary files /dev/null and b/.yarn/cache/multimatch-npm-6.0.0-04c984409d-c04233765f.zip differ diff --git a/.yarn/cache/mz-npm-2.7.0-ec3cef4ec2-8427de0ece.zip b/.yarn/cache/mz-npm-2.7.0-ec3cef4ec2-8427de0ece.zip new file mode 100644 index 000000000..faf79cab2 Binary files /dev/null and b/.yarn/cache/mz-npm-2.7.0-ec3cef4ec2-8427de0ece.zip differ diff --git a/.yarn/cache/node-domexception-npm-1.0.0-e1e813b76f-ee1d37dd2a.zip b/.yarn/cache/node-domexception-npm-1.0.0-e1e813b76f-ee1d37dd2a.zip new file mode 100644 index 000000000..d58ba924f Binary files /dev/null and b/.yarn/cache/node-domexception-npm-1.0.0-e1e813b76f-ee1d37dd2a.zip differ diff --git a/.yarn/cache/node-fetch-npm-3.3.0-45d971325c-e9936908d2.zip b/.yarn/cache/node-fetch-npm-3.3.0-45d971325c-e9936908d2.zip new file mode 100644 index 000000000..bc7fe4719 Binary files /dev/null and b/.yarn/cache/node-fetch-npm-3.3.0-45d971325c-e9936908d2.zip differ diff --git a/.yarn/cache/node-notifier-npm-10.0.1-7a3f9a97c4-ac09456152.zip b/.yarn/cache/node-notifier-npm-10.0.1-7a3f9a97c4-ac09456152.zip new file mode 100644 index 000000000..b419c3ffb Binary files /dev/null and b/.yarn/cache/node-notifier-npm-10.0.1-7a3f9a97c4-ac09456152.zip differ diff --git a/.yarn/cache/oauth-sign-npm-0.9.0-7aa9422221-8f5497a127.zip b/.yarn/cache/oauth-sign-npm-0.9.0-7aa9422221-8f5497a127.zip new file mode 100644 index 000000000..04d5896f7 Binary files /dev/null and b/.yarn/cache/oauth-sign-npm-0.9.0-7aa9422221-8f5497a127.zip differ diff --git a/.yarn/cache/on-exit-leak-free-npm-2.1.0-b522202aa1-7334d98b87.zip b/.yarn/cache/on-exit-leak-free-npm-2.1.0-b522202aa1-7334d98b87.zip new file mode 100644 index 000000000..2644e65a5 Binary files /dev/null and b/.yarn/cache/on-exit-leak-free-npm-2.1.0-b522202aa1-7334d98b87.zip differ diff --git a/.yarn/cache/os-locale-npm-5.0.0-8dc4f13073-294bbb412f.zip b/.yarn/cache/os-locale-npm-5.0.0-8dc4f13073-294bbb412f.zip new file mode 100644 index 000000000..41eeed2de Binary files /dev/null and b/.yarn/cache/os-locale-npm-5.0.0-8dc4f13073-294bbb412f.zip differ diff --git a/.yarn/cache/os-shim-npm-0.1.3-03d492dbf1-2172be6da7.zip b/.yarn/cache/os-shim-npm-0.1.3-03d492dbf1-2172be6da7.zip new file mode 100644 index 000000000..03bf02aa2 Binary files /dev/null and b/.yarn/cache/os-shim-npm-0.1.3-03d492dbf1-2172be6da7.zip differ diff --git a/.yarn/cache/p-is-promise-npm-2.1.0-47a48ac6a0-c9a8248c8b.zip b/.yarn/cache/p-is-promise-npm-2.1.0-47a48ac6a0-c9a8248c8b.zip new file mode 100644 index 000000000..6a596900b Binary files /dev/null and b/.yarn/cache/p-is-promise-npm-2.1.0-47a48ac6a0-c9a8248c8b.zip differ diff --git a/.yarn/cache/pako-npm-1.0.11-b8f1b69d3e-1be2bfa1f8.zip b/.yarn/cache/pako-npm-1.0.11-b8f1b69d3e-1be2bfa1f8.zip new file mode 100644 index 000000000..4a6767ba8 Binary files /dev/null and b/.yarn/cache/pako-npm-1.0.11-b8f1b69d3e-1be2bfa1f8.zip differ diff --git a/.yarn/cache/parse-json-npm-6.0.2-31d0bf29b6-b33d93abf8.zip b/.yarn/cache/parse-json-npm-6.0.2-31d0bf29b6-b33d93abf8.zip new file mode 100644 index 000000000..95fd095f9 Binary files /dev/null and b/.yarn/cache/parse-json-npm-6.0.2-31d0bf29b6-b33d93abf8.zip differ diff --git a/.yarn/cache/parse5-htmlparser2-tree-adapter-npm-7.0.0-38e1b3a974-fc5d01e077.zip b/.yarn/cache/parse5-htmlparser2-tree-adapter-npm-7.0.0-38e1b3a974-fc5d01e077.zip new file mode 100644 index 000000000..4bbb84fec Binary files /dev/null and b/.yarn/cache/parse5-htmlparser2-tree-adapter-npm-7.0.0-38e1b3a974-fc5d01e077.zip differ diff --git a/.yarn/cache/performance-now-npm-2.1.0-45e3ce7e49-534e641aa8.zip b/.yarn/cache/performance-now-npm-2.1.0-45e3ce7e49-534e641aa8.zip new file mode 100644 index 000000000..fa9ee04fe Binary files /dev/null and b/.yarn/cache/performance-now-npm-2.1.0-45e3ce7e49-534e641aa8.zip differ diff --git a/.yarn/cache/pino-abstract-transport-npm-1.0.0-a566611547-05dd0eda52.zip b/.yarn/cache/pino-abstract-transport-npm-1.0.0-a566611547-05dd0eda52.zip new file mode 100644 index 000000000..2f1379fb5 Binary files /dev/null and b/.yarn/cache/pino-abstract-transport-npm-1.0.0-a566611547-05dd0eda52.zip differ diff --git a/.yarn/cache/pino-npm-8.8.0-827ae46607-6925646922.zip b/.yarn/cache/pino-npm-8.8.0-827ae46607-6925646922.zip new file mode 100644 index 000000000..f65cda349 Binary files /dev/null and b/.yarn/cache/pino-npm-8.8.0-827ae46607-6925646922.zip differ diff --git a/.yarn/cache/pino-std-serializers-npm-6.1.0-849611aa5b-5e42327c24.zip b/.yarn/cache/pino-std-serializers-npm-6.1.0-849611aa5b-5e42327c24.zip new file mode 100644 index 000000000..77fe020ac Binary files /dev/null and b/.yarn/cache/pino-std-serializers-npm-6.1.0-849611aa5b-5e42327c24.zip differ diff --git a/.yarn/cache/process-warning-npm-2.1.0-9e82ce3778-2f22a3b8ec.zip b/.yarn/cache/process-warning-npm-2.1.0-9e82ce3778-2f22a3b8ec.zip new file mode 100644 index 000000000..7276e605e Binary files /dev/null and b/.yarn/cache/process-warning-npm-2.1.0-9e82ce3778-2f22a3b8ec.zip differ diff --git a/.yarn/cache/promise-toolbox-npm-0.21.0-2d31e797e6-549ad21b64.zip b/.yarn/cache/promise-toolbox-npm-0.21.0-2d31e797e6-549ad21b64.zip new file mode 100644 index 000000000..e08d92182 Binary files /dev/null and b/.yarn/cache/promise-toolbox-npm-0.21.0-2d31e797e6-549ad21b64.zip differ diff --git a/.yarn/cache/qs-npm-6.5.3-90b2635484-6f20bf08ca.zip b/.yarn/cache/qs-npm-6.5.3-90b2635484-6f20bf08ca.zip new file mode 100644 index 000000000..6714c3cff Binary files /dev/null and b/.yarn/cache/qs-npm-6.5.3-90b2635484-6f20bf08ca.zip differ diff --git a/.yarn/cache/queue-npm-6.0.2-ebbcf599cf-ebc2363924.zip b/.yarn/cache/queue-npm-6.0.2-ebbcf599cf-ebc2363924.zip new file mode 100644 index 000000000..df189658c Binary files /dev/null and b/.yarn/cache/queue-npm-6.0.2-ebbcf599cf-ebc2363924.zip differ diff --git a/.yarn/cache/quick-format-unescaped-npm-4.0.4-7e22c9b7dc-7bc32b9935.zip b/.yarn/cache/quick-format-unescaped-npm-4.0.4-7e22c9b7dc-7bc32b9935.zip new file mode 100644 index 000000000..8ce3d464d Binary files /dev/null and b/.yarn/cache/quick-format-unescaped-npm-4.0.4-7e22c9b7dc-7bc32b9935.zip differ diff --git a/.yarn/cache/readable-stream-npm-2.3.8-67a94c2cb1-6564546703.zip b/.yarn/cache/readable-stream-npm-2.3.8-67a94c2cb1-6564546703.zip new file mode 100644 index 000000000..e52c545b6 Binary files /dev/null and b/.yarn/cache/readable-stream-npm-2.3.8-67a94c2cb1-6564546703.zip differ diff --git a/.yarn/cache/readable-stream-npm-4.3.0-11c60fc281-5f8d5fc1eb.zip b/.yarn/cache/readable-stream-npm-4.3.0-11c60fc281-5f8d5fc1eb.zip new file mode 100644 index 000000000..22e4f11ee Binary files /dev/null and b/.yarn/cache/readable-stream-npm-4.3.0-11c60fc281-5f8d5fc1eb.zip differ diff --git a/.yarn/cache/real-require-npm-0.2.0-7f69dbc7b6-fa060f19f2.zip b/.yarn/cache/real-require-npm-0.2.0-7f69dbc7b6-fa060f19f2.zip new file mode 100644 index 000000000..49f436546 Binary files /dev/null and b/.yarn/cache/real-require-npm-0.2.0-7f69dbc7b6-fa060f19f2.zip differ diff --git a/.yarn/cache/relaxed-json-npm-1.0.3-3e2d5087af-339d119f3c.zip b/.yarn/cache/relaxed-json-npm-1.0.3-3e2d5087af-339d119f3c.zip new file mode 100644 index 000000000..613488b57 Binary files /dev/null and b/.yarn/cache/relaxed-json-npm-1.0.3-3e2d5087af-339d119f3c.zip differ diff --git a/.yarn/cache/request-npm-2.88.2-f4a57c72c4-4e112c087f.zip b/.yarn/cache/request-npm-2.88.2-f4a57c72c4-4e112c087f.zip new file mode 100644 index 000000000..9e727dd45 Binary files /dev/null and b/.yarn/cache/request-npm-2.88.2-f4a57c72c4-4e112c087f.zip differ diff --git a/.yarn/cache/safe-stable-stringify-npm-2.4.2-26d12f7937-0324ba2e40.zip b/.yarn/cache/safe-stable-stringify-npm-2.4.2-26d12f7937-0324ba2e40.zip new file mode 100644 index 000000000..c7b65f5a3 Binary files /dev/null and b/.yarn/cache/safe-stable-stringify-npm-2.4.2-26d12f7937-0324ba2e40.zip differ diff --git a/.yarn/cache/setimmediate-npm-1.0.5-54587459b6-c9a6f2c5b5.zip b/.yarn/cache/setimmediate-npm-1.0.5-54587459b6-c9a6f2c5b5.zip new file mode 100644 index 000000000..ec2aee7ef Binary files /dev/null and b/.yarn/cache/setimmediate-npm-1.0.5-54587459b6-c9a6f2c5b5.zip differ diff --git a/.yarn/cache/sha.js-npm-2.4.11-14868df4ca-ebd3f59d4b.zip b/.yarn/cache/sha.js-npm-2.4.11-14868df4ca-ebd3f59d4b.zip new file mode 100644 index 000000000..6d55cc05a Binary files /dev/null and b/.yarn/cache/sha.js-npm-2.4.11-14868df4ca-ebd3f59d4b.zip differ diff --git a/.yarn/cache/shell-quote-npm-1.7.3-76a78a6d77-aca58e73a3.zip b/.yarn/cache/shell-quote-npm-1.7.3-76a78a6d77-aca58e73a3.zip new file mode 100644 index 000000000..ab19bd91e Binary files /dev/null and b/.yarn/cache/shell-quote-npm-1.7.3-76a78a6d77-aca58e73a3.zip differ diff --git a/.yarn/cache/shellwords-npm-0.1.1-a091a78197-8d73a5e986.zip b/.yarn/cache/shellwords-npm-0.1.1-a091a78197-8d73a5e986.zip new file mode 100644 index 000000000..bfef172bb Binary files /dev/null and b/.yarn/cache/shellwords-npm-0.1.1-a091a78197-8d73a5e986.zip differ diff --git a/.yarn/cache/sign-addon-npm-5.2.0-ec719c0ded-ef66bfc1e5.zip b/.yarn/cache/sign-addon-npm-5.2.0-ec719c0ded-ef66bfc1e5.zip new file mode 100644 index 000000000..db5d4cb16 Binary files /dev/null and b/.yarn/cache/sign-addon-npm-5.2.0-ec719c0ded-ef66bfc1e5.zip differ diff --git a/.yarn/cache/sonic-boom-npm-3.2.1-ddac56c4bc-674d0af31c.zip b/.yarn/cache/sonic-boom-npm-3.2.1-ddac56c4bc-674d0af31c.zip new file mode 100644 index 000000000..3aefc17c7 Binary files /dev/null and b/.yarn/cache/sonic-boom-npm-3.2.1-ddac56c4bc-674d0af31c.zip differ diff --git a/.yarn/cache/spawn-sync-npm-1.0.15-ae144228c0-a280ff895b.zip b/.yarn/cache/spawn-sync-npm-1.0.15-ae144228c0-a280ff895b.zip new file mode 100644 index 000000000..5ced32c3d Binary files /dev/null and b/.yarn/cache/spawn-sync-npm-1.0.15-ae144228c0-a280ff895b.zip differ diff --git a/.yarn/cache/split2-npm-4.1.0-1c1a4bd984-ec581597cb.zip b/.yarn/cache/split2-npm-4.1.0-1c1a4bd984-ec581597cb.zip new file mode 100644 index 000000000..fd70b1d46 Binary files /dev/null and b/.yarn/cache/split2-npm-4.1.0-1c1a4bd984-ec581597cb.zip differ diff --git a/.yarn/cache/sshpk-npm-1.17.0-95f17f597f-ba109f65c8.zip b/.yarn/cache/sshpk-npm-1.17.0-95f17f597f-ba109f65c8.zip new file mode 100644 index 000000000..f3b155f79 Binary files /dev/null and b/.yarn/cache/sshpk-npm-1.17.0-95f17f597f-ba109f65c8.zip differ diff --git a/.yarn/cache/stream-to-array-npm-2.3.0-eaa32c31d8-7feaf63b38.zip b/.yarn/cache/stream-to-array-npm-2.3.0-eaa32c31d8-7feaf63b38.zip new file mode 100644 index 000000000..b8434b32b Binary files /dev/null and b/.yarn/cache/stream-to-array-npm-2.3.0-eaa32c31d8-7feaf63b38.zip differ diff --git a/.yarn/cache/stream-to-promise-npm-3.0.0-93b8af42c6-206905dc40.zip b/.yarn/cache/stream-to-promise-npm-3.0.0-93b8af42c6-206905dc40.zip new file mode 100644 index 000000000..c117cd7a5 Binary files /dev/null and b/.yarn/cache/stream-to-promise-npm-3.0.0-93b8af42c6-206905dc40.zip differ diff --git a/.yarn/cache/strip-bom-buf-npm-2.0.0-c9cdc07889-f2cd19e336.zip b/.yarn/cache/strip-bom-buf-npm-2.0.0-c9cdc07889-f2cd19e336.zip new file mode 100644 index 000000000..8da937e85 Binary files /dev/null and b/.yarn/cache/strip-bom-buf-npm-2.0.0-c9cdc07889-f2cd19e336.zip differ diff --git a/.yarn/cache/strip-bom-npm-5.0.0-b3bef6eb04-60a38bb756.zip b/.yarn/cache/strip-bom-npm-5.0.0-b3bef6eb04-60a38bb756.zip new file mode 100644 index 000000000..ba8856e7a Binary files /dev/null and b/.yarn/cache/strip-bom-npm-5.0.0-b3bef6eb04-60a38bb756.zip differ diff --git a/.yarn/cache/strip-bom-stream-npm-4.0.0-a8b84a835b-376717a110.zip b/.yarn/cache/strip-bom-stream-npm-4.0.0-a8b84a835b-376717a110.zip new file mode 100644 index 000000000..f309d1ddf Binary files /dev/null and b/.yarn/cache/strip-bom-stream-npm-4.0.0-a8b84a835b-376717a110.zip differ diff --git a/.yarn/cache/strip-json-comments-npm-5.0.0-8c82f56132-99cad07ccc.zip b/.yarn/cache/strip-json-comments-npm-5.0.0-8c82f56132-99cad07ccc.zip new file mode 100644 index 000000000..ea0392fb0 Binary files /dev/null and b/.yarn/cache/strip-json-comments-npm-5.0.0-8c82f56132-99cad07ccc.zip differ diff --git a/.yarn/cache/thenify-all-npm-1.6.0-96309bbc8b-dba7cc8a23.zip b/.yarn/cache/thenify-all-npm-1.6.0-96309bbc8b-dba7cc8a23.zip new file mode 100644 index 000000000..59a2bc6ce Binary files /dev/null and b/.yarn/cache/thenify-all-npm-1.6.0-96309bbc8b-dba7cc8a23.zip differ diff --git a/.yarn/cache/thenify-npm-3.3.1-030bedb22c-84e1b804bf.zip b/.yarn/cache/thenify-npm-3.3.1-030bedb22c-84e1b804bf.zip new file mode 100644 index 000000000..4710c403b Binary files /dev/null and b/.yarn/cache/thenify-npm-3.3.1-030bedb22c-84e1b804bf.zip differ diff --git a/.yarn/cache/thread-stream-npm-2.3.0-77ee67ae69-e9ea58f9f3.zip b/.yarn/cache/thread-stream-npm-2.3.0-77ee67ae69-e9ea58f9f3.zip new file mode 100644 index 000000000..c63c104a3 Binary files /dev/null and b/.yarn/cache/thread-stream-npm-2.3.0-77ee67ae69-e9ea58f9f3.zip differ diff --git a/.yarn/cache/tosource-npm-1.0.0-718e0580f4-683fc64700.zip b/.yarn/cache/tosource-npm-1.0.0-718e0580f4-683fc64700.zip new file mode 100644 index 000000000..798d03020 Binary files /dev/null and b/.yarn/cache/tosource-npm-1.0.0-718e0580f4-683fc64700.zip differ diff --git a/.yarn/cache/tough-cookie-npm-2.5.0-79a2fe43fe-16a8cd0902.zip b/.yarn/cache/tough-cookie-npm-2.5.0-79a2fe43fe-16a8cd0902.zip new file mode 100644 index 000000000..74e27e746 Binary files /dev/null and b/.yarn/cache/tough-cookie-npm-2.5.0-79a2fe43fe-16a8cd0902.zip differ diff --git a/.yarn/cache/tweetnacl-npm-0.14.5-a3f766c0d1-6061daba17.zip b/.yarn/cache/tweetnacl-npm-0.14.5-a3f766c0d1-6061daba17.zip new file mode 100644 index 000000000..2811987db Binary files /dev/null and b/.yarn/cache/tweetnacl-npm-0.14.5-a3f766c0d1-6061daba17.zip differ diff --git a/.yarn/cache/universalify-npm-1.0.0-eff81409f3-095a808f2b.zip b/.yarn/cache/universalify-npm-1.0.0-eff81409f3-095a808f2b.zip new file mode 100644 index 000000000..8b929f6b3 Binary files /dev/null and b/.yarn/cache/universalify-npm-1.0.0-eff81409f3-095a808f2b.zip differ diff --git a/.yarn/cache/verror-npm-1.10.0-c3f839c579-c431df0bed.zip b/.yarn/cache/verror-npm-1.10.0-c3f839c579-c431df0bed.zip new file mode 100644 index 000000000..e81972bde Binary files /dev/null and b/.yarn/cache/verror-npm-1.10.0-c3f839c579-c431df0bed.zip differ diff --git a/.yarn/cache/web-ext-npm-7.5.0-a87ab1a9cc-bac491442d.zip b/.yarn/cache/web-ext-npm-7.5.0-a87ab1a9cc-bac491442d.zip new file mode 100644 index 000000000..4088acfed Binary files /dev/null and b/.yarn/cache/web-ext-npm-7.5.0-a87ab1a9cc-bac491442d.zip differ diff --git a/.yarn/cache/web-streams-polyfill-npm-3.2.1-835bd3857e-b119c78574.zip b/.yarn/cache/web-streams-polyfill-npm-3.2.1-835bd3857e-b119c78574.zip new file mode 100644 index 000000000..847691560 Binary files /dev/null and b/.yarn/cache/web-streams-polyfill-npm-3.2.1-835bd3857e-b119c78574.zip differ diff --git a/.yarn/cache/webextension-polyfill-npm-0.10.0-3b4d48beb6-4a59036bda.zip b/.yarn/cache/webextension-polyfill-npm-0.10.0-3b4d48beb6-4a59036bda.zip new file mode 100644 index 000000000..523cff94b Binary files /dev/null and b/.yarn/cache/webextension-polyfill-npm-0.10.0-3b4d48beb6-4a59036bda.zip differ diff --git a/.yarn/cache/when-npm-3.7.7-311c8cc73d-e8cf81790c.zip b/.yarn/cache/when-npm-3.7.7-311c8cc73d-e8cf81790c.zip new file mode 100644 index 000000000..aaca31674 Binary files /dev/null and b/.yarn/cache/when-npm-3.7.7-311c8cc73d-e8cf81790c.zip differ diff --git a/.yarn/cache/which-npm-1.2.4-49f14c792e-988abcbf80.zip b/.yarn/cache/which-npm-1.2.4-49f14c792e-988abcbf80.zip new file mode 100644 index 000000000..31f067927 Binary files /dev/null and b/.yarn/cache/which-npm-1.2.4-49f14c792e-988abcbf80.zip differ diff --git a/.yarn/cache/winreg-npm-0.0.12-eb734971cc-633109ab71.zip b/.yarn/cache/winreg-npm-0.0.12-eb734971cc-633109ab71.zip new file mode 100644 index 000000000..8f2e145bb Binary files /dev/null and b/.yarn/cache/winreg-npm-0.0.12-eb734971cc-633109ab71.zip differ diff --git a/.yarn/cache/ws-npm-8.12.0-4e21348613-818ff3f874.zip b/.yarn/cache/ws-npm-8.12.0-4e21348613-818ff3f874.zip new file mode 100644 index 000000000..82f80c611 Binary files /dev/null and b/.yarn/cache/ws-npm-8.12.0-4e21348613-818ff3f874.zip differ diff --git a/.yarn/cache/zip-dir-npm-2.0.0-f7824a7a83-bfcfdefe41.zip b/.yarn/cache/zip-dir-npm-2.0.0-f7824a7a83-bfcfdefe41.zip new file mode 100644 index 000000000..5231b5a91 Binary files /dev/null and b/.yarn/cache/zip-dir-npm-2.0.0-f7824a7a83-bfcfdefe41.zip differ diff --git a/packages/clipper/.eslintrc.js b/packages/clipper/.eslintrc.js new file mode 100644 index 000000000..7403da73e --- /dev/null +++ b/packages/clipper/.eslintrc.js @@ -0,0 +1,16 @@ +module.exports = { + root: true, + extends: ['../../common.eslintrc.js'], + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, + ignorePatterns: ['**/*.spec.ts', '__mocks__'], + plugins: ['@typescript-eslint', 'prettier'], + env: { + browser: true, + }, + globals: { + __WEB_VERSION__: true, + }, +} diff --git a/packages/clipper/.gitignore b/packages/clipper/.gitignore new file mode 100644 index 000000000..21e375427 --- /dev/null +++ b/packages/clipper/.gitignore @@ -0,0 +1,2 @@ +dist +web-ext-artifacts diff --git a/packages/clipper/README.md b/packages/clipper/README.md new file mode 100644 index 000000000..2ab99a366 --- /dev/null +++ b/packages/clipper/README.md @@ -0,0 +1,53 @@ +# @standardnotes/clipper + +## Development flow + +- Run `yarn watch:web` in a terminal to watch changes in the `@standardnotes/web` package + +### Chromium + +- Run `yarn watch-mv3` in another terminal to watch changes in the extension source + +#### "Load unpacked" method + +- Go to `chrome://extensions` +- Enable `Developer mode` +- Click "Load unpacked" and select the `dist` folder in the current package + +You might need to manually press the reload button when you make changers + +#### CLI method + +```console +yarn run-chromium --chromium-profile=PATH/TO/PROFILE +``` + +- You might need to specify the Chromium binary using the `--chromium-binary` argument +- Running `yarn run-chromium` without the `--chromium-profile` argument will create a new temporary profile every time + +This method will automatically reload the extension when you make changes + +### Firefox + +- Run `yarn watch` in another terminal to watch changes in the extension source + +```console +yarn run-firefox --firefox-profile=PATH/TO/PROFILE +``` + +- You might need to specify the Firefox binary using the `--firefox` or `-f` argument +- Running `yarn run-firefox` without the `--firefox-profile` argument will create a new temporary profile every time + +## Build + +## Firefox + +```console +yarn build-firefox +``` + +## Chromium + +```console +yarn build-chromium +``` diff --git a/packages/clipper/images/icon128.png b/packages/clipper/images/icon128.png new file mode 100644 index 000000000..1a4a9a778 Binary files /dev/null and b/packages/clipper/images/icon128.png differ diff --git a/packages/clipper/images/icon16.png b/packages/clipper/images/icon16.png new file mode 100644 index 000000000..769f04756 Binary files /dev/null and b/packages/clipper/images/icon16.png differ diff --git a/packages/clipper/images/icon32.png b/packages/clipper/images/icon32.png new file mode 100644 index 000000000..a0304c438 Binary files /dev/null and b/packages/clipper/images/icon32.png differ diff --git a/packages/clipper/images/icon48.png b/packages/clipper/images/icon48.png new file mode 100644 index 000000000..0787ba87a Binary files /dev/null and b/packages/clipper/images/icon48.png differ diff --git a/packages/clipper/images/icon96.png b/packages/clipper/images/icon96.png new file mode 100644 index 000000000..ae94aa534 Binary files /dev/null and b/packages/clipper/images/icon96.png differ diff --git a/packages/clipper/package.json b/packages/clipper/package.json new file mode 100644 index 000000000..6b3678763 --- /dev/null +++ b/packages/clipper/package.json @@ -0,0 +1,35 @@ +{ + "name": "@standardnotes/clipper", + "description": "Web clipper browser extension for Standard Notes", + "version": "1.0.1", + "scripts": { + "build-mv2": "yarn clean && webpack --config ./webpack.config.prod.js", + "build-mv3": "yarn clean && MANIFEST_VERSION=3 webpack --config ./webpack.config.prod.js", + "watch:web": "BUILD_TARGET=clipper yarn workspace @standardnotes/web run watch", + "watch-mv2": "webpack --config ./webpack.config.dev.js --watch", + "watch-mv3": "MANIFEST_VERSION=3 webpack --config ./webpack.config.dev.js --watch", + "build-firefox": "BUILD_TARGET=clipper yarn build:web && EXT_TARGET=firefox yarn build-mv2 && web-ext build --source-dir ./dist --overwrite-dest", + "build-chromium": "BUILD_TARGET=clipper yarn build:web && EXT_TARGET=chromium yarn build-mv3 && web-ext build --source-dir ./dist --overwrite-dest", + "run-firefox": "web-ext run -t firefox-desktop --keep-profile-changes -s ./dist", + "run-chromium": "web-ext run -t chromium --keep-profile-changes -s ./dist", + "lint": "eslint src/ && yarn tsc", + "lint:fix": "eslint src/ --fix", + "tsc": "tsc --project tsconfig.json", + "clean": "rm -rf dist" + }, + "devDependencies": { + "@types/webextension-polyfill": "^0.10.0", + "babel-loader": "^9.1.0", + "copy-webpack-plugin": "11.0.0", + "eslint": "^8.29.0", + "eslint-config-prettier": "^8.5.0", + "ts-loader": "^9.4.2", + "typescript": "*", + "web-ext": "^7.5.0", + "webextension-polyfill": "^0.10.0", + "webpack": "*" + }, + "dependencies": { + "@mozilla/readability": "^0.4.2" + } +} diff --git a/packages/clipper/src/background/background.ts b/packages/clipper/src/background/background.ts new file mode 100644 index 000000000..0ada6e1c7 --- /dev/null +++ b/packages/clipper/src/background/background.ts @@ -0,0 +1,32 @@ +import { runtime, action, browserAction, windows, storage } from 'webextension-polyfill' +import { RuntimeMessage, RuntimeMessageTypes } from '../types/message' + +const isFirefox = navigator.userAgent.indexOf('Firefox/') !== -1 + +const openPopupAndClipSelection = async (payload: { title: string; content: string }) => { + await storage.local.set({ clip: payload }) + + if (isFirefox) { + const popupURL = await browserAction.getPopup({}) + await windows.create({ + type: 'detached_panel', + url: popupURL, + width: 350, + height: 450, + }) + return + } + + const openPopup = runtime.getManifest().manifest_version === 3 ? action.openPopup : browserAction.openPopup + + void openPopup() +} + +runtime.onMessage.addListener((message: RuntimeMessage) => { + if (message.type === RuntimeMessageTypes.OpenPopupWithSelection) { + if (!message.payload) { + return + } + void openPopupAndClipSelection(message.payload) + } +}) diff --git a/packages/clipper/src/content/content.ts b/packages/clipper/src/content/content.ts new file mode 100644 index 000000000..3b4fe1e09 --- /dev/null +++ b/packages/clipper/src/content/content.ts @@ -0,0 +1,119 @@ +import { runtime } from 'webextension-polyfill' +import { Readability } from '@mozilla/readability' +import { RuntimeMessage, RuntimeMessageTypes } from '../types/message' + +let isSelectingNodeForClipping = false + +runtime.onMessage.addListener(async (message: RuntimeMessage) => { + switch (message.type) { + case RuntimeMessageTypes.StartNodeSelection: { + isSelectingNodeForClipping = true + return + } + case RuntimeMessageTypes.HasSelection: { + const selection = window.getSelection() + + if (!selection) { + return false + } + + if (selection.rangeCount < 1) { + return false + } + + const range = selection.getRangeAt(0) + + return !range.collapsed + } + case RuntimeMessageTypes.GetSelection: { + const selection = window.getSelection() + + if (!selection || selection.rangeCount < 1) { + return + } + + const range = selection.getRangeAt(0) + + const result = document.createElement('div') + result.appendChild(range.cloneContents()) + + return { title: document.title, content: result.innerHTML, url: window.location.href } + } + case RuntimeMessageTypes.GetFullPage: { + return { title: document.title, content: document.body.innerHTML, url: window.location.href } + } + case RuntimeMessageTypes.GetArticle: { + const documentClone = document.cloneNode(true) as Document + const article = new Readability(documentClone).parse() + if (!article) { + return + } + return { title: article.title, content: article.content, url: window.location.href } + } + default: + return + } +}) + +const nodeOverlayElement = document.createElement('div') +nodeOverlayElement.style.border = '2px solid #086dd6' +nodeOverlayElement.style.position = 'fixed' +nodeOverlayElement.style.top = '0' +nodeOverlayElement.style.left = '0' +nodeOverlayElement.style.zIndex = '69420' +nodeOverlayElement.style.width = window.innerWidth + 'px' +nodeOverlayElement.style.height = window.innerHeight - 4 + 'px' +nodeOverlayElement.style.pointerEvents = 'none' +nodeOverlayElement.style.visibility = 'hidden' +nodeOverlayElement.id = 'sn-clipper-node-overlay' + +document.body.appendChild(nodeOverlayElement) + +window.addEventListener('mousemove', (event) => { + if (!isSelectingNodeForClipping) { + nodeOverlayElement.style.visibility = 'hidden' + return + } + nodeOverlayElement.style.visibility = '' + const { target } = event + if (!target || !(target instanceof HTMLElement)) { + return + } + const targetRect = target.getBoundingClientRect() + nodeOverlayElement.style.width = targetRect.width + 'px' + nodeOverlayElement.style.height = targetRect.height + 'px' + nodeOverlayElement.style.transform = `translate3d(${targetRect.x}px, ${targetRect.y}px, 0)` +}) + +const disableNodeSelection = () => { + isSelectingNodeForClipping = false + nodeOverlayElement.style.visibility = 'hidden' +} + +window.addEventListener('click', (event) => { + if (!isSelectingNodeForClipping) { + return + } + disableNodeSelection() + event.preventDefault() + event.stopPropagation() + const { target } = event + if (!target || !(target instanceof HTMLElement)) { + return + } + const title = document.title + const content = target.outerHTML + void runtime.sendMessage({ + type: RuntimeMessageTypes.OpenPopupWithSelection, + payload: { title, content, url: window.location.href }, + } as RuntimeMessage) +}) + +window.addEventListener('keydown', (event) => { + if (!isSelectingNodeForClipping) { + return + } + if (event.key === 'Escape') { + disableNodeSelection() + } +}) diff --git a/packages/clipper/src/manifest.v2.json b/packages/clipper/src/manifest.v2.json new file mode 100644 index 000000000..61c929017 --- /dev/null +++ b/packages/clipper/src/manifest.v2.json @@ -0,0 +1,33 @@ +{ + "manifest_version": 2, + "name": "Standard Notes Clipper", + "description": "Web clipper for Standard Notes", + "permissions": ["activeTab", "storage"], + "browser_action": { + "default_popup": "popup/index.html?route=extension" + }, + "background": { + "scripts": ["background.js"], + "persistent": false + }, + "content_scripts": [ + { + "matches": ["http://*/*", "https://*/*"], + "js": ["content.js"] + } + ], + "content_security_policy": "default-src 'self'; script-src 'self' 'wasm-eval' 'wasm-unsafe-eval'; worker-src blob:; connect-src * data: blob:; style-src 'unsafe-inline' 'self'; frame-src * blob:; img-src * data: blob:;", + "icons": { + "16": "images/icon16.png", + "32": "images/icon32.png", + "48": "images/icon48.png", + "96": "images/icon96.png", + "128": "images/icon128.png" + }, + "browser_specific_settings": { + "gecko": { + "id": "{9f917dfe-accd-4d3a-9685-33c3ac0ca643}", + "strict_min_version": "48.0" + } + } +} diff --git a/packages/clipper/src/manifest.v3.json b/packages/clipper/src/manifest.v3.json new file mode 100644 index 000000000..3fcedeb0b --- /dev/null +++ b/packages/clipper/src/manifest.v3.json @@ -0,0 +1,34 @@ +{ + "manifest_version": 3, + "name": "Standard Notes Clipper", + "description": "Web clipper for Standard Notes", + "permissions": ["activeTab", "storage"], + "action": { + "default_popup": "popup/index.html?route=extension" + }, + "background": { + "service_worker": "background.js" + }, + "content_scripts": [ + { + "matches": ["http://*/*", "https://*/*"], + "js": ["content.js"] + } + ], + "icons": { + "16": "images/icon16.png", + "32": "images/icon32.png", + "48": "images/icon48.png", + "96": "images/icon96.png", + "128": "images/icon128.png" + }, + "content_security_policy": { + "extension_pages": "default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; connect-src * data: blob:; style-src 'unsafe-inline' 'self'; frame-src * blob:; img-src * data: blob:;" + }, + "browser_specific_settings": { + "gecko": { + "id": "{9f917dfe-accd-4d3a-9685-33c3ac0ca643}", + "strict_min_version": "48.0" + } + } +} diff --git a/packages/clipper/src/popup/globals.js b/packages/clipper/src/popup/globals.js new file mode 100644 index 000000000..a53b73828 --- /dev/null +++ b/packages/clipper/src/popup/globals.js @@ -0,0 +1,7 @@ +window.defaultSyncServer = 'https://api.standardnotes.com' +window.defaultFilesHost = 'https://files.standardnotes.com' +window.enabledUnfinishedFeatures = false +window.websocketUrl = 'wss://sockets.standardnotes.com' +window.purchaseUrl = 'https://standardnotes.com/purchase' +window.plansUrl = 'https://standardnotes.com/plans' +window.dashboardUrl = 'https://standardnotes.com/dashboard' diff --git a/packages/clipper/src/popup/index.html b/packages/clipper/src/popup/index.html new file mode 100644 index 000000000..2d0753c6e --- /dev/null +++ b/packages/clipper/src/popup/index.html @@ -0,0 +1,26 @@ + + + + + + + + + Standard Notes + + + + + + + + + + + diff --git a/packages/clipper/src/types/message.ts b/packages/clipper/src/types/message.ts new file mode 100644 index 000000000..881f27870 --- /dev/null +++ b/packages/clipper/src/types/message.ts @@ -0,0 +1,36 @@ +export const RuntimeMessageTypes = { + GetArticle: 'get-article', + GetSelection: 'get-selection', + HasSelection: 'has-selection', + GetFullPage: 'get-full-page', + OpenPopupWithSelection: 'open-popup-with-selection', + StartNodeSelection: 'start-node-selection', +} as const + +export type RuntimeMessageType = typeof RuntimeMessageTypes[keyof typeof RuntimeMessageTypes] + +type MessagesWithClipPayload = typeof RuntimeMessageTypes.OpenPopupWithSelection + +export type ClipPayload = { + title: string + content: string + url: string +} + +export type RuntimeMessageReturnTypes = { + [RuntimeMessageTypes.GetArticle]: ClipPayload + [RuntimeMessageTypes.GetSelection]: ClipPayload + [RuntimeMessageTypes.HasSelection]: boolean + [RuntimeMessageTypes.GetFullPage]: ClipPayload + [RuntimeMessageTypes.OpenPopupWithSelection]: void + [RuntimeMessageTypes.StartNodeSelection]: void +} + +export type RuntimeMessage = + | { + type: MessagesWithClipPayload + payload: ClipPayload + } + | { + type: Exclude + } diff --git a/packages/clipper/src/utils/sendMessageToActiveTab.ts b/packages/clipper/src/utils/sendMessageToActiveTab.ts new file mode 100644 index 000000000..b4c94d11b --- /dev/null +++ b/packages/clipper/src/utils/sendMessageToActiveTab.ts @@ -0,0 +1,14 @@ +import { tabs } from 'webextension-polyfill' +import { RuntimeMessageReturnTypes, RuntimeMessageType } from '../types/message' + +export default async function sendMessageToActiveTab( + type: T, +): Promise { + const [activeTab] = await tabs.query({ active: true, currentWindow: true, windowType: 'normal' }) + + if (!activeTab || !activeTab.id) { + return + } + + return await tabs.sendMessage(activeTab.id, { type }) +} diff --git a/packages/clipper/tsconfig.json b/packages/clipper/tsconfig.json new file mode 100644 index 000000000..f4532a3fa --- /dev/null +++ b/packages/clipper/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "skipLibCheck": true, + "lib": [ + "ES2022" + ], + "target": "ES2019", + "module": "commonjs", + "moduleResolution": "node", + "allowJs": true, + "noEmit": true, + "strict": true, + "isolatedModules": false, + "esModuleInterop": true, + "resolveJsonModule": true, + "declaration": true, + "newLine": "lf", + "declarationDir": "dist/@types", + "baseUrl": ".", + "typeRoots": [ + "../../node_modules/@types", + "node_modules/@types" + ], + }, + "include": [ + "src/**/*" + ] +} \ No newline at end of file diff --git a/packages/clipper/webpack.config.dev.js b/packages/clipper/webpack.config.dev.js new file mode 100644 index 000000000..ed0895dd6 --- /dev/null +++ b/packages/clipper/webpack.config.dev.js @@ -0,0 +1,9 @@ +const { merge } = require('webpack-merge') +const config = require('./webpack.config.js') + +module.exports = (env, argv) => { + return merge(config(env, argv), { + mode: 'development', + devtool: 'cheap-module-source-map', + }) +} diff --git a/packages/clipper/webpack.config.js b/packages/clipper/webpack.config.js new file mode 100644 index 000000000..5aa33dbf4 --- /dev/null +++ b/packages/clipper/webpack.config.js @@ -0,0 +1,69 @@ +const CopyPlugin = require('copy-webpack-plugin') +const package = require('./package.json') + +module.exports = (env, argv) => { + const isProd = !argv.watch + + return { + entry: { + background: './src/background/background.ts', + content: './src/content/content.ts', + }, + output: { + filename: '[name].js', + }, + plugins: [ + new CopyPlugin({ + patterns: [ + { + from: '../web/dist', + to: './web', + globOptions: { + ignore: isProd ? ['**/app.js.map'] : [], + }, + }, + { + from: `./src/manifest.v${process.env.MANIFEST_VERSION || 2}.json`, + to: './manifest.json', + transform: (content) => { + const manifest = JSON.parse(content.toString()) + manifest.version = package.version + if (process.env.EXT_TARGET === 'chromium') { + delete manifest.browser_specific_settings + } + return JSON.stringify(manifest, null, 2) + }, + }, + { + from: './src/popup', + to: './popup', + }, + { + from: './images', + to: './images', + }, + ], + }), + ], + resolve: { + extensions: ['.ts', '.js'], + }, + module: { + rules: [ + { + test: /\.(js|ts)$/, + exclude: /node_modules/, + use: [ + 'babel-loader', + { + loader: 'ts-loader', + options: { + transpileOnly: true, + }, + }, + ], + }, + ], + }, + } +} diff --git a/packages/clipper/webpack.config.prod.js b/packages/clipper/webpack.config.prod.js new file mode 100644 index 000000000..e5ef3c428 --- /dev/null +++ b/packages/clipper/webpack.config.prod.js @@ -0,0 +1,9 @@ +const { merge } = require('webpack-merge') +const config = require('./webpack.config.js') + +module.exports = (env, argv) => { + return merge(config(env, argv), { + mode: 'production', + devtool: 'source-map', + }) +} diff --git a/packages/features/src/Domain/Feature/FeatureIdentifier.ts b/packages/features/src/Domain/Feature/FeatureIdentifier.ts index c2c489e38..51a5fcae1 100644 --- a/packages/features/src/Domain/Feature/FeatureIdentifier.ts +++ b/packages/features/src/Domain/Feature/FeatureIdentifier.ts @@ -36,6 +36,8 @@ export enum FeatureIdentifier { TaskEditor = 'org.standardnotes.simple-task-editor', TokenVaultEditor = 'org.standardnotes.token-vault', + Extension = 'org.standardnotes.extension', + DeprecatedMarkdownVisualEditor = 'org.standardnotes.markdown-visual-editor', DeprecatedBoldEditor = 'org.standardnotes.bold-editor', DeprecatedMarkdownBasicEditor = 'org.standardnotes.simple-markdown-editor', diff --git a/packages/features/src/Domain/Lists/ClientFeatures.ts b/packages/features/src/Domain/Lists/ClientFeatures.ts index 1cee8a03b..f42576a72 100644 --- a/packages/features/src/Domain/Lists/ClientFeatures.ts +++ b/packages/features/src/Domain/Lists/ClientFeatures.ts @@ -43,5 +43,13 @@ export function clientFeatures(): FeatureDescription[] { permission_name: PermissionName.Files, description: '', }, + { + name: 'Extension', + availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan], + availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser], + identifier: FeatureIdentifier.Extension, + permission_name: PermissionName.Extension, + description: '', + }, ] } diff --git a/packages/features/src/Domain/Permission/PermissionName.ts b/packages/features/src/Domain/Permission/PermissionName.ts index c690dc4cf..b278a16a9 100644 --- a/packages/features/src/Domain/Permission/PermissionName.ts +++ b/packages/features/src/Domain/Permission/PermissionName.ts @@ -40,4 +40,5 @@ export enum PermissionName { UniversalSecondFactor = 'server:universal-second-factor', SubscriptionSharing = 'server:subscription-sharing', SuperEditor = 'editor:super-editor', + Extension = 'app:extension', } diff --git a/packages/icons/src/Icons/ic-sn-logo-full.svg b/packages/icons/src/Icons/ic-sn-logo-full.svg index f1e356972..f86390de8 100644 --- a/packages/icons/src/Icons/ic-sn-logo-full.svg +++ b/packages/icons/src/Icons/ic-sn-logo-full.svg @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/packages/services/src/Domain/Item/ItemsClientInterface.ts b/packages/services/src/Domain/Item/ItemsClientInterface.ts index 27e7d0ce0..59368efcf 100644 --- a/packages/services/src/Domain/Item/ItemsClientInterface.ts +++ b/packages/services/src/Domain/Item/ItemsClientInterface.ts @@ -17,6 +17,7 @@ import { DisplayOptions, ItemsKeyInterface, ItemContent, + DecryptedPayload, } from '@standardnotes/models' export interface ItemsClientInterface { @@ -37,6 +38,15 @@ export interface ItemsClientInterface { createPayloadFromObject(object: DecryptedTransferPayload): DecryptedPayloadInterface + createTemplateItem< + C extends ItemContent = ItemContent, + I extends DecryptedItemInterface = DecryptedItemInterface, + >( + contentType: ContentType, + content?: C, + override?: Partial>, + ): I + get trashedItems(): SNNote[] setPrimaryItemDisplayOptions(options: DisplayOptions): void diff --git a/packages/ui-services/src/Route/Params/AppViewRouteParams.ts b/packages/ui-services/src/Route/Params/AppViewRouteParams.ts index b191b1148..9b650adf7 100644 --- a/packages/ui-services/src/Route/Params/AppViewRouteParams.ts +++ b/packages/ui-services/src/Route/Params/AppViewRouteParams.ts @@ -1,3 +1,3 @@ -export const ValidAppViewRoutes = ['u2f'] as const +export const ValidAppViewRoutes = ['u2f', 'extension'] as const export type AppViewRouteParam = typeof ValidAppViewRoutes[number] diff --git a/packages/ui-services/src/Route/RouteParser.ts b/packages/ui-services/src/Route/RouteParser.ts index ade6df172..bdd92ad64 100644 --- a/packages/ui-services/src/Route/RouteParser.ts +++ b/packages/ui-services/src/Route/RouteParser.ts @@ -102,7 +102,9 @@ export class RouteParser implements RouteParserInterface { return RouteType.Onboarding } - if (this.path !== RootRoutes.None) { + const isIndexPath = this.path.endsWith('index.html') + + if (this.path !== RootRoutes.None && !isIndexPath) { return RouteType.None } diff --git a/packages/web/package.json b/packages/web/package.json index f6e8c8bba..fc89ff363 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -107,6 +107,7 @@ "ts-jest": "^29.0.3", "ts-loader": "^9.4.2", "typescript": "*", + "webextension-polyfill": "^0.10.0", "webpack": "*", "webpack-dev-server": "*", "webpack-merge": "^5.8.0" diff --git a/packages/web/src/javascripts/Application/Application.ts b/packages/web/src/javascripts/Application/Application.ts index c229b0225..5220dbc26 100644 --- a/packages/web/src/javascripts/Application/Application.ts +++ b/packages/web/src/javascripts/Application/Application.ts @@ -410,8 +410,8 @@ export class WebApplication extends SNApplication implements WebApplicationInter return this.getViewControllerManager().subscriptionController.hasValidSubscription() } - openPurchaseFlow(): void { - this.getViewControllerManager().purchaseFlowController.openPurchaseFlow() + async openPurchaseFlow() { + await this.getViewControllerManager().purchaseFlowController.openPurchaseFlow() } addNativeMobileEventListener = (listener: NativeMobileEventListener) => { diff --git a/packages/web/src/javascripts/Components/ApplicationView/ApplicationView.tsx b/packages/web/src/javascripts/Components/ApplicationView/ApplicationView.tsx index 90699d3a8..e703dbaa9 100644 --- a/packages/web/src/javascripts/Components/ApplicationView/ApplicationView.tsx +++ b/packages/web/src/javascripts/Components/ApplicationView/ApplicationView.tsx @@ -9,7 +9,7 @@ import PreferencesViewWrapper from '@/Components/Preferences/PreferencesViewWrap import ChallengeModal from '@/Components/ChallengeModal/ChallengeModal' import NotesContextMenu from '@/Components/NotesContextMenu/NotesContextMenu' import PurchaseFlowWrapper from '@/Components/PurchaseFlow/PurchaseFlowWrapper' -import { FunctionComponent, useCallback, useEffect, useMemo, useState } from 'react' +import { FunctionComponent, useCallback, useEffect, useMemo, useState, lazy } from 'react' import RevisionHistoryModal from '@/Components/RevisionHistoryModal/RevisionHistoryModal' import PremiumModalProvider from '@/Hooks/usePremiumModal' import ConfirmSignoutContainer from '@/Components/ConfirmSignoutModal/ConfirmSignoutModal' @@ -36,6 +36,8 @@ type Props = { mainApplicationGroup: ApplicationGroup } +const LazyLoadedClipperView = lazy(() => import('../ClipperView/ClipperView')) + const ApplicationView: FunctionComponent = ({ application, mainApplicationGroup }) => { const platformString = getPlatformString() const [launched, setLaunched] = useState(false) @@ -174,6 +176,40 @@ const ApplicationView: FunctionComponent = ({ application, mainApplicatio return {renderChallenges()} } + const route = application.routeService.getRoute() + + if (route.type === RouteType.AppViewRoute && route.appViewRouteParam === 'extension') { + return ( + + + + + + + + + + {renderChallenges()} + + + + + + + + ) + } + return ( @@ -208,7 +244,6 @@ const ApplicationView: FunctionComponent = ({ application, mainApplicatio {renderChallenges()} <> Promise } -const ChangeEditorButton: FunctionComponent = ({ - application, - viewControllerManager, - onClickPreprocessing, -}: Props) => { +const ChangeEditorButton: FunctionComponent = ({ viewControllerManager, onClickPreprocessing }: Props) => { + const application = useApplication() + const note = viewControllerManager.notesController.firstSelectedNote const [isOpen, setIsOpen] = useState(false) const buttonRef = useRef(null) diff --git a/packages/web/src/javascripts/Components/ClipperView/ClippedNoteView.tsx b/packages/web/src/javascripts/Components/ClipperView/ClippedNoteView.tsx new file mode 100644 index 000000000..3236652fb --- /dev/null +++ b/packages/web/src/javascripts/Components/ClipperView/ClippedNoteView.tsx @@ -0,0 +1,125 @@ +import { useCallback, useEffect, useRef, useState } from 'react' +import { useApplication } from '../ApplicationProvider' +import Icon from '../Icon/Icon' +import { confirmDialog } from '@standardnotes/ui-services' +import { BlocksEditorComposer } from '../SuperEditor/BlocksEditorComposer' +import { BlocksEditor } from '../SuperEditor/BlocksEditor' +import { SNNote } from '@standardnotes/snjs' +import { NoteSyncController } from '@/Controllers/NoteSyncController' +import LinkedItemBubblesContainer from '../LinkedItems/LinkedItemBubblesContainer' +import { LinkingController } from '@/Controllers/LinkingController' +import Button from '../Button/Button' +import Spinner from '../Spinner/Spinner' + +const ClippedNoteView = ({ + note, + linkingController, + clearClip, + isFirefoxPopup, +}: { + note: SNNote + linkingController: LinkingController + clearClip: () => void + isFirefoxPopup: boolean +}) => { + const application = useApplication() + + const syncController = useRef(new NoteSyncController(application, note)) + useEffect(() => { + const currentController = syncController.current + return () => { + currentController.deinit() + } + }, []) + + const [title, setTitle] = useState(() => note.title) + useEffect(() => { + void syncController.current.saveAndAwaitLocalPropagation({ + title, + isUserModified: true, + dontGeneratePreviews: true, + }) + }, [application.items, title]) + + const handleChange = useCallback(async (value: string, preview: string) => { + void syncController.current.saveAndAwaitLocalPropagation({ + text: value, + isUserModified: true, + previews: { + previewPlain: preview, + previewHtml: undefined, + }, + }) + }, []) + + const [isDiscarding, setIsDiscarding] = useState(false) + const discardNote = useCallback(async () => { + if ( + await confirmDialog({ + text: 'Are you sure you want to discard this clip?', + confirmButtonText: 'Discard', + confirmButtonStyle: 'danger', + }) + ) { + setIsDiscarding(true) + application.mutator + .deleteItem(note) + .then(() => { + if (isFirefoxPopup) { + window.close() + } + clearClip() + }) + .catch(console.error) + .finally(() => setIsDiscarding(false)) + } + }, [application.mutator, clearClip, isFirefoxPopup, note]) + + return ( +
+
+
+ {!isFirefoxPopup && ( + + )} + +
+ { + setTitle(event.target.value) + }} + /> + +
+
+ + + +
+
+ ) +} + +export default ClippedNoteView diff --git a/packages/web/src/javascripts/Components/ClipperView/ClipperView.tsx b/packages/web/src/javascripts/Components/ClipperView/ClipperView.tsx new file mode 100644 index 000000000..5295b1925 --- /dev/null +++ b/packages/web/src/javascripts/Components/ClipperView/ClipperView.tsx @@ -0,0 +1,327 @@ +import { ApplicationGroup } from '@/Application/ApplicationGroup' +import { ViewControllerManager } from '@/Controllers/ViewControllerManager' +import { SNLogoFull } from '@standardnotes/icons' +import { useCallback, useEffect, useState } from 'react' +import { AccountMenuPane } from '../AccountMenu/AccountMenuPane' +import MenuPaneSelector from '../AccountMenu/MenuPaneSelector' +import { useApplication } from '../ApplicationProvider' +import Icon from '../Icon/Icon' +import Menu from '../Menu/Menu' +import MenuItem from '../Menu/MenuItem' +import { storage as extensionStorage, windows } from 'webextension-polyfill' +import sendMessageToActiveTab from '@standardnotes/clipper/src/utils/sendMessageToActiveTab' +import { ClipPayload, RuntimeMessageTypes } from '@standardnotes/clipper/src/types/message' +import { confirmDialog } from '@standardnotes/ui-services' +import { + ApplicationEvent, + ContentType, + FeatureIdentifier, + FeatureStatus, + NoteContent, + NoteType, + SNNote, +} from '@standardnotes/snjs' +import { addToast, ToastType } from '@standardnotes/toast' +import { getSuperJSONFromClipPayload } from './getSuperJSONFromClipHTML' +import ClippedNoteView from './ClippedNoteView' +import { PremiumFeatureIconClass, PremiumFeatureIconName } from '../Icon/PremiumFeatureIcon' +import Button from '../Button/Button' +import { openSubscriptionDashboard } from '@/Utils/ManageSubscription' +import { useStateRef } from '@/Hooks/useStateRef' + +const Header = () => ( +
+ +
+) + +const ClipperView = ({ + viewControllerManager, + applicationGroup, +}: { + viewControllerManager: ViewControllerManager + applicationGroup: ApplicationGroup +}) => { + const application = useApplication() + + const [currentWindow, setCurrentWindow] = useState>>() + useEffect(() => { + windows + .getCurrent({ + populate: true, + }) + .then((window) => { + setCurrentWindow(window) + }) + .catch(console.error) + }, []) + const isFirefoxPopup = !!currentWindow && currentWindow.type === 'popup' && currentWindow.incognito === false + + const [user, setUser] = useState(() => application.getUser()) + const [isEntitledToExtension, setIsEntitled] = useState( + () => application.features.getFeatureStatus(FeatureIdentifier.Extension) === FeatureStatus.Entitled, + ) + const isEntitledRef = useStateRef(isEntitledToExtension) + const hasSubscription = application.hasValidSubscription() + useEffect(() => { + return application.addEventObserver(async (event) => { + switch (event) { + case ApplicationEvent.SignedIn: + case ApplicationEvent.SignedOut: + case ApplicationEvent.UserRolesChanged: + setUser(application.getUser()) + setIsEntitled(application.features.getFeatureStatus(FeatureIdentifier.Extension) === FeatureStatus.Entitled) + break + case ApplicationEvent.FeaturesUpdated: + setIsEntitled(application.features.getFeatureStatus(FeatureIdentifier.Extension) === FeatureStatus.Entitled) + break + } + }) + }, [application]) + + const [menuPane, setMenuPane] = useState() + + const activateRegisterPane = useCallback(() => { + setMenuPane(AccountMenuPane.Register) + }, [setMenuPane]) + + const activateSignInPane = useCallback(() => { + setMenuPane(AccountMenuPane.SignIn) + }, [setMenuPane]) + + const showSignOutConfirmation = useCallback(async () => { + if ( + await confirmDialog({ + title: 'Sign Out', + text: 'Are you sure you want to sign out?', + confirmButtonText: 'Sign Out', + confirmButtonStyle: 'danger', + cancelButtonText: 'Cancel', + }) + ) { + await application.user.signOut() + } + }, [application.user]) + + const [hasSelection, setHasSelection] = useState(false) + useEffect(() => { + if (!user) { + return + } + + try { + const checkIfPageHasSelection = async () => { + setHasSelection(Boolean(await sendMessageToActiveTab(RuntimeMessageTypes.HasSelection))) + } + + void checkIfPageHasSelection() + } catch (error) { + console.error(error) + } + }, [user]) + + const [clipPayload, setClipPayload] = useState() + useEffect(() => { + const getClipFromStorage = async () => { + const result = await extensionStorage.local.get('clip') + if (!result.clip) { + return + } + setClipPayload(result.clip) + void extensionStorage.local.remove('clip') + } + + void getClipFromStorage() + }, []) + + const clearClip = useCallback(() => { + setClipPayload(undefined) + }, []) + + const [clippedNote, setClippedNote] = useState() + useEffect(() => { + if (!isEntitledRef.current) { + return + } + + async function createNoteFromClip() { + if (!clipPayload) { + setClippedNote(undefined) + return + } + if (!clipPayload.content) { + addToast({ + type: ToastType.Error, + message: 'No content to clip', + }) + return + } + + const editorStateJSON = await getSuperJSONFromClipPayload(clipPayload) + + const note = application.items.createTemplateItem(ContentType.Note, { + title: clipPayload.title, + text: editorStateJSON, + editorIdentifier: FeatureIdentifier.SuperEditor, + noteType: NoteType.Super, + references: [], + }) + + void application.items.insertItem(note).then((note) => { + setClippedNote(note as SNNote) + addToast({ + type: ToastType.Success, + message: 'Note clipped successfully', + }) + void application.sync.sync() + }) + } + + void createNoteFromClip() + }, [application.items, application.sync, clipPayload, isEntitledRef]) + + const upgradePlan = useCallback(async () => { + if (hasSubscription) { + await openSubscriptionDashboard(application) + } else { + await application.openPurchaseFlow() + } + window.close() + }, [application, hasSubscription]) + + if (user && !isEntitledToExtension) { + return ( + <> +
+
+
+ +
+
Enable Advanced Features
+
+ To take advantage of Web Clipper and other advanced features, upgrade + your current plan. +
+ + +
+ + ) + } + + if (clippedNote) { + return ( + <> +
+ + + ) + } + + if (!user) { + return ( + <> +
+ {menuPane ? ( +
+ setMenuPane(undefined)} + /> +
+ ) : ( + + + + Create free account + + + + Sign in + + + )} + + ) + } + + return ( + <> +
+
+ + { + const payload = await sendMessageToActiveTab(RuntimeMessageTypes.GetFullPage) + if (!payload) { + return + } + setClipPayload(payload) + }} + > + Clip full page + + { + const payload = await sendMessageToActiveTab(RuntimeMessageTypes.GetArticle) + if (!payload) { + return + } + setClipPayload(payload) + }} + > + Clip article + + { + const payload = await sendMessageToActiveTab(RuntimeMessageTypes.GetSelection) + if (!payload) { + return + } + setClipPayload(payload) + }} + > + Clip current selection + + { + void sendMessageToActiveTab(RuntimeMessageTypes.StartNodeSelection) + window.close() + }} + > + Select elements to clip + +
+
You're signed in as:
+
{user.email}
+ {application.getHost()} +
+ + + Sign out + +
+
+ + ) +} + +export default ClipperView diff --git a/packages/web/src/javascripts/Components/ClipperView/getSuperJSONFromClipHTML.tsx b/packages/web/src/javascripts/Components/ClipperView/getSuperJSONFromClipHTML.tsx new file mode 100644 index 000000000..acbb420a9 --- /dev/null +++ b/packages/web/src/javascripts/Components/ClipperView/getSuperJSONFromClipHTML.tsx @@ -0,0 +1,59 @@ +import { $createParagraphNode, $getRoot, $insertNodes, LexicalNode } from 'lexical' +import { $generateNodesFromDOM } from '../SuperEditor/Lexical/Utils/generateNodesFromDOM' +import { createHeadlessEditor } from '@lexical/headless' +import { BlockEditorNodes } from '../SuperEditor/Lexical/Nodes/AllNodes' +import BlocksEditorTheme from '../SuperEditor/Lexical/Theme/Theme' +import { ClipPayload } from '@standardnotes/clipper/src/types/message' + +export const getSuperJSONFromClipPayload = async (clipPayload: ClipPayload) => { + const editor = createHeadlessEditor({ + namespace: 'BlocksEditor', + theme: BlocksEditorTheme, + editable: false, + onError: (error: Error) => console.error(error), + nodes: [...BlockEditorNodes], + }) + + await new Promise((resolve) => { + editor.update(() => { + const parser = new DOMParser() + + const clipSourceDOM = parser.parseFromString( + `

Clip source: ${clipPayload.url}

`, + 'text/html', + ) + const clipSourceParagraphNode = $generateNodesFromDOM(editor, clipSourceDOM).concat( + $createParagraphNode(), + $createParagraphNode(), + ) + $getRoot().select() + $insertNodes(clipSourceParagraphNode) + + const dom = parser.parseFromString(clipPayload.content, 'text/html') + const generatedNodes = $generateNodesFromDOM(editor, dom) + const nodesToInsert: LexicalNode[] = [] + generatedNodes.forEach((node) => { + const type = node.getType() + + // Wrap text & link nodes with paragraph since they can't + // be top-level nodes in Super + if (type === 'text' || type === 'link') { + const paragraphNode = $createParagraphNode() + paragraphNode.append(node) + nodesToInsert.push(paragraphNode) + return + } else { + nodesToInsert.push(node) + } + + nodesToInsert.push($createParagraphNode()) + }) + $getRoot().selectEnd() + $insertNodes(nodesToInsert.concat($createParagraphNode())) + + resolve() + }) + }) + + return JSON.stringify(editor.getEditorState().toJSON()) +} diff --git a/packages/web/src/javascripts/Components/ContentTableView/ContentTableView.tsx b/packages/web/src/javascripts/Components/ContentTableView/ContentTableView.tsx index 4f312ce8b..4013efa91 100644 --- a/packages/web/src/javascripts/Components/ContentTableView/ContentTableView.tsx +++ b/packages/web/src/javascripts/Components/ContentTableView/ContentTableView.tsx @@ -55,7 +55,6 @@ const ContextMenuCell = ({ notesController: NotesController historyModalController: HistoryModalController }) => { - const application = useApplication() const [contextMenuVisible, setContextMenuVisible] = useState(false) const anchorElementRef = useRef(null) @@ -112,7 +111,6 @@ const ContextMenuCell = ({ {allItemsAreNotes && ( { +const LinkedItemBubblesContainer = ({ item, linkingController, hideToggle = false }: Props) => { const { toggleAppPane } = useResponsiveAppPane() const commandService = useCommandService() - const { unlinkItemFromSelectedItem: unlinkItem, activateItem } = linkingController + const { unlinkItems, activateItem } = linkingController + const unlinkItem = useCallback( + async (itemToUnlink: LinkableItem) => { + void unlinkItems(item, itemToUnlink) + }, + [item, unlinkItems], + ) const { notesLinkedToItem, filesLinkedToItem, tagsLinkedToItem, notesLinkingToItem, filesLinkingToItem } = useItemLinks(item) @@ -143,7 +150,7 @@ const LinkedItemBubblesContainer = ({ item, linkingController }: Props) => { item={item} /> - {itemsToDisplay.length > 0 && ( + {itemsToDisplay.length > 0 && !hideToggle && ( , ) => { return ( @@ -34,9 +34,11 @@ const MenuItem = forwardRef( 'flex w-full cursor-pointer select-none border-0 bg-transparent px-3 py-2 text-left md:py-1.5', 'text-mobile-menu-item text-text hover:bg-contrast hover:text-foreground', 'focus:bg-info-backdrop focus:shadow-none md:text-tablet-menu-item lg:text-menu-item', + 'disabled:cursor-not-allowed disabled:opacity-60', className, className.includes('items-') ? '' : 'items-center', )} + disabled={disabled} {...props} > {shortcut && } diff --git a/packages/web/src/javascripts/Components/MultipleSelectedNotes/MultipleSelectedNotes.tsx b/packages/web/src/javascripts/Components/MultipleSelectedNotes/MultipleSelectedNotes.tsx index 0a865dba5..b53d4b92d 100644 --- a/packages/web/src/javascripts/Components/MultipleSelectedNotes/MultipleSelectedNotes.tsx +++ b/packages/web/src/javascripts/Components/MultipleSelectedNotes/MultipleSelectedNotes.tsx @@ -47,7 +47,6 @@ const MultipleSelectedNotes = ({ void)[] = [] private disposers: (() => void)[] = [] - private saveTimeout?: ReturnType private defaultTagUuid: UuidString | undefined private defaultTag?: SNTag - private savingLocallyPromise: ReturnType> | null = null + + private syncController: NoteSyncController constructor( private application: WebApplication, @@ -56,15 +44,17 @@ export class NoteViewController implements ItemViewControllerInterface { if (this.defaultTagUuid) { this.defaultTag = this.application.items.findItem(this.defaultTagUuid) as SNTag } + + this.syncController = new NoteSyncController(this.application, this.item) } deinit(): void { - if (!this.savingLocallyPromise) { + if (!this.syncController.savingLocallyPromise) { this.performDeinitSafely() return } - void this.savingLocallyPromise.promise.then(() => { + void this.syncController.savingLocallyPromise.promise.then(() => { this.performDeinitSafely() }) } @@ -80,8 +70,6 @@ export class NoteViewController implements ItemViewControllerInterface { ;(this.item as unknown) = undefined this.innerValueChangeObservers.length = 0 - - this.saveTimeout = undefined } async initialize(): Promise { @@ -185,59 +173,11 @@ export class NoteViewController implements ItemViewControllerInterface { } } - public async saveAndAwaitLocalPropagation(params: { - title?: string - text?: string - isUserModified: boolean - bypassDebouncer?: boolean - dontGeneratePreviews?: boolean - previews?: { previewPlain: string; previewHtml?: string } - customMutate?: (mutator: NoteMutator) => void - }): Promise { + public async saveAndAwaitLocalPropagation(params: NoteSaveFunctionParams): Promise { if (this.needsInit) { throw Error('NoteViewController not initialized') } - this.savingLocallyPromise = Deferred() - - if (this.saveTimeout) { - clearTimeout(this.saveTimeout) - } - - const noDebounce = params.bypassDebouncer || this.application.noAccount() - - const syncDebouceMs = noDebounce - ? EditorSaveTimeoutDebounce.ImmediateChange - : this.application.isNativeMobileWeb() - ? EditorSaveTimeoutDebounce.NativeMobileWeb - : EditorSaveTimeoutDebounce.Desktop - - return new Promise((resolve) => { - this.saveTimeout = setTimeout(() => { - void this.undebouncedSave({ - ...params, - onLocalPropagationComplete: () => { - if (this.savingLocallyPromise) { - this.savingLocallyPromise.resolve() - } - resolve() - }, - }) - }, syncDebouceMs) - }) - } - - private async undebouncedSave(params: { - title?: string - text?: string - bypassDebouncer?: boolean - isUserModified?: boolean - dontGeneratePreviews?: boolean - previews?: { previewPlain: string; previewHtml?: string } - customMutate?: (mutator: NoteMutator) => void - onLocalPropagationComplete?: () => void - onRemoteSyncComplete?: () => void - }): Promise { log(LoggingDomain.NoteView, 'Saving note', params) const isTemplate = this.isTemplateNote @@ -246,46 +186,6 @@ export class NoteViewController implements ItemViewControllerInterface { await this.insertTemplatedNote() } - if (!this.application.items.findItem(this.item.uuid)) { - void this.application.alertService.alert(InfoStrings.InvalidNote) - return - } - - await this.application.mutator.changeItem( - this.item, - (mutator) => { - const noteMutator = mutator as NoteMutator - if (params.customMutate) { - params.customMutate(noteMutator) - } - - if (params.title != undefined) { - noteMutator.title = params.title - } - - if (params.text != undefined) { - noteMutator.text = params.text - } - - if (params.previews) { - noteMutator.preview_plain = params.previews.previewPlain - noteMutator.preview_html = params.previews.previewHtml - } else if (!params.dontGeneratePreviews && params.text != undefined) { - const noteText = params.text || '' - const truncate = noteText.length > NotePreviewCharLimit - const substring = noteText.substring(0, NotePreviewCharLimit) - const previewPlain = substring + (truncate ? StringEllipses : '') - noteMutator.preview_plain = previewPlain - noteMutator.preview_html = undefined - } - }, - params.isUserModified, - ) - - void this.application.sync.sync().then(() => { - params.onRemoteSyncComplete?.() - }) - - params.onLocalPropagationComplete?.() + await this.syncController.saveAndAwaitLocalPropagation(params) } } diff --git a/packages/web/src/javascripts/Components/NoteView/EditingDisabledBanner.tsx b/packages/web/src/javascripts/Components/NoteView/EditingDisabledBanner.tsx index 455b91f63..693d63102 100644 --- a/packages/web/src/javascripts/Components/NoteView/EditingDisabledBanner.tsx +++ b/packages/web/src/javascripts/Components/NoteView/EditingDisabledBanner.tsx @@ -1,38 +1,37 @@ -import { FunctionComponent } from 'react' +import { FunctionComponent, useState } from 'react' import Icon from '../Icon/Icon' type Props = { - onMouseLeave: () => void - onMouseOver: () => void onClick: () => void - showLockedIcon: boolean - lockText: string + noteLocked: boolean } -const EditingDisabledBanner: FunctionComponent = ({ - onMouseLeave, - onMouseOver, - onClick, - showLockedIcon, - lockText, -}) => { - const background = showLockedIcon ? 'bg-warning-faded' : 'bg-info-faded' - const iconColor = showLockedIcon ? 'text-accessory-tint-3' : 'text-accessory-tint-1' - const textColor = showLockedIcon ? 'text-warning' : 'text-accessory-tint-1' +const EditingDisabledBanner: FunctionComponent = ({ onClick, noteLocked }) => { + const [showDisabledCopy, setShowDisabledCopy] = useState(() => noteLocked) + + const background = showDisabledCopy ? 'bg-warning-faded' : 'bg-info-faded' + const iconColor = showDisabledCopy ? 'text-accessory-tint-3' : 'text-accessory-tint-1' + const textColor = showDisabledCopy ? 'text-warning' : 'text-accessory-tint-1' + + const text = showDisabledCopy ? 'Note editing disabled.' : 'Enable editing' return (
{ + setShowDisabledCopy(true) + }} + onMouseOver={() => { + setShowDisabledCopy(false) + }} onClick={onClick} > - {showLockedIcon ? ( + {showDisabledCopy ? ( ) : ( )} - {lockText} + {text}
) } diff --git a/packages/web/src/javascripts/Components/NoteView/NoteView.tsx b/packages/web/src/javascripts/Components/NoteView/NoteView.tsx index 8d86dceb3..5aea61fb0 100644 --- a/packages/web/src/javascripts/Components/NoteView/NoteView.tsx +++ b/packages/web/src/javascripts/Components/NoteView/NoteView.tsx @@ -46,7 +46,6 @@ import { NoteViewController } from './Controller/NoteViewController' import { PlainEditor, PlainEditorInterface } from './PlainEditor/PlainEditor' const MinimumStatusDuration = 400 -const NoteEditingDisabledText = 'Note editing disabled.' function sortAlphabetically(array: SNComponent[]): SNComponent[] { return array.sort((a, b) => (a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1)) @@ -59,12 +58,10 @@ type State = { editorStateDidLoad: boolean editorTitle: string isDesktop?: boolean - lockText: string marginResizersEnabled?: boolean noteLocked: boolean noteStatus?: NoteStatus saveError?: boolean - showLockedIcon: boolean showProtectedWarning: boolean spellcheck: boolean stackComponentViewers: ComponentViewerInterface[] @@ -116,10 +113,8 @@ class NoteView extends AbstractComponent { editorStateDidLoad: false, editorTitle: '', isDesktop: isDesktopApplication(), - lockText: NoteEditingDisabledText, noteStatus: undefined, noteLocked: this.controller.item.locked, - showLockedIcon: true, showProtectedWarning: false, spellcheck: true, stackComponentViewers: [], @@ -830,21 +825,8 @@ class NoteView extends AbstractComponent { {this.state.noteLocked && ( { - this.setState({ - lockText: NoteEditingDisabledText, - showLockedIcon: true, - }) - }} - onMouseOver={() => { - this.setState({ - lockText: 'Enable editing', - showLockedIcon: false, - }) - }} onClick={() => this.viewControllerManager.notesController.setLockSelectedNotes(!this.state.noteLocked)} - showLockedIcon={this.state.showLockedIcon} - lockText={this.state.lockText} + noteLocked={this.state.noteLocked} /> )} @@ -886,7 +868,6 @@ class NoteView extends AbstractComponent { featuresController={this.viewControllerManager.featuresController} /> @@ -895,7 +876,6 @@ class NoteView extends AbstractComponent { onClickPreprocessing={this.ensureNoteIsInsertedBeforeUIAction} /> { + const application = useApplication() + const [altKeyDown, setAltKeyDown] = useState(false) const { toggleAppPane } = useResponsiveAppPane() const commandService = useCommandService() diff --git a/packages/web/src/javascripts/Components/NotesOptions/NotesOptionsPanel.tsx b/packages/web/src/javascripts/Components/NotesOptions/NotesOptionsPanel.tsx index 42357dcda..6452e8a77 100644 --- a/packages/web/src/javascripts/Components/NotesOptions/NotesOptionsPanel.tsx +++ b/packages/web/src/javascripts/Components/NotesOptions/NotesOptionsPanel.tsx @@ -1,7 +1,6 @@ import { useCallback, useRef, useState } from 'react' import { observer } from 'mobx-react-lite' import NotesOptions from './NotesOptions' -import { WebApplication } from '@/Application/Application' import { NotesController } from '@/Controllers/NotesController/NotesController' import { NavigationController } from '@/Controllers/Navigation/NavigationController' import { HistoryModalController } from '@/Controllers/NoteHistory/HistoryModalController' @@ -11,7 +10,6 @@ import RoundIconButton from '../Button/RoundIconButton' import Menu from '../Menu/Menu' type Props = { - application: WebApplication navigationController: NavigationController notesController: NotesController linkingController: LinkingController @@ -20,7 +18,6 @@ type Props = { } const NotesOptionsPanel = ({ - application, navigationController, notesController, linkingController, @@ -57,7 +54,6 @@ const NotesOptionsPanel = ({ = ({ application, text }) => { if (application.isNativeIOS()) { application.showPremiumModal() } else { - application.openPurchaseFlow() + void application.openPurchaseFlow() } } catch (e) { setPurchaseFlowError(errorMessage) diff --git a/packages/web/src/javascripts/Components/Preferences/Panes/Account/Subscription/NoSubscription.tsx b/packages/web/src/javascripts/Components/Preferences/Panes/Account/Subscription/NoSubscription.tsx index 464588b93..0b22b6a69 100644 --- a/packages/web/src/javascripts/Components/Preferences/Panes/Account/Subscription/NoSubscription.tsx +++ b/packages/web/src/javascripts/Components/Preferences/Panes/Account/Subscription/NoSubscription.tsx @@ -18,7 +18,7 @@ const NoSubscription: FunctionComponent = ({ application }) => { if (application.isNativeIOS()) { application.showPremiumModal() } else { - application.openPurchaseFlow() + void application.openPurchaseFlow() } } catch (e) { setPurchaseFlowError(errorMessage) diff --git a/packages/web/src/javascripts/Components/PurchaseFlow/Panes/CreateAccount.tsx b/packages/web/src/javascripts/Components/PurchaseFlow/Panes/CreateAccount.tsx index 9c7627032..46a715423 100644 --- a/packages/web/src/javascripts/Components/PurchaseFlow/Panes/CreateAccount.tsx +++ b/packages/web/src/javascripts/Components/PurchaseFlow/Panes/CreateAccount.tsx @@ -89,7 +89,7 @@ const CreateAccount: FunctionComponent = ({ viewControllerManager, applic await application.register(email, password) viewControllerManager.purchaseFlowController.closePurchaseFlow() - viewControllerManager.purchaseFlowController.openPurchaseFlow() + void viewControllerManager.purchaseFlowController.openPurchaseFlow() } catch (err) { console.error(err) application.alertService.alert(err as string).catch(console.error) diff --git a/packages/web/src/javascripts/Components/PurchaseFlow/Panes/SignIn.tsx b/packages/web/src/javascripts/Components/PurchaseFlow/Panes/SignIn.tsx index 4f3296db3..c6c9f4d32 100644 --- a/packages/web/src/javascripts/Components/PurchaseFlow/Panes/SignIn.tsx +++ b/packages/web/src/javascripts/Components/PurchaseFlow/Panes/SignIn.tsx @@ -75,7 +75,7 @@ const SignIn: FunctionComponent = ({ viewControllerManager, application } throw new Error(response.data.error?.message) } else { viewControllerManager.purchaseFlowController.closePurchaseFlow() - viewControllerManager.purchaseFlowController.openPurchaseFlow() + void viewControllerManager.purchaseFlowController.openPurchaseFlow() } } catch (err) { console.error(err) diff --git a/packages/web/src/javascripts/Components/PurchaseFlow/PurchaseFlowView.tsx b/packages/web/src/javascripts/Components/PurchaseFlow/PurchaseFlowView.tsx index b5f50d808..2f7ab5c43 100644 --- a/packages/web/src/javascripts/Components/PurchaseFlow/PurchaseFlowView.tsx +++ b/packages/web/src/javascripts/Components/PurchaseFlow/PurchaseFlowView.tsx @@ -45,7 +45,7 @@ const PurchaseFlowView: FunctionComponent = ({ viewContro > - + { + let lexicalNodes: Array = [] + const elements = dom.body ? dom.body.childNodes : [] + + for (let i = 0; i < elements.length; i++) { + const element = elements[i] + + if (!IGNORE_TAGS.has(element.nodeName)) { + const lexicalNode = $createNodesFromDOM(element, editor) + + if (lexicalNode !== null) { + lexicalNodes = lexicalNodes.concat(lexicalNode) + } + } + } + + return lexicalNodes +} + +function getConversionFunction(domNode: Node, editor: LexicalEditor): DOMConversionFn | null { + const { nodeName } = domNode + + const cachedConversions = editor._htmlConversions.get(nodeName.toLowerCase()) + + let currentConversion: DOMConversion | null = null + + if (cachedConversions !== undefined) { + for (const cachedConversion of cachedConversions) { + const domConversion = cachedConversion(domNode) + + if ( + domConversion !== null && + (currentConversion === null || currentConversion.priority < domConversion.priority) + ) { + currentConversion = domConversion + } + } + } + + return currentConversion !== null ? currentConversion.conversion : null +} + +const IGNORE_TAGS = new Set(['STYLE', 'SCRIPT']) + +function $createNodesFromDOM( + node: Node, + editor: LexicalEditor, + forChildMap: Map = new Map(), + parentLexicalNode?: LexicalNode | null | undefined, + preformatted = false, +): Array { + let lexicalNodes: Array = [] + + if (IGNORE_TAGS.has(node.nodeName)) { + return lexicalNodes + } + + let currentLexicalNode = null + const transformFunction = getConversionFunction(node, editor) + const transformOutput = transformFunction ? transformFunction(node as HTMLElement, undefined, preformatted) : null + let postTransform = null + + if (transformOutput !== null) { + postTransform = transformOutput.after + currentLexicalNode = transformOutput.node + + if (currentLexicalNode !== null) { + for (const [, forChildFunction] of forChildMap) { + currentLexicalNode = forChildFunction(currentLexicalNode, parentLexicalNode) + + if (!currentLexicalNode) { + break + } + } + + if (currentLexicalNode) { + lexicalNodes.push(currentLexicalNode) + } + } + + if (transformOutput.forChild != null) { + forChildMap.set(node.nodeName, transformOutput.forChild) + } + } + + // If the DOM node doesn't have a transformer, we don't know what + // to do with it but we still need to process any childNodes. + const children = node.childNodes + let childLexicalNodes = [] + + for (let i = 0; i < children.length; i++) { + childLexicalNodes.push( + ...$createNodesFromDOM( + children[i], + editor, + new Map(forChildMap), + currentLexicalNode, + preformatted || (transformOutput && transformOutput.preformatted) === true, + ), + ) + } + + if (postTransform != null) { + childLexicalNodes = postTransform(childLexicalNodes) + } + + if (currentLexicalNode == null) { + // If it hasn't been converted to a LexicalNode, we hoist its children + // up to the same level as it. + lexicalNodes = lexicalNodes.concat(childLexicalNodes) + } else { + if ($isElementNode(currentLexicalNode)) { + // If the current node is a ElementNode after conversion, + // we can append all the children to it. + currentLexicalNode.append(...childLexicalNodes) + } + } + + return lexicalNodes +} diff --git a/packages/web/src/javascripts/Components/SuperEditor/Plugins/CollapsiblePlugin/CollapsibleContainerNode.ts b/packages/web/src/javascripts/Components/SuperEditor/Plugins/CollapsiblePlugin/CollapsibleContainerNode.ts index 93b934c5f..ae0a39468 100644 --- a/packages/web/src/javascripts/Components/SuperEditor/Plugins/CollapsiblePlugin/CollapsibleContainerNode.ts +++ b/packages/web/src/javascripts/Components/SuperEditor/Plugins/CollapsiblePlugin/CollapsibleContainerNode.ts @@ -112,7 +112,7 @@ export class CollapsibleContainerNode extends ElementNode { } getOpen(): boolean { - return this.getLatest().__open + return this.__open } toggleOpen(): void { diff --git a/packages/web/src/javascripts/Components/SuperEditor/Plugins/ImportPlugin/ImportPlugin.tsx b/packages/web/src/javascripts/Components/SuperEditor/Plugins/ImportPlugin/ImportPlugin.tsx index 2cda229ef..e88e4dc70 100644 --- a/packages/web/src/javascripts/Components/SuperEditor/Plugins/ImportPlugin/ImportPlugin.tsx +++ b/packages/web/src/javascripts/Components/SuperEditor/Plugins/ImportPlugin/ImportPlugin.tsx @@ -1,20 +1,22 @@ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext' import { useEffect } from 'react' import { $convertFromMarkdownString, TRANSFORMERS } from '@lexical/markdown' -import { $generateNodesFromDOM } from '@lexical/html' -import { $createParagraphNode, $createRangeSelection } from 'lexical' +import { $createParagraphNode, $createRangeSelection, LexicalEditor } from 'lexical' import { handleEditorChange } from '../../Utils' import { SuperNotePreviewCharLimit } from '../../SuperEditor' +import { $generateNodesFromDOM } from '../../Lexical/Utils/generateNodesFromDOM' /** Note that markdown conversion does not insert new lines. See: https://github.com/facebook/lexical/issues/2815 */ export default function ImportPlugin({ text, format, onChange, + customImportFunction, }: { text: string format: 'md' | 'html' onChange: (value: string, preview: string) => void + customImportFunction?: (editor: LexicalEditor, text: string) => void }): JSX.Element | null { const [editor] = useLexicalComposerContext() @@ -24,19 +26,24 @@ export default function ImportPlugin({ return } + if (customImportFunction) { + customImportFunction(editor, text) + return + } + editor.update(() => { if (format === 'md') { $convertFromMarkdownString(text, [...TRANSFORMERS]) } else { const parser = new DOMParser() const dom = parser.parseFromString(text, 'text/html') - const nodes = $generateNodesFromDOM(editor, dom) + const nodesToInsert = $generateNodesFromDOM(editor, dom) const selection = $createRangeSelection() const newLineNode = $createParagraphNode() - selection.insertNodes([newLineNode, ...nodes]) + selection.insertNodes([newLineNode, ...nodesToInsert]) } }) - }, [editor, text, format]) + }, [editor, text, format, customImportFunction]) useEffect(() => { return editor.registerUpdateListener(({ editorState }) => { diff --git a/packages/web/src/javascripts/Controllers/NoteSyncController.ts b/packages/web/src/javascripts/Controllers/NoteSyncController.ts new file mode 100644 index 000000000..c08a51b0c --- /dev/null +++ b/packages/web/src/javascripts/Controllers/NoteSyncController.ts @@ -0,0 +1,114 @@ +import { WebApplication } from '@/Application/Application' +import { NoteMutator, SNNote } from '@standardnotes/models' +import { InfoStrings } from '@standardnotes/snjs' +import { Deferred } from '@standardnotes/utils' +import { EditorSaveTimeoutDebounce } from '../Components/NoteView/Controller/EditorSaveTimeoutDebounce' + +const NotePreviewCharLimit = 160 + +export type NoteSaveFunctionParams = { + title?: string + text?: string + bypassDebouncer?: boolean + isUserModified?: boolean + dontGeneratePreviews?: boolean + previews?: { previewPlain: string; previewHtml?: string } + customMutate?: (mutator: NoteMutator) => void + onLocalPropagationComplete?: () => void + onRemoteSyncComplete?: () => void +} + +export class NoteSyncController { + savingLocallyPromise: ReturnType> | null = null + + private saveTimeout?: ReturnType + + constructor(private application: WebApplication, private item: SNNote) {} + + deinit() { + if (this.saveTimeout) { + clearTimeout(this.saveTimeout) + } + if (this.savingLocallyPromise) { + this.savingLocallyPromise.reject() + } + this.savingLocallyPromise = null + this.saveTimeout = undefined + ;(this.application as unknown) = undefined + ;(this.item as unknown) = undefined + } + + public async saveAndAwaitLocalPropagation(params: NoteSaveFunctionParams): Promise { + this.savingLocallyPromise = Deferred() + + if (this.saveTimeout) { + clearTimeout(this.saveTimeout) + } + + const noDebounce = params.bypassDebouncer || this.application.noAccount() + + const syncDebouceMs = noDebounce + ? EditorSaveTimeoutDebounce.ImmediateChange + : this.application.isNativeMobileWeb() + ? EditorSaveTimeoutDebounce.NativeMobileWeb + : EditorSaveTimeoutDebounce.Desktop + + return new Promise((resolve) => { + this.saveTimeout = setTimeout(() => { + void this.undebouncedSave({ + ...params, + onLocalPropagationComplete: () => { + if (this.savingLocallyPromise) { + this.savingLocallyPromise.resolve() + } + resolve() + }, + }) + }, syncDebouceMs) + }) + } + + private async undebouncedSave(params: NoteSaveFunctionParams): Promise { + if (!this.application.items.findItem(this.item.uuid)) { + void this.application.alertService.alert(InfoStrings.InvalidNote) + return + } + + await this.application.mutator.changeItem( + this.item, + (mutator) => { + const noteMutator = mutator as NoteMutator + if (params.customMutate) { + params.customMutate(noteMutator) + } + + if (params.title != undefined) { + noteMutator.title = params.title + } + + if (params.text != undefined) { + noteMutator.text = params.text + } + + if (params.previews) { + noteMutator.preview_plain = params.previews.previewPlain + noteMutator.preview_html = params.previews.previewHtml + } else if (!params.dontGeneratePreviews && params.text != undefined) { + const noteText = params.text || '' + const truncate = noteText.length > NotePreviewCharLimit + const substring = noteText.substring(0, NotePreviewCharLimit) + const previewPlain = substring + (truncate ? '...' : '') + noteMutator.preview_plain = previewPlain + noteMutator.preview_html = undefined + } + }, + params.isUserModified, + ) + + void this.application.sync.sync().then(() => { + params.onRemoteSyncComplete?.() + }) + + params.onLocalPropagationComplete?.() + } +} diff --git a/packages/web/src/javascripts/Controllers/PurchaseFlow/PurchaseFlowController.ts b/packages/web/src/javascripts/Controllers/PurchaseFlow/PurchaseFlowController.ts index 8ffc313de..6782594ff 100644 --- a/packages/web/src/javascripts/Controllers/PurchaseFlow/PurchaseFlowController.ts +++ b/packages/web/src/javascripts/Controllers/PurchaseFlow/PurchaseFlowController.ts @@ -27,7 +27,7 @@ export class PurchaseFlowController extends AbstractViewController { this.currentPane = currentPane } - openPurchaseFlow = (plan = AppleIAPProductId.ProPlanYearly): void => { + openPurchaseFlow = async (plan = AppleIAPProductId.ProPlanYearly) => { const user = this.application.getUser() if (!user) { this.isOpen = true @@ -35,9 +35,9 @@ export class PurchaseFlowController extends AbstractViewController { } if (this.application.isNativeIOS()) { - void this.beginIosIapPurchaseFlow(plan) + await this.beginIosIapPurchaseFlow(plan) } else { - loadPurchaseFlowUrl(this.application).catch(console.error) + await loadPurchaseFlowUrl(this.application) } } diff --git a/packages/web/src/javascripts/Event/ApplicationEventObserver.ts b/packages/web/src/javascripts/Event/ApplicationEventObserver.ts index 52dbde1e9..98dc56706 100644 --- a/packages/web/src/javascripts/Event/ApplicationEventObserver.ts +++ b/packages/web/src/javascripts/Event/ApplicationEventObserver.ts @@ -45,7 +45,7 @@ export class ApplicationEventObserver implements EventObserverInterface { const route = this.routeService.getRoute() switch (route.type) { case RouteType.Purchase: - this.purchaseFlowController.openPurchaseFlow() + void this.purchaseFlowController.openPurchaseFlow() break case RouteType.Settings: { diff --git a/packages/web/src/javascripts/Hooks/useListKeyboardNavigation.ts b/packages/web/src/javascripts/Hooks/useListKeyboardNavigation.ts index 1bffb53f1..88c6241fe 100644 --- a/packages/web/src/javascripts/Hooks/useListKeyboardNavigation.ts +++ b/packages/web/src/javascripts/Hooks/useListKeyboardNavigation.ts @@ -19,6 +19,34 @@ export const useListKeyboardNavigation = ( } }, []) + const getNextFocusableIndex = useCallback((currentIndex: number, items: HTMLButtonElement[]) => { + let nextIndex = currentIndex + 1 + if (nextIndex > items.length - 1) { + nextIndex = 0 + } + while (items[nextIndex].disabled) { + nextIndex++ + if (nextIndex > items.length - 1) { + nextIndex = 0 + } + } + return nextIndex + }, []) + + const getPreviousFocusableIndex = useCallback((currentIndex: number, items: HTMLButtonElement[]) => { + let previousIndex = currentIndex - 1 + if (previousIndex < 0) { + previousIndex = items.length - 1 + } + while (items[previousIndex].disabled) { + previousIndex-- + if (previousIndex < 0) { + previousIndex = items.length - 1 + } + } + return previousIndex + }, []) + useEffect(() => { if (container.current) { container.current.tabIndex = FOCUSABLE_BUT_NOT_TABBABLE @@ -37,22 +65,16 @@ export const useListKeyboardNavigation = ( listItems.current = Array.from(container.current?.querySelectorAll('button') as NodeListOf) if (e.key === KeyboardKey.Up) { - let previousIndex = focusedItemIndex.current - 1 - if (previousIndex < 0) { - previousIndex = listItems.current.length - 1 - } + const previousIndex = getPreviousFocusableIndex(focusedItemIndex.current, listItems.current) focusItemWithIndex(previousIndex) } if (e.key === KeyboardKey.Down) { - let nextIndex = focusedItemIndex.current + 1 - if (nextIndex > listItems.current.length - 1) { - nextIndex = 0 - } + const nextIndex = getNextFocusableIndex(focusedItemIndex.current, listItems.current) focusItemWithIndex(nextIndex) } }, - [container, focusItemWithIndex], + [container, focusItemWithIndex, getNextFocusableIndex, getPreviousFocusableIndex], ) const FIRST_ITEM_FOCUS_TIMEOUT = 20 @@ -66,12 +88,13 @@ export const useListKeyboardNavigation = ( } const selectedItemIndex = Array.from(items).findIndex((item) => item.dataset.selected) - const indexToFocus = selectedItemIndex > -1 ? selectedItemIndex : initialFocus + let indexToFocus = selectedItemIndex > -1 ? selectedItemIndex : initialFocus + indexToFocus = getNextFocusableIndex(indexToFocus, items) setTimeout(() => { focusItemWithIndex(indexToFocus, items) }, FIRST_ITEM_FOCUS_TIMEOUT) - }, [container, focusItemWithIndex, initialFocus]) + }, [container, focusItemWithIndex, getNextFocusableIndex, initialFocus]) useEffect(() => { if (shouldAutoFocus) { diff --git a/packages/web/web.webpack.config.js b/packages/web/web.webpack.config.js index 4837b7817..bda9d2fcd 100644 --- a/packages/web/web.webpack.config.js +++ b/packages/web/web.webpack.config.js @@ -8,6 +8,23 @@ require('dotenv').config() module.exports = (env) => { mergeWithEnvDefaults(env) + + const copyPluginPatterns = [ + { from: 'src/favicon', to: 'favicon' }, + { from: 'src/vendor', to: 'dist' }, + { from: 'src/404.html' }, + { from: 'src/422.html' }, + { from: 'src/500.html' }, + { from: 'src/index.html' }, + { from: 'src/manifest.webmanifest' }, + { from: 'src/robots.txt' }, + { from: 'src/.well-known', to: '.well-known' }, + ] + + if (process.env.BUILD_TARGET !== 'clipper') { + copyPluginPatterns.push({ from: 'src/components', to: 'components' }) + } + return { entry: './src/javascripts/index.ts', output: { @@ -36,18 +53,7 @@ module.exports = (env) => { ignoreOrder: true, // Enable to remove warnings about conflicting order }), new CopyWebpackPlugin({ - patterns: [ - { from: 'src/favicon', to: 'favicon' }, - { from: 'src/vendor', to: 'dist' }, - { from: 'src/components', to: 'components' }, - { from: 'src/404.html' }, - { from: 'src/422.html' }, - { from: 'src/500.html' }, - { from: 'src/index.html' }, - { from: 'src/manifest.webmanifest' }, - { from: 'src/robots.txt' }, - { from: 'src/.well-known', to: '.well-known' }, - ], + patterns: copyPluginPatterns, }), ], resolve: { diff --git a/packages/web/web.webpack.dev.js b/packages/web/web.webpack.dev.js index a29035182..c5313007d 100644 --- a/packages/web/web.webpack.dev.js +++ b/packages/web/web.webpack.dev.js @@ -8,6 +8,7 @@ module.exports = (env, argv) => { mergeWithEnvDefaults(env) return merge(config(env, argv), { mode: 'development', + devtool: process.env.BUILD_TARGET === 'extension' ? 'cheap-module-source-map' : 'inline-source-map', optimization: { minimize: false, }, diff --git a/yarn.lock b/yarn.lock index 1251af12c..9b3baa14c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,7 +22,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.18.6": version: 7.18.6 resolution: "@babel/code-frame@npm:7.18.6" dependencies: @@ -1971,6 +1971,15 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:7.20.13": + version: 7.20.13 + resolution: "@babel/runtime@npm:7.20.13" + dependencies: + regenerator-runtime: ^0.13.11 + checksum: 09b7a97a05c80540db6c9e4ddf8c5d2ebb06cae5caf3a87e33c33f27f8c4d49d9c67a2d72f1570e796045288fad569f98a26ceba0c4f5fad2af84b6ad855c4fb + languageName: node + linkType: hard + "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.8.4": version: 7.19.4 resolution: "@babel/runtime@npm:7.19.4" @@ -2333,6 +2342,37 @@ __metadata: languageName: node linkType: hard +"@devicefarmer/adbkit-logcat@npm:^2.1.2": + version: 2.1.2 + resolution: "@devicefarmer/adbkit-logcat@npm:2.1.2" + checksum: 4defd49b2a23840a187e68f3682b62482d20211ffcec4d097db69a919a03caad24311e20dfd45bd4f664ccee6ac57e555b8a952ff5ce41298ff71e5615275dd9 + languageName: node + linkType: hard + +"@devicefarmer/adbkit-monkey@npm:~1.2.0": + version: 1.2.1 + resolution: "@devicefarmer/adbkit-monkey@npm:1.2.1" + checksum: 6eab557f14941dfc4df63d0b21ca3296293b3e373de2f7ee9a064d274a230a819852812ffcb36186f387daff9750577121b13889f5f8354dc2294bc747e5ecf2 + languageName: node + linkType: hard + +"@devicefarmer/adbkit@npm:3.2.3": + version: 3.2.3 + resolution: "@devicefarmer/adbkit@npm:3.2.3" + dependencies: + "@devicefarmer/adbkit-logcat": ^2.1.2 + "@devicefarmer/adbkit-monkey": ~1.2.0 + bluebird: ~3.7 + commander: ^9.1.0 + debug: ~4.3.1 + node-forge: ^1.3.1 + split: ~1.0.1 + bin: + adbkit: bin/adbkit + checksum: 9298d59ca6cf93868fabe558a75f52cc91b35f8b0d26c358460198eb4c6d484fd6a17fa88227ab7c3dfaf8d10699ee13922c2711d5304f2d9eacc785c58488d7 + languageName: node + linkType: hard + "@discoveryjs/json-ext@npm:^0.5.0": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" @@ -2430,6 +2470,23 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^1.4.1": + version: 1.4.1 + resolution: "@eslint/eslintrc@npm:1.4.1" + 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 + checksum: cd3e5a8683db604739938b1c1c8b77927dc04fce3e28e0c88e7f2cd4900b89466baf83dfbad76b2b9e4d2746abdd00dd3f9da544d3e311633d8693f327d04cd7 + languageName: node + linkType: hard + "@expo/config-plugins@npm:^5.0.4": version: 5.0.4 resolution: "@expo/config-plugins@npm:5.0.4" @@ -2534,6 +2591,17 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.11.8": + version: 0.11.8 + resolution: "@humanwhocodes/config-array@npm:0.11.8" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.5 + checksum: 0fd6b3c54f1674ce0a224df09b9c2f9846d20b9e54fabae1281ecfc04f2e6ad69bf19e1d6af6a28f88e8aa3990168b6cb9e1ef755868c3256a630605ec2cb1d3 + languageName: node + linkType: hard + "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" @@ -3492,6 +3560,20 @@ __metadata: languageName: node linkType: hard +"@mdn/browser-compat-data@npm:5.2.29": + version: 5.2.29 + resolution: "@mdn/browser-compat-data@npm:5.2.29" + checksum: 2f93497fe808fd4842e90ca996bfdd2692a8596836ceef1ae6f7fd945b3af19d768722aae5ccb036c820a24396aa6a4a79cca50fa954f10fb6aa47df4963381a + languageName: node + linkType: hard + +"@mozilla/readability@npm:^0.4.2": + version: 0.4.2 + resolution: "@mozilla/readability@npm:0.4.2" + checksum: daeeb1d68ea12a9a2027a932c64bd862f7d0a4d21571cb474883f803a5424dfda792724181822983367cd6f833c6d32b56436ed20cacd990bd6f20585405ada0 + languageName: node + linkType: hard + "@mrmlnc/readdir-enhanced@npm:^2.2.1": version: 2.2.1 resolution: "@mrmlnc/readdir-enhanced@npm:2.2.1" @@ -4790,6 +4872,24 @@ __metadata: languageName: node linkType: hard +"@standardnotes/clipper@workspace:packages/clipper": + version: 0.0.0-use.local + resolution: "@standardnotes/clipper@workspace:packages/clipper" + dependencies: + "@mozilla/readability": ^0.4.2 + "@types/webextension-polyfill": ^0.10.0 + babel-loader: ^9.1.0 + copy-webpack-plugin: 11.0.0 + eslint: ^8.29.0 + eslint-config-prettier: ^8.5.0 + ts-loader: ^9.4.2 + typescript: "*" + web-ext: ^7.5.0 + webextension-polyfill: ^0.10.0 + webpack: "*" + languageName: unknown + linkType: soft + "@standardnotes/common@npm:1.40.0, @standardnotes/common@npm:^1.23.1": version: 1.40.0 resolution: "@standardnotes/common@npm:1.40.0" @@ -5653,6 +5753,7 @@ __metadata: ts-jest: ^29.0.3 ts-loader: ^9.4.2 typescript: "*" + webextension-polyfill: ^0.10.0 webpack: "*" webpack-dev-server: "*" webpack-merge: ^5.8.0 @@ -6234,7 +6335,7 @@ __metadata: languageName: node linkType: hard -"@types/minimatch@npm:^3.0.3": +"@types/minimatch@npm:^3.0.3, @types/minimatch@npm:^3.0.5": version: 3.0.5 resolution: "@types/minimatch@npm:3.0.5" checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 @@ -6526,6 +6627,13 @@ __metadata: languageName: node linkType: hard +"@types/webextension-polyfill@npm:^0.10.0": + version: 0.10.0 + resolution: "@types/webextension-polyfill@npm:0.10.0" + checksum: 1c6d0b3f6f1b1ba666c86d78d6bf079a5382e0c3084a307021ed19dc711a9fc044d82417e322ce403782e343b0fead8ad46db8d97ea19011fb1d85157e2b9d7f + languageName: node + linkType: hard + "@types/wicg-file-system-access@npm:^2020.9.5": version: 2020.9.5 resolution: "@types/wicg-file-system-access@npm:2020.9.5" @@ -6576,7 +6684,7 @@ __metadata: languageName: node linkType: hard -"@types/yauzl@npm:^2.10.0, @types/yauzl@npm:^2.9.1": +"@types/yauzl@npm:2.10.0, @types/yauzl@npm:^2.10.0, @types/yauzl@npm:^2.9.1": version: 2.10.0 resolution: "@types/yauzl@npm:2.10.0" dependencies: @@ -7181,6 +7289,90 @@ __metadata: languageName: node linkType: hard +"addons-linter@npm:5.27.0": + version: 5.27.0 + resolution: "addons-linter@npm:5.27.0" + dependencies: + "@mdn/browser-compat-data": 5.2.29 + addons-moz-compare: 1.3.0 + addons-scanner-utils: 8.3.0 + ajv: 8.12.0 + chalk: 4.1.2 + cheerio: 1.0.0-rc.12 + columnify: 1.6.0 + common-tags: 1.8.2 + deepmerge: 4.2.2 + eslint: 8.32.0 + eslint-plugin-no-unsanitized: 4.0.2 + eslint-visitor-keys: 3.3.0 + espree: 9.4.1 + esprima: 4.0.1 + fast-json-patch: 3.1.1 + fluent-syntax: 0.14.0 + glob: 8.1.0 + image-size: 1.0.2 + is-mergeable-object: 1.1.1 + jed: 1.1.1 + json-merge-patch: 1.0.2 + os-locale: 5.0.0 + pino: 8.8.0 + postcss: 8.4.21 + relaxed-json: 1.0.3 + semver: 7.3.8 + sha.js: 2.4.11 + source-map-support: 0.5.21 + tosource: 1.0.0 + upath: 2.0.1 + yargs: 17.6.2 + yauzl: 2.10.0 + bin: + addons-linter: bin/addons-linter + checksum: cf92f54ce9327a52bac5dc21a9b6f0ae8662a175c73a360ed3d2cf08644c473fef127fad0ec98fcb50ba0b98fdf316acf919f163526035866bb2954b51ea76d0 + languageName: node + linkType: hard + +"addons-moz-compare@npm:1.3.0": + version: 1.3.0 + resolution: "addons-moz-compare@npm:1.3.0" + checksum: f3464dfe19ec9b7f882f00dde6356b77d7d93ec2c65fb158f2f3a98f298fb6e7f4c71b884cdfe087a8d2bc98d5b6463674f1d444bca67f3526ba3dc876d1e5f0 + languageName: node + linkType: hard + +"addons-scanner-utils@npm:8.3.0": + version: 8.3.0 + resolution: "addons-scanner-utils@npm:8.3.0" + dependencies: + "@types/yauzl": 2.10.0 + common-tags: 1.8.2 + first-chunk-stream: 3.0.0 + strip-bom-stream: 4.0.0 + upath: 2.0.1 + yauzl: 2.10.0 + peerDependencies: + body-parser: 1.20.1 + express: 4.18.2 + node-fetch: 2.6.7 + safe-compare: 1.1.4 + peerDependenciesMeta: + body-parser: + optional: true + express: + optional: true + node-fetch: + optional: true + safe-compare: + optional: true + checksum: 913d84900bffdf0b50b0088429a28c3216e6a14428ad64a99f7868cd77fbe8cacac3cdaf566e066bfa1069ff0b0c209b193ba5d484ffd0566f83b054b785320f + languageName: node + linkType: hard + +"adm-zip@npm:~0.5.x": + version: 0.5.10 + resolution: "adm-zip@npm:0.5.10" + checksum: 07ed91cf6423bf5dca4ee63977bc7635e91b8d21829c00829d48dce4c6932e1b19e6cfcbe44f1931c956e68795ae97183fc775913883fa48ce88a1ac11fb2034 + languageName: node + linkType: hard + "agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" @@ -7255,7 +7447,19 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.12.0, ajv@npm:^6.12.4, ajv@npm:^6.12.5": +"ajv@npm:8.12.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 + languageName: node + linkType: hard + +"ajv@npm:^6.10.0, ajv@npm:^6.12.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -7377,6 +7581,13 @@ __metadata: languageName: node linkType: hard +"any-promise@npm:^1.0.0, any-promise@npm:^1.1.0, any-promise@npm:~1.3.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de + languageName: node + linkType: hard + "anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": version: 3.1.2 resolution: "anymatch@npm:3.1.2" @@ -7520,6 +7731,13 @@ __metadata: languageName: node linkType: hard +"array-differ@npm:^4.0.0": + version: 4.0.0 + resolution: "array-differ@npm:4.0.0" + checksum: 1de99a06bc3219f96b062a561a4c19af7a68bfaf2c1e0ccedd1d82ce1fbc7757f939e03cf0d3ad76b71f855a8ad2b2a16bf53df331bf5f0c90002774f04fb0b5 + languageName: node + linkType: hard + "array-find-index@npm:^1.0.1": version: 1.0.2 resolution: "array-find-index@npm:1.0.2" @@ -7590,6 +7808,13 @@ __metadata: languageName: node linkType: hard +"array-union@npm:^3.0.1": + version: 3.0.1 + resolution: "array-union@npm:3.0.1" + checksum: 47b29f88258e8f37ffb93ddaa327d4308edd950b52943c172b73558afdd3fa74cfd68816ba5aa4b894242cf281fa3c6d0362ae057e4a18bddbaedbe46ebe7112 + languageName: node + linkType: hard + "array-uniq@npm:^1.0.1": version: 1.0.3 resolution: "array-uniq@npm:1.0.3" @@ -7706,7 +7931,16 @@ __metadata: languageName: node linkType: hard -"assert-plus@npm:^1.0.0": +"asn1@npm:~0.2.3": + version: 0.2.6 + resolution: "asn1@npm:0.2.6" + dependencies: + safer-buffer: ~2.1.0 + checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d + languageName: node + linkType: hard + +"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": version: 1.0.0 resolution: "assert-plus@npm:1.0.0" checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64 @@ -7771,7 +8005,7 @@ __metadata: languageName: node linkType: hard -"async@npm:^3.2.2, async@npm:^3.2.3": +"async@npm:^3.2.0, async@npm:^3.2.2, async@npm:^3.2.3": version: 3.2.4 resolution: "async@npm:3.2.4" checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 @@ -7801,6 +8035,13 @@ __metadata: languageName: node linkType: hard +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: b95275afb2f80732f22f43a60178430c468906a415a7ff18bcd0feeebc8eec3930b51250aeda91a476062a90e07132b43a1794e8d8ffcf9b650e8139be75fa36 + languageName: node + linkType: hard + "autoprefixer@npm:^10.4.13": version: 10.4.13 resolution: "autoprefixer@npm:10.4.13" @@ -7879,6 +8120,20 @@ __metadata: languageName: node linkType: hard +"aws-sign2@npm:~0.7.0": + version: 0.7.0 + resolution: "aws-sign2@npm:0.7.0" + checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525 + languageName: node + linkType: hard + +"aws4@npm:^1.8.0": + version: 1.12.0 + resolution: "aws4@npm:1.12.0" + checksum: 68f79708ac7c335992730bf638286a3ee0a645cf12575d557860100767c500c08b30e24726b9f03265d74116417f628af78509e1333575e9f8d52a80edfe8cbc + languageName: node + linkType: hard + "axios@npm:^1.1.3": version: 1.1.3 resolution: "axios@npm:1.1.3" @@ -8161,6 +8416,15 @@ __metadata: languageName: node linkType: hard +"bcrypt-pbkdf@npm:^1.0.0": + version: 1.0.2 + resolution: "bcrypt-pbkdf@npm:1.0.2" + dependencies: + tweetnacl: ^0.14.3 + checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291 + languageName: node + linkType: hard + "before-after-hook@npm:^2.2.0": version: 2.2.3 resolution: "before-after-hook@npm:2.2.3" @@ -8223,7 +8487,7 @@ __metadata: languageName: node linkType: hard -"bluebird@npm:^3.5.0, bluebird@npm:^3.5.4, bluebird@npm:^3.5.5": +"bluebird@npm:^3.5.0, bluebird@npm:^3.5.4, bluebird@npm:^3.5.5, bluebird@npm:~3.7": version: 3.7.2 resolution: "bluebird@npm:3.7.2" checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef @@ -8529,7 +8793,7 @@ __metadata: languageName: node linkType: hard -"bunyan@npm:^1.8.12": +"bunyan@npm:1.8.15, bunyan@npm:^1.8.12": version: 1.8.15 resolution: "bunyan@npm:1.8.15" dependencies: @@ -8789,6 +9053,13 @@ __metadata: languageName: node linkType: hard +"camelcase@npm:7.0.1": + version: 7.0.1 + resolution: "camelcase@npm:7.0.1" + checksum: 86ab8f3ebf08bcdbe605a211a242f00ed30d8bfb77dab4ebb744dd36efbc84432d1c4adb28975ba87a1b8be40a80fbd1e60e2f06565315918fa7350011a26d3d + languageName: node + linkType: hard + "camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -8831,6 +9102,13 @@ __metadata: languageName: node linkType: hard +"caseless@npm:~0.12.0": + version: 0.12.0 + resolution: "caseless@npm:0.12.0" + checksum: b43bd4c440aa1e8ee6baefee8063b4850fd0d7b378f6aabc796c9ec8cb26d27fb30b46885350777d9bd079c5256c0e1329ad0dc7c2817e0bb466810ebb353751 + languageName: node + linkType: hard + "cbor@npm:^8.1.0": version: 8.1.0 resolution: "cbor@npm:8.1.0" @@ -8855,6 +9133,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + "chalk@npm:^2.0.0, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -8866,16 +9154,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc - languageName: node - linkType: hard - "chalk@npm:^5.0.1, chalk@npm:^5.1.2": version: 5.1.2 resolution: "chalk@npm:5.1.2" @@ -8916,6 +9194,35 @@ __metadata: languageName: node linkType: hard +"cheerio-select@npm:^2.1.0": + version: 2.1.0 + resolution: "cheerio-select@npm:2.1.0" + dependencies: + boolbase: ^1.0.0 + css-select: ^5.1.0 + css-what: ^6.1.0 + domelementtype: ^2.3.0 + domhandler: ^5.0.3 + domutils: ^3.0.1 + checksum: 843d6d479922f28a6c5342c935aff1347491156814de63c585a6eb73baf7bb4185c1b4383a1195dca0f12e3946d737c7763bcef0b9544c515d905c5c44c5308b + languageName: node + linkType: hard + +"cheerio@npm:1.0.0-rc.12": + version: 1.0.0-rc.12 + resolution: "cheerio@npm:1.0.0-rc.12" + dependencies: + cheerio-select: ^2.1.0 + dom-serializer: ^2.0.0 + domhandler: ^5.0.3 + domutils: ^3.0.1 + htmlparser2: ^8.0.1 + parse5: ^7.0.0 + parse5-htmlparser2-tree-adapter: ^7.0.0 + checksum: 5d4c1b7a53cf22d3a2eddc0aff70cf23cbb30d01a4c79013e703a012475c02461aa1fcd99127e8d83a02216386ed6942b2c8103845fd0812300dd199e6e7e054 + languageName: node + linkType: hard + "child-process-promise@npm:^2.2.0": version: 2.2.1 resolution: "child-process-promise@npm:2.2.1" @@ -8960,6 +9267,20 @@ __metadata: languageName: node linkType: hard +"chrome-launcher@npm:0.15.1": + version: 0.15.1 + resolution: "chrome-launcher@npm:0.15.1" + dependencies: + "@types/node": "*" + escape-string-regexp: ^4.0.0 + is-wsl: ^2.2.0 + lighthouse-logger: ^1.0.0 + bin: + print-chrome-path: bin/print-chrome-path.js + checksum: b534221b831afc59a0058a1f8406a77d7b4a592342785418e2ef97099b073609b0ca0e4be39d1ed842aa2b64b02ab5ccb45166eada9a37b775c757fb201d7fa5 + languageName: node + linkType: hard + "chrome-trace-event@npm:^1.0.2": version: 1.0.3 resolution: "chrome-trace-event@npm:1.0.3" @@ -9283,7 +9604,7 @@ __metadata: languageName: node linkType: hard -"columnify@npm:^1.6.0": +"columnify@npm:1.6.0, columnify@npm:^1.6.0": version: 1.6.0 resolution: "columnify@npm:1.6.0" dependencies: @@ -9293,7 +9614,7 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.8": +"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" dependencies: @@ -9318,7 +9639,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0": +"commander@npm:^2.20.0, commander@npm:^2.6.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e @@ -9339,6 +9660,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^9.1.0": + version: 9.5.0 + resolution: "commander@npm:9.5.0" + checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade + languageName: node + linkType: hard + "commander@npm:^9.3.0, commander@npm:^9.4.1": version: 9.4.1 resolution: "commander@npm:9.4.1" @@ -9367,6 +9695,13 @@ __metadata: languageName: node linkType: hard +"common-tags@npm:1.8.2": + version: 1.8.2 + resolution: "common-tags@npm:1.8.2" + checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff + languageName: node + linkType: hard + "commondir@npm:^1.0.1": version: 1.0.1 resolution: "commondir@npm:1.0.1" @@ -9436,6 +9771,18 @@ __metadata: languageName: node linkType: hard +"concat-stream@npm:^1.4.7": + version: 1.6.2 + resolution: "concat-stream@npm:1.6.2" + dependencies: + buffer-from: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^2.2.2 + typedarray: ^0.0.6 + checksum: 1ef77032cb4459dcd5187bd710d6fc962b067b64ec6a505810de3d2b8cc0605638551b42f8ec91edf6fcd26141b32ef19ad749239b58fae3aba99187adc32285 + languageName: node + linkType: hard + "concat-stream@npm:^2.0.0": version: 2.0.0 resolution: "concat-stream@npm:2.0.0" @@ -9691,7 +10038,7 @@ __metadata: languageName: node linkType: hard -"copy-webpack-plugin@npm:^11.0.0": +"copy-webpack-plugin@npm:11.0.0, copy-webpack-plugin@npm:^11.0.0": version: 11.0.0 resolution: "copy-webpack-plugin@npm:11.0.0" dependencies: @@ -9723,6 +10070,13 @@ __metadata: languageName: node linkType: hard +"core-js@npm:3.27.1": + version: 3.27.1 + resolution: "core-js@npm:3.27.1" + checksum: d50b5f88aea4302512ad9446c18e90f4d35dea1e6d8d3f87337690677061565ff11a670f1e0c87de57aa6074375fbb25ed5784076c040d3c4de8b4bce7d2ebeb + languageName: node + linkType: hard + "core-js@npm:^2.4.0": version: 2.6.12 resolution: "core-js@npm:2.6.12" @@ -9820,7 +10174,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -9903,6 +10257,19 @@ __metadata: languageName: node linkType: hard +"css-select@npm:^5.1.0": + version: 5.1.0 + resolution: "css-select@npm:5.1.0" + dependencies: + boolbase: ^1.0.0 + css-what: ^6.1.0 + domhandler: ^5.0.2 + domutils: ^3.0.1 + nth-check: ^2.0.1 + checksum: 2772c049b188d3b8a8159907192e926e11824aea525b8282981f72ba3f349cf9ecd523fdf7734875ee2cb772246c22117fc062da105b6d59afe8dcd5c99c9bda + languageName: node + linkType: hard + "css-to-react-native@npm:^3.0.0": version: 3.0.0 resolution: "css-to-react-native@npm:3.0.0" @@ -9924,7 +10291,7 @@ __metadata: languageName: node linkType: hard -"css-what@npm:^6.0.1": +"css-what@npm:^6.0.1, css-what@npm:^6.1.0": version: 6.1.0 resolution: "css-what@npm:6.1.0" checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe @@ -9995,6 +10362,22 @@ __metadata: languageName: node linkType: hard +"dashdash@npm:^1.12.0": + version: 1.14.1 + resolution: "dashdash@npm:1.14.1" + dependencies: + assert-plus: ^1.0.0 + checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598 + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 0d0790b67ffec5302f204c2ccca4494f70b4e2d940fea3d36b09f0bb2b8539c2e86690429eb1f1dc4bcc9e4df0644193073e63d9ee48ac9fce79ec1506e4aa4c + languageName: node + linkType: hard + "data-urls@npm:^3.0.2": version: 3.0.2 resolution: "data-urls@npm:3.0.2" @@ -10036,6 +10419,13 @@ __metadata: languageName: node linkType: hard +"debounce@npm:1.2.1": + version: 1.2.1 + resolution: "debounce@npm:1.2.1" + checksum: 682a89506d9e54fb109526f4da255c5546102fbb8e3ae75eef3b04effaf5d4853756aee97475cd4650641869794e44f410eeb20ace2b18ea592287ab2038519e + languageName: node + linkType: hard + "debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.8, debug@npm:^2.6.9": version: 2.6.9 resolution: "debug@npm:2.6.9" @@ -10045,7 +10435,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:~4.3.1": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -10083,6 +10473,13 @@ __metadata: languageName: node linkType: hard +"decamelize@npm:6.0.0": + version: 6.0.0 + resolution: "decamelize@npm:6.0.0" + checksum: 0066bc30798ec11e01adf0c19ad975caef86545d4bb6f70cfb90b7eb8e3cbf7974cf774ac2e6ea2586e4e07b1f654bfecc4e772c42128a79a89f8584fc546753 + languageName: node + linkType: hard + "decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" @@ -10160,6 +10557,22 @@ __metadata: languageName: node linkType: hard +"deepcopy@npm:2.1.0": + version: 2.1.0 + resolution: "deepcopy@npm:2.1.0" + dependencies: + type-detect: ^4.0.8 + checksum: 7890ccaa8ad672bdc33d02626d13666bfbb33a68f7c6e8921a348b962b77edc4daf7f1301a789ec74a97e7f0acd611099c5cdd1e8b32ce93287819722f57b92e + languageName: node + linkType: hard + +"deepmerge@npm:4.2.2, deepmerge@npm:^4.2.2": + version: 4.2.2 + resolution: "deepmerge@npm:4.2.2" + checksum: a8c43a1ed8d6d1ed2b5bf569fa4c8eb9f0924034baf75d5d406e47e157a451075c4db353efea7b6bcc56ec48116a8ce72fccf867b6e078e7c561904b5897530b + languageName: node + linkType: hard + "deepmerge@npm:^3.2.0": version: 3.3.0 resolution: "deepmerge@npm:3.3.0" @@ -10167,13 +10580,6 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.2.2": - version: 4.2.2 - resolution: "deepmerge@npm:4.2.2" - checksum: a8c43a1ed8d6d1ed2b5bf569fa4c8eb9f0924034baf75d5d406e47e157a451075c4db353efea7b6bcc56ec48116a8ce72fccf867b6e078e7c561904b5897530b - languageName: node - linkType: hard - "default-gateway@npm:^6.0.3": version: 6.0.3 resolution: "default-gateway@npm:6.0.3" @@ -10598,6 +11004,17 @@ __metadata: languageName: node linkType: hard +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + entities: ^4.2.0 + checksum: cd1810544fd8cdfbd51fa2c0c1128ec3a13ba92f14e61b7650b5de421b88205fd2e3f0cc6ace82f13334114addb90ed1c2f23074a51770a8e9c1273acbc7f3e6 + languageName: node + linkType: hard + "dom-storage@npm:^2.1.0": version: 2.1.0 resolution: "dom-storage@npm:2.1.0" @@ -10605,7 +11022,7 @@ __metadata: languageName: node linkType: hard -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": version: 2.3.0 resolution: "domelementtype@npm:2.3.0" checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 @@ -10630,6 +11047,15 @@ __metadata: languageName: node linkType: hard +"domhandler@npm:^5.0.1, domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: ^2.3.0 + checksum: 0f58f4a6af63e6f3a4320aa446d28b5790a009018707bce2859dcb1d21144c7876482b5188395a188dfa974238c019e0a1e610d2fc269a12b2c192ea2b0b131c + languageName: node + linkType: hard + "dompurify@npm:^2.4.1": version: 2.4.1 resolution: "dompurify@npm:2.4.1" @@ -10648,6 +11074,17 @@ __metadata: languageName: node linkType: hard +"domutils@npm:^3.0.1": + version: 3.0.1 + resolution: "domutils@npm:3.0.1" + dependencies: + dom-serializer: ^2.0.0 + domelementtype: ^2.3.0 + domhandler: ^5.0.1 + checksum: 23aa7a840572d395220e173cb6263b0d028596e3950100520870a125af33ff819e6f609e1606d6f7d73bd9e7feb03bb404286e57a39063b5384c62b724d987b3 + languageName: node + linkType: hard + "dot-prop@npm:^5.1.0": version: 5.3.0 resolution: "dot-prop@npm:5.3.0" @@ -10727,6 +11164,16 @@ __metadata: languageName: node linkType: hard +"ecc-jsbn@npm:~0.1.1": + version: 0.1.2 + resolution: "ecc-jsbn@npm:0.1.2" + dependencies: + jsbn: ~0.1.0 + safer-buffer: ^2.1.0 + checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a + languageName: node + linkType: hard + "ecdsa-sig-formatter@npm:1.0.11": version: 1.0.11 resolution: "ecdsa-sig-formatter@npm:1.0.11" @@ -10914,7 +11361,7 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1, end-of-stream@npm:~1.4.1": version: 1.4.4 resolution: "end-of-stream@npm:1.4.4" dependencies: @@ -10940,7 +11387,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.4.0": +"entities@npm:^4.2.0, entities@npm:^4.3.0, entities@npm:^4.4.0": version: 4.4.0 resolution: "entities@npm:4.4.0" checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 @@ -10970,7 +11417,7 @@ __metadata: languageName: node linkType: hard -"error-ex@npm:^1.3.1": +"error-ex@npm:^1.3.1, error-ex@npm:^1.3.2": version: 1.3.2 resolution: "error-ex@npm:1.3.2" dependencies: @@ -11090,13 +11537,20 @@ __metadata: languageName: node linkType: hard -"es6-error@npm:^4.1.1": +"es6-error@npm:4.1.1, es6-error@npm:^4.1.1": version: 4.1.1 resolution: "es6-error@npm:4.1.1" checksum: ae41332a51ec1323da6bbc5d75b7803ccdeddfae17c41b6166ebbafc8e8beb7a7b80b884b7fab1cc80df485860ac3c59d78605e860bb4f8cd816b3d6ade0d010 languageName: node linkType: hard +"es6-promisify@npm:7.0.0": + version: 7.0.0 + resolution: "es6-promisify@npm:7.0.0" + checksum: 461305147b62bb00624cbfa986227eb2d7a12c21a696bb30e7f3f3182d899ea3436a9500900cd63e35ddbc68119ad305e243f25b4e0d1b207347361ab4f4579e + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -11275,6 +11729,15 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-no-unsanitized@npm:4.0.2": + version: 4.0.2 + resolution: "eslint-plugin-no-unsanitized@npm:4.0.2" + peerDependencies: + eslint: ^6 || ^7 || ^8 + checksum: c3b171c31ae436909899d1aeec52dbd331f653b989e5489a8fb4d756a5102720cb57c6e40e2cac5966195201f17684952a896734eec538d5f358892da11d6150 + languageName: node + linkType: hard + "eslint-plugin-node@npm:^11.1.0": version: 11.1.0 resolution: "eslint-plugin-node@npm:11.1.0" @@ -11432,6 +11895,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:3.3.0, eslint-visitor-keys@npm:^3.3.0": + version: 3.3.0 + resolution: "eslint-visitor-keys@npm:3.3.0" + checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 + languageName: node + linkType: hard + "eslint-visitor-keys@npm:^1.1.0": version: 1.3.0 resolution: "eslint-visitor-keys@npm:1.3.0" @@ -11446,13 +11916,6 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0": - version: 3.3.0 - resolution: "eslint-visitor-keys@npm:3.3.0" - checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 - languageName: node - linkType: hard - "eslint@npm:*": version: 8.25.0 resolution: "eslint@npm:8.25.0" @@ -11501,6 +11964,55 @@ __metadata: languageName: node linkType: hard +"eslint@npm:8.32.0": + version: 8.32.0 + resolution: "eslint@npm:8.32.0" + 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: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.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 + 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 + is-glob: ^4.0.0 + 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.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + 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 + checksum: 23c8fb3c57291eecd9c1448faf603226a8f885022a2cd96e303459bf72e39b7f54987c6fb948f0f9eecaf7085600e6eb0663482a35ea83da12e9f9141a22b91e + languageName: node + linkType: hard + "eslint@npm:^8.27.0": version: 8.27.0 resolution: "eslint@npm:8.27.0" @@ -11599,6 +12111,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:9.4.1": + version: 9.4.1 + resolution: "espree@npm:9.4.1" + dependencies: + acorn: ^8.8.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.3.0 + checksum: 4d266b0cf81c7dfe69e542c7df0f246e78d29f5b04dda36e514eb4c7af117ee6cfbd3280e560571ed82ff6c9c3f0003c05b82583fc7a94006db7497c4fe4270e + languageName: node + linkType: hard + "espree@npm:^9.4.0": version: 9.4.0 resolution: "espree@npm:9.4.0" @@ -11610,7 +12133,7 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": +"esprima@npm:4.0.1, esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -11709,6 +12232,23 @@ __metadata: languageName: node linkType: hard +"execa@npm:^4.0.0": + version: 4.1.0 + resolution: "execa@npm:4.1.0" + 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 + checksum: e30d298934d9c52f90f3847704fd8224e849a081ab2b517bbc02f5f7732c24e56a21f14cb96a08256deffeb2d12b2b7cb7e2b014a12fb36f8d3357e06417ed55 + languageName: node + linkType: hard + "execa@npm:^5.0.0, execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -11867,6 +12407,13 @@ __metadata: languageName: node linkType: hard +"extend@npm:~3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 + languageName: node + linkType: hard + "external-editor@npm:^3.0.3": version: 3.1.0 resolution: "external-editor@npm:3.1.0" @@ -11911,6 +12458,13 @@ __metadata: languageName: node linkType: hard +"extsprintf@npm:1.3.0": + version: 1.3.0 + resolution: "extsprintf@npm:1.3.0" + checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2 + languageName: node + linkType: hard + "extsprintf@npm:^1.2.0": version: 1.4.1 resolution: "extsprintf@npm:1.4.1" @@ -11959,6 +12513,13 @@ __metadata: languageName: node linkType: hard +"fast-json-patch@npm:3.1.1": + version: 3.1.1 + resolution: "fast-json-patch@npm:3.1.1" + checksum: c4525b61b2471df60d4b025b4118b036d99778a93431aa44d1084218182841d82ce93056f0f3bbd731a24e6a8e69820128adf1873eb2199a26c62ef58d137833 + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" @@ -11980,6 +12541,13 @@ __metadata: languageName: node linkType: hard +"fast-redact@npm:^3.1.1": + version: 3.1.2 + resolution: "fast-redact@npm:3.1.2" + checksum: a30eb6b6830333ab213e0def55f46453ca777544dbd3a883016cb590a0eeb95e6fdf546553c1a13d509896bfba889b789991160a6d0996ceb19fce0a02e8b753 + languageName: node + linkType: hard + "fast-xml-parser@npm:^4.0.12": version: 4.1.3 resolution: "fast-xml-parser@npm:4.1.3" @@ -12034,6 +12602,16 @@ __metadata: languageName: node linkType: hard +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" + dependencies: + node-domexception: ^1.0.0 + web-streams-polyfill: ^3.0.3 + checksum: f19bc28a2a0b9626e69fd7cf3a05798706db7f6c7548da657cbf5026a570945f5eeaedff52007ea35c8bcd3d237c58a20bf1543bc568ab2422411d762dd3d5bf + languageName: node + linkType: hard + "figures@npm:^3.0.0": version: 3.2.0 resolution: "figures@npm:3.2.0" @@ -12221,6 +12799,28 @@ __metadata: languageName: node linkType: hard +"firefox-profile@npm:4.2.2": + version: 4.2.2 + resolution: "firefox-profile@npm:4.2.2" + dependencies: + adm-zip: ~0.5.x + fs-extra: ~9.0.1 + ini: ~2.0.0 + minimist: ^1.2.5 + xml2js: ~0.4.23 + bin: + firefox-profile: lib/cli.js + checksum: 21f338accb06ced2e711ba541874e39fe54a4a9f8b8b87300cd101a71e6e5d03670aa694ee07f3100f8961cc8d0795e19b1e3b3f31a8003d5615f365d9dc3107 + languageName: node + linkType: hard + +"first-chunk-stream@npm:3.0.0, first-chunk-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "first-chunk-stream@npm:3.0.0" + checksum: 85fe6ef654cd9d0b2a82acf2698417f0029f7f8c7d522583c588a9f1aed8b7e16cf91a6117e34fc2fadef3e772484ff345d6b82503a3cd367513ea7125c870b6 + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.0.4 resolution: "flat-cache@npm:3.0.4" @@ -12268,6 +12868,13 @@ __metadata: languageName: node linkType: hard +"fluent-syntax@npm:0.14.0": + version: 0.14.0 + resolution: "fluent-syntax@npm:0.14.0" + checksum: 3d27eaa39da8b399f32d2df812150f663a08d1970bf1bbe4c692c9c223c37d5a2408bdc4696a75b1c1b84aef3a0483f6d9be4d96e586a7dc2ed1cdf9ecdfeae5 + languageName: node + linkType: hard + "focus-lock@npm:^0.9.1": version: 0.9.2 resolution: "focus-lock@npm:0.9.2" @@ -12294,6 +12901,13 @@ __metadata: languageName: node linkType: hard +"forever-agent@npm:~0.6.1": + version: 0.6.1 + resolution: "forever-agent@npm:0.6.1" + checksum: 766ae6e220f5fe23676bb4c6a99387cec5b7b62ceb99e10923376e27bfea72f3c3aeec2ba5f45f3f7ba65d6616965aa7c20b15002b6860833bb6e394dea546a8 + languageName: node + linkType: hard + "form-data-encoder@npm:^2.1.2": version: 2.1.3 resolution: "form-data-encoder@npm:2.1.3" @@ -12312,6 +12926,26 @@ __metadata: languageName: node linkType: hard +"form-data@npm:~2.3.2": + version: 2.3.3 + resolution: "form-data@npm:2.3.3" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.6 + mime-types: ^2.1.12 + checksum: 10c1780fa13dbe1ff3100114c2ce1f9307f8be10b14bf16e103815356ff567b6be39d70fc4a40f8990b9660012dc24b0f5e1dde1b6426166eb23a445ba068ca3 + languageName: node + linkType: hard + +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: ^3.1.2 + checksum: 82a34df292afadd82b43d4a740ce387bc08541e0a534358425193017bf9fb3567875dc5f69564984b1da979979b70703aa73dee715a17b6c229752ae736dd9db + languageName: node + linkType: hard + "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -12356,6 +12990,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:11.1.0": + version: 11.1.0 + resolution: "fs-extra@npm:11.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: 5ca476103fa1f5ff4a9b3c4f331548f8a3c1881edaae323a4415d3153b5dc11dc6a981c8d1dd93eec8367ceee27b53f8bd27eecbbf66ffcdd04927510c171e7f + languageName: node + linkType: hard + "fs-extra@npm:^10.0.0, fs-extra@npm:^10.1.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" @@ -12401,6 +13046,18 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:~9.0.1": + version: 9.0.1 + resolution: "fs-extra@npm:9.0.1" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^1.0.0 + checksum: 0110da06b4def68f2ed0343c0df518d6a3699373b826dc1848bdd18cea5e30ac282a412ff58b459c2a38f280301a31ce42a585c5f0506b412fe5259680876ccf + languageName: node + linkType: hard + "fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -12476,6 +13133,22 @@ __metadata: languageName: node linkType: hard +"fx-runner@npm:1.3.0": + version: 1.3.0 + resolution: "fx-runner@npm:1.3.0" + dependencies: + commander: 2.9.0 + shell-quote: 1.7.3 + spawn-sync: 1.0.15 + when: 3.7.7 + which: 1.2.4 + winreg: 0.0.12 + bin: + fx-runner: bin/fx-runner + checksum: cb74f06c8b938a01d996b8c5e9c47b30ec78d3f020f55c8651cb2178aa475139db216847c8162494f32d4c5d407f23f5db709677d031ace5a73b22fffd3ddfb5 + languageName: node + linkType: hard + "gauge@npm:^4.0.3": version: 4.0.4 resolution: "gauge@npm:4.0.4" @@ -12600,7 +13273,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^5.1.0": +"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" dependencies: @@ -12651,6 +13324,15 @@ __metadata: languageName: node linkType: hard +"getpass@npm:^0.1.1": + version: 0.1.7 + resolution: "getpass@npm:0.1.7" + dependencies: + assert-plus: ^1.0.0 + checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046 + languageName: node + linkType: hard + "git-raw-commits@npm:^2.0.0, git-raw-commits@npm:^2.0.8": version: 2.0.11 resolution: "git-raw-commits@npm:2.0.11" @@ -12779,6 +13461,19 @@ __metadata: languageName: node linkType: hard +"glob@npm:8.1.0": + version: 8.1.0 + resolution: "glob@npm:8.1.0" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^5.0.1 + once: ^1.3.0 + checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 + languageName: node + linkType: hard + "glob@npm:^6.0.1": version: 6.0.4 resolution: "glob@npm:6.0.4" @@ -12881,6 +13576,15 @@ __metadata: languageName: node linkType: hard +"globals@npm:^13.19.0": + version: 13.20.0 + resolution: "globals@npm:13.20.0" + dependencies: + type-fest: ^0.20.2 + checksum: ad1ecf914bd051325faad281d02ea2c0b1df5d01bd94d368dcc5513340eac41d14b3c61af325768e3c7f8d44576e72780ec0b6f2d366121f8eec6e03c3a3b97a + languageName: node + linkType: hard + "globalthis@npm:^1.0.1": version: 1.0.3 resolution: "globalthis@npm:1.0.3" @@ -13012,6 +13716,13 @@ __metadata: languageName: node linkType: hard +"growly@npm:^1.3.0": + version: 1.3.0 + resolution: "growly@npm:1.3.0" + checksum: 53cdecd4c16d7d9154a9061a9ccb87d602e957502ca69b529d7d1b2436c2c0b700ec544fc6b3e4cd115d59b81e62e44ce86bd0521403b579d3a2a97d7ce72a44 + languageName: node + linkType: hard + "handle-thing@npm:^2.0.0": version: 2.0.1 resolution: "handle-thing@npm:2.0.1" @@ -13037,6 +13748,23 @@ __metadata: languageName: node linkType: hard +"har-schema@npm:^2.0.0": + version: 2.0.0 + resolution: "har-schema@npm:2.0.0" + checksum: d8946348f333fb09e2bf24cc4c67eabb47c8e1d1aa1c14184c7ffec1140a49ec8aa78aa93677ae452d71d5fc0fdeec20f0c8c1237291fc2bcb3f502a5d204f9b + languageName: node + linkType: hard + +"har-validator@npm:~5.1.3": + version: 5.1.5 + resolution: "har-validator@npm:5.1.5" + dependencies: + ajv: ^6.12.3 + har-schema: ^2.0.0 + checksum: b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280 + languageName: node + linkType: hard + "hard-rejection@npm:^2.1.0": version: 2.1.0 resolution: "hard-rejection@npm:2.1.0" @@ -13262,6 +13990,18 @@ __metadata: languageName: node linkType: hard +"htmlparser2@npm:^8.0.1": + version: 8.0.1 + resolution: "htmlparser2@npm:8.0.1" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + domutils: ^3.0.1 + entities: ^4.3.0 + checksum: 06d5c71e8313597722bc429ae2a7a8333d77bd3ab07ccb916628384b37332027b047f8619448d8f4a3312b6609c6ea3302a4e77435d859e9e686999e6699ca39 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0": version: 4.1.0 resolution: "http-cache-semantics@npm:4.1.0" @@ -13359,6 +14099,17 @@ __metadata: languageName: node linkType: hard +"http-signature@npm:~1.2.0": + version: 1.2.0 + resolution: "http-signature@npm:1.2.0" + dependencies: + assert-plus: ^1.0.0 + jsprim: ^1.2.2 + sshpk: ^1.7.0 + checksum: 3324598712266a9683585bb84a75dec4fd550567d5e0dd4a0fff6ff3f74348793404d3eeac4918fa0902c810eeee1a86419e4a2e92a164132dfe6b26743fb47c + languageName: node + linkType: hard + "http2-wrapper@npm:^1.0.0-beta.5.2": version: 1.0.3 resolution: "http2-wrapper@npm:1.0.3" @@ -13389,6 +14140,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^1.1.1": + version: 1.1.1 + resolution: "human-signals@npm:1.1.1" + checksum: d587647c9e8ec24e02821b6be7de5a0fc37f591f6c4e319b3054b43fd4c35a70a94c46fc74d8c1a43c47fde157d23acd7421f375e1c1365b09a16835b8300205 + languageName: node + linkType: hard + "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -13504,6 +14262,17 @@ __metadata: languageName: node linkType: hard +"image-size@npm:1.0.2": + version: 1.0.2 + resolution: "image-size@npm:1.0.2" + dependencies: + queue: 6.0.2 + bin: + image-size: bin/image-size.js + checksum: 01745fdb47f87cecf538e69c63f9adc5bfab30a345345c2de91105f3afbd1bfcfba1256af02bf3323077b33b0004469a837e077bf0cbb9c907e9c1e9e7547585 + languageName: node + linkType: hard + "image-size@npm:^0.6.0": version: 0.6.3 resolution: "image-size@npm:0.6.3" @@ -13513,6 +14282,13 @@ __metadata: languageName: node linkType: hard +"immediate@npm:~3.0.5": + version: 3.0.6 + resolution: "immediate@npm:3.0.6" + checksum: f9b3486477555997657f70318cc8d3416159f208bec4cca3ff3442fd266bc23f50f0c9bd8547e1371a6b5e82b821ec9a7044a4f7b944798b25aa3cc6d5e63e62 + languageName: node + linkType: hard + "immutable@npm:^4.0.0": version: 4.1.0 resolution: "immutable@npm:4.1.0" @@ -13520,6 +14296,16 @@ __metadata: languageName: node linkType: hard +"import-fresh@npm:3.3.0, import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + "import-fresh@npm:^2.0.0": version: 2.0.0 resolution: "import-fresh@npm:2.0.0" @@ -13530,16 +14316,6 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: ^1.0.0 - resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa - languageName: node - linkType: hard - "import-lazy@npm:^4.0.0": version: 4.0.0 resolution: "import-lazy@npm:4.0.0" @@ -13611,7 +14387,7 @@ __metadata: languageName: node linkType: hard -"ini@npm:2.0.0": +"ini@npm:2.0.0, ini@npm:~2.0.0": version: 2.0.0 resolution: "ini@npm:2.0.0" checksum: e7aadc5fb2e4aefc666d74ee2160c073995a4061556b1b5b4241ecb19ad609243b9cceafe91bae49c219519394bbd31512516cb22a3b1ca6e66d869e0447e84e @@ -13682,6 +14458,13 @@ __metadata: languageName: node linkType: hard +"invert-kv@npm:^3.0.0": + version: 3.0.1 + resolution: "invert-kv@npm:3.0.1" + checksum: 782c44c97f8b693006f5ba0995301754bf68d2160ec98fc34d96b266e2c28cc0c91d86c341ca058fe993bc3dd91f104f776a40f04b6c75254a9a1a0d716ac814 + languageName: node + linkType: hard + "ip@npm:^1.1.5": version: 1.1.8 resolution: "ip@npm:1.1.8" @@ -13717,6 +14500,15 @@ __metadata: languageName: node linkType: hard +"is-absolute@npm:^0.1.7": + version: 0.1.7 + resolution: "is-absolute@npm:0.1.7" + dependencies: + is-relative: ^0.1.0 + checksum: 5f26dc361643ff8aa8b647672af9f76f5f7308597cdf5cc9a37a644990a062ded470bd3d6e002636bdd1598cde7eebe607ca1c890798fec51ee51397c9abf0ee + languageName: node + linkType: hard + "is-accessor-descriptor@npm:^0.1.6": version: 0.1.6 resolution: "is-accessor-descriptor@npm:0.1.6" @@ -13969,6 +14761,13 @@ __metadata: languageName: node linkType: hard +"is-mergeable-object@npm:1.1.1": + version: 1.1.1 + resolution: "is-mergeable-object@npm:1.1.1" + checksum: 19a29bc6184f8fcb0b8e868715ebd97fb3872098de759988e90a56b0999473c74b16532aeaa80d6302005f515674a791274aeb50e2e93a725e658db5adf1a388 + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -14104,6 +14903,13 @@ __metadata: languageName: node linkType: hard +"is-relative@npm:^0.1.0": + version: 0.1.3 + resolution: "is-relative@npm:0.1.3" + checksum: bfe53d31d2cc257812e9504a1c3f6f29540af156cb3240b5edc8d613ef8661fa145dc71add54c55b2bf05f6afb00d91dbc789423463c2f4220df9c8a769774ad + languageName: node + linkType: hard + "is-shared-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "is-shared-array-buffer@npm:1.0.2" @@ -14170,7 +14976,7 @@ __metadata: languageName: node linkType: hard -"is-typedarray@npm:^1.0.0": +"is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 @@ -14191,6 +14997,13 @@ __metadata: languageName: node linkType: hard +"is-utf8@npm:^0.2.1": + version: 0.2.1 + resolution: "is-utf8@npm:0.2.1" + checksum: 167ccd2be869fc228cc62c1a28df4b78c6b5485d15a29027d3b5dceb09b383e86a3522008b56dcac14b592b22f0a224388718c2505027a994fd8471465de54b3 + languageName: node + linkType: hard + "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -14253,6 +15066,13 @@ __metadata: languageName: node linkType: hard +"isexe@npm:^1.1.1": + version: 1.1.2 + resolution: "isexe@npm:1.1.2" + checksum: a35523bc88b8c14c8934a0a411cff0bbf193c64a3049d75ca76c1508f7323a6ef933fa2e96437241713ec16d65c5368a5de99bd3320c0fbfb0ce2c63c8418f84 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -14276,6 +15096,13 @@ __metadata: languageName: node linkType: hard +"isstream@npm:~0.1.2": + version: 0.1.2 + resolution: "isstream@npm:0.1.2" + checksum: 1eb2fe63a729f7bdd8a559ab552c69055f4f48eb5c2f03724430587c6f450783c8f1cd936c1c952d0a927925180fcc892ebd5b174236cf1065d4bd5bdb37e963 + languageName: node + linkType: hard + "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.0 resolution: "istanbul-lib-coverage@npm:3.2.0" @@ -14342,6 +15169,13 @@ __metadata: languageName: node linkType: hard +"jed@npm:1.1.1": + version: 1.1.1 + resolution: "jed@npm:1.1.1" + checksum: 657949a2813b026a6f1f5d504c9f1a7fa33e9544a85ffb2740e9db95f6efe6f2a9db1a813c47e83077ba4e549600081afeddd9781704c7407aa323474fce6d93 + languageName: node + linkType: hard + "jest-changed-files@npm:^29.2.0": version: 29.2.0 resolution: "jest-changed-files@npm:29.2.0" @@ -15013,6 +15847,13 @@ __metadata: languageName: node linkType: hard +"jose@npm:4.11.2": + version: 4.11.2 + resolution: "jose@npm:4.11.2" + checksum: bc9b2271c31683603857b2fd2903afa29f826fffd4bcefc0845355ed86995def87eaadf502033207996109d76698c912e5a986e279326d9629321a50504fe466 + languageName: node + linkType: hard + "js-base64@npm:^2.4.9": version: 2.6.4 resolution: "js-base64@npm:2.6.4" @@ -15080,6 +15921,13 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:~0.1.0": + version: 0.1.1 + resolution: "jsbn@npm:0.1.1" + checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2 + languageName: node + linkType: hard + "jsc-android@npm:^250231.0.0": version: 250231.0.0 resolution: "jsc-android@npm:250231.0.0" @@ -15228,6 +16076,15 @@ __metadata: languageName: node linkType: hard +"json-merge-patch@npm:1.0.2": + version: 1.0.2 + resolution: "json-merge-patch@npm:1.0.2" + dependencies: + fast-deep-equal: ^3.1.3 + checksum: 06867dbb93c9c3a698fba8a89f5ec1bd7a19697667a97d084d893c3ecd9ccecac07f251a531ffdf0c80df042ef3f33b5f67cdd7d73933c9cf7d9ebeaf1be24f5 + languageName: node + linkType: hard + "json-parse-better-errors@npm:^1.0.1": version: 1.0.2 resolution: "json-parse-better-errors@npm:1.0.2" @@ -15272,6 +16129,13 @@ __metadata: languageName: node linkType: hard +"json-schema@npm:0.4.0": + version: 0.4.0 + resolution: "json-schema@npm:0.4.0" + checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 + languageName: node + linkType: hard + "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -15286,7 +16150,7 @@ __metadata: languageName: node linkType: hard -"json-stringify-safe@npm:^5.0.1": +"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee @@ -15361,6 +16225,18 @@ __metadata: languageName: node linkType: hard +"jsonwebtoken@npm:9.0.0, jsonwebtoken@npm:^9.0.0": + version: 9.0.0 + resolution: "jsonwebtoken@npm:9.0.0" + dependencies: + jws: ^3.2.2 + lodash: ^4.17.21 + ms: ^2.1.1 + semver: ^7.3.8 + checksum: b9181cecf9df99f1dc0253f91ba000a1aa4d91f5816d1608c0dba61a5623726a0bfe200b51df25de18c1a6000825d231ad7ce2788aa54fd48dcb760ad9eb9514 + languageName: node + linkType: hard + "jsonwebtoken@npm:^8.5.1": version: 8.5.1 resolution: "jsonwebtoken@npm:8.5.1" @@ -15379,15 +16255,15 @@ __metadata: languageName: node linkType: hard -"jsonwebtoken@npm:^9.0.0": - version: 9.0.0 - resolution: "jsonwebtoken@npm:9.0.0" +"jsprim@npm:^1.2.2": + version: 1.4.2 + resolution: "jsprim@npm:1.4.2" dependencies: - jws: ^3.2.2 - lodash: ^4.17.21 - ms: ^2.1.1 - semver: ^7.3.8 - checksum: b9181cecf9df99f1dc0253f91ba000a1aa4d91f5816d1608c0dba61a5623726a0bfe200b51df25de18c1a6000825d231ad7ce2788aa54fd48dcb760ad9eb9514 + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + checksum: 2ad1b9fdcccae8b3d580fa6ced25de930eaa1ad154db21bbf8478a4d30bbbec7925b5f5ff29b933fba9412b16a17bd484a8da4fdb3663b5e27af95dd693bab2a languageName: node linkType: hard @@ -15401,6 +16277,18 @@ __metadata: languageName: node linkType: hard +"jszip@npm:^3.2.2": + version: 3.10.1 + resolution: "jszip@npm:3.10.1" + dependencies: + lie: ~3.3.0 + pako: ~1.0.2 + readable-stream: ~2.3.6 + setimmediate: ^1.0.5 + checksum: abc77bfbe33e691d4d1ac9c74c8851b5761fba6a6986630864f98d876f3fcc2d36817dfc183779f32c00157b5d53a016796677298272a714ae096dfe6b1c8b60 + languageName: node + linkType: hard + "just-diff-apply@npm:^5.2.0": version: 5.4.1 resolution: "just-diff-apply@npm:5.4.1" @@ -15534,6 +16422,15 @@ __metadata: languageName: node linkType: hard +"lcid@npm:^3.0.0": + version: 3.1.1 + resolution: "lcid@npm:3.1.1" + dependencies: + invert-kv: ^3.0.0 + checksum: 7ebab7a2696a3cc6c6c9f25d957ef81dd2a8a2f48b7e2a9185e4bbcfc36d70cb633acf5fa5c9508f3d30badf23a303b1b6afe0bba8f0bb7d353d0f5d59c9ec1b + languageName: node + linkType: hard + "leven@npm:^3.1.0": version: 3.1.0 resolution: "leven@npm:3.1.0" @@ -15609,6 +16506,25 @@ __metadata: languageName: node linkType: hard +"lie@npm:~3.3.0": + version: 3.3.0 + resolution: "lie@npm:3.3.0" + dependencies: + immediate: ~3.0.5 + checksum: 33102302cf19766f97919a6a98d481e01393288b17a6aa1f030a3542031df42736edde8dab29ffdbf90bebeffc48c761eb1d064dc77592ca3ba3556f9fe6d2a8 + languageName: node + linkType: hard + +"lighthouse-logger@npm:^1.0.0": + version: 1.3.0 + resolution: "lighthouse-logger@npm:1.3.0" + dependencies: + debug: ^2.6.9 + marky: ^1.2.2 + checksum: 82655f1862779dc5a917de62567a23dbf47bbde9a53abbdd4d72b2cf80d6c2595bc84de7ef836c94c76a2e4e3f3ec613a2e1ec021367959d397aeb5aae97a7cb + languageName: node + linkType: hard + "lilconfig@npm:2.0.5": version: 2.0.5 resolution: "lilconfig@npm:2.0.5" @@ -15637,6 +16553,13 @@ __metadata: languageName: node linkType: hard +"lines-and-columns@npm:^2.0.2": + version: 2.0.3 + resolution: "lines-and-columns@npm:2.0.3" + checksum: 5955363dfd7d3d7c476d002eb47944dbe0310d57959e2112dce004c0dc76cecfd479cf8c098fd479ff344acdf04ee0e82b455462a26492231ac152f6c48d17a1 + languageName: node + linkType: hard + "lint-staged@npm:>=13, lint-staged@npm:^13.0.3": version: 13.0.3 resolution: "lint-staged@npm:13.0.3" @@ -16016,7 +16939,7 @@ __metadata: languageName: node linkType: hard -"make-error@npm:1.x, make-error@npm:^1.1.1": +"make-error@npm:1.x, make-error@npm:^1.1.1, make-error@npm:^1.3.2": version: 1.3.6 resolution: "make-error@npm:1.3.6" checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 @@ -16143,6 +17066,13 @@ __metadata: languageName: node linkType: hard +"marky@npm:^1.2.2": + version: 1.2.5 + resolution: "marky@npm:1.2.5" + checksum: 823b946677749551cdfc3b5221685478b5d1b9cc0dc03eff977c6f9a615fb05c67559f9556cb3c0fcb941a9ea0e195e37befd83026443396ccee8b724f54f4c5 + languageName: node + linkType: hard + "matcher@npm:^3.0.0": version: 3.0.0 resolution: "matcher@npm:3.0.0" @@ -16184,6 +17114,17 @@ __metadata: languageName: node linkType: hard +"mem@npm:^5.0.0": + version: 5.1.1 + resolution: "mem@npm:5.1.1" + dependencies: + map-age-cleaner: ^0.1.3 + mimic-fn: ^2.1.0 + p-is-promise: ^2.1.0 + checksum: 134ec3af9a290ca0ba3fcf0c21c344bdfd097073874ffebb9345f250a028e67a7bd81df1c6b8daa73498f995d55e4d8d4cb718132b23959609f0e8865f7551de + languageName: node + linkType: hard + "mem@npm:^9.0.2": version: 9.0.2 resolution: "mem@npm:9.0.2" @@ -16818,7 +17759,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:^2.1.35, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:^2.1.35, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -16916,7 +17857,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:2 || 3, minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:2 || 3, minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -17117,6 +18058,15 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:1.0.4, mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + "mkdirp@npm:^0.5.1, mkdirp@npm:~0.5.1": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" @@ -17128,15 +18078,6 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f - languageName: node - linkType: hard - "mobx-react-lite@npm:^3.4.2": version: 3.4.2 resolution: "mobx-react-lite@npm:3.4.2" @@ -17227,6 +18168,18 @@ __metadata: languageName: node linkType: hard +"multimatch@npm:6.0.0": + version: 6.0.0 + resolution: "multimatch@npm:6.0.0" + dependencies: + "@types/minimatch": ^3.0.5 + array-differ: ^4.0.0 + array-union: ^3.0.1 + minimatch: ^3.0.4 + checksum: c04233765f664f556af12309cdad1a11c137655f756674b853a981f287984a49f3916955b57d306ed36bba3d2d6d5b6fbba4b48f483f11bd24e3c124a09e05b5 + languageName: node + linkType: hard + "multimatch@npm:^5.0.0": version: 5.0.0 resolution: "multimatch@npm:5.0.0" @@ -17268,6 +18221,17 @@ __metadata: languageName: node linkType: hard +"mz@npm:2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: ^1.0.0 + object-assign: ^4.0.1 + thenify-all: ^1.0.0 + checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + languageName: node + linkType: hard + "nan@npm:^2.14.0, nan@npm:^2.17.0": version: 2.17.0 resolution: "nan@npm:2.17.0" @@ -17436,6 +18400,24 @@ __metadata: languageName: node linkType: hard +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: ee1d37dd2a4eb26a8a92cd6b64dfc29caec72bff5e1ed9aba80c294f57a31ba4895a60fd48347cf17dd6e766da0ae87d75657dfd1f384ebfa60462c2283f5c7f + languageName: node + linkType: hard + +"node-fetch@npm:3.3.0": + version: 3.3.0 + resolution: "node-fetch@npm:3.3.0" + dependencies: + data-uri-to-buffer: ^4.0.0 + fetch-blob: ^3.1.4 + formdata-polyfill: ^4.0.10 + checksum: e9936908d2783d3c48a038e187f8062de294d75ef43ec8ab812d7cbd682be2b67605868758d2e9cad6103706dcfe4a9d21d78f6df984e8edf10e7a5ce2e665f8 + languageName: node + linkType: hard + "node-fetch@npm:^2.2.0, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.7": version: 2.6.7 resolution: "node-fetch@npm:2.6.7" @@ -17450,7 +18432,7 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:^1": +"node-forge@npm:^1, node-forge@npm:^1.3.1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 @@ -17515,6 +18497,20 @@ __metadata: languageName: node linkType: hard +"node-notifier@npm:10.0.1": + version: 10.0.1 + resolution: "node-notifier@npm:10.0.1" + dependencies: + growly: ^1.3.0 + is-wsl: ^2.2.0 + semver: ^7.3.5 + shellwords: ^0.1.1 + uuid: ^8.3.2 + which: ^2.0.2 + checksum: ac09456152e433462dd3ca277048de7a60c6d63fc657e00ac72805841baf9bb2573e8d3f64c4b64af73546d1ed39733af6b0036c38b57a83c883aa33fff35a2e + languageName: node + linkType: hard + "node-releases@npm:^2.0.6": version: 2.0.6 resolution: "node-releases@npm:2.0.6" @@ -17920,7 +18916,7 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^4.0.1": +"npm-run-path@npm:^4.0.0, npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" dependencies: @@ -17985,6 +18981,13 @@ __metadata: languageName: node linkType: hard +"oauth-sign@npm:~0.9.0": + version: 0.9.0 + resolution: "oauth-sign@npm:0.9.0" + checksum: 8f5497a127967866a3c67094c21efd295e46013a94e6e828573c62220e9af568cc1d2d04b16865ba583e430510fa168baf821ea78f355146d8ed7e350fc44c64 + languageName: node + linkType: hard + "ob1@npm:0.73.7": version: 0.73.7 resolution: "ob1@npm:0.73.7" @@ -17999,7 +19002,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -18161,6 +19164,13 @@ __metadata: languageName: node linkType: hard +"on-exit-leak-free@npm:^2.1.0": + version: 2.1.0 + resolution: "on-exit-leak-free@npm:2.1.0" + checksum: 7334d98b87b0c89c9b69c747760b21196ff35afdedc4eaf1a0a3a02964463d7f6802481b120e4c8298967c74773ca7b914ab2eb3d9b279010eb7f67ac4960eed + languageName: node + linkType: hard + "on-finished@npm:2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" @@ -18213,16 +19223,7 @@ __metadata: languageName: node linkType: hard -"open@npm:^6.2.0": - version: 6.4.0 - resolution: "open@npm:6.4.0" - dependencies: - is-wsl: ^1.1.0 - checksum: e5037facf3e03ed777537db3e2511ada37f351c4394e1dadccf9cac11d63b28447ae8b495b7b138659910fd78d918bafed546e47163673c4a4e43dbb5ac53c5d - languageName: node - linkType: hard - -"open@npm:^8.0.9": +"open@npm:8.4.0, open@npm:^8.0.9": version: 8.4.0 resolution: "open@npm:8.4.0" dependencies: @@ -18233,6 +19234,15 @@ __metadata: languageName: node linkType: hard +"open@npm:^6.2.0": + version: 6.4.0 + resolution: "open@npm:6.4.0" + dependencies: + is-wsl: ^1.1.0 + checksum: e5037facf3e03ed777537db3e2511ada37f351c4394e1dadccf9cac11d63b28447ae8b495b7b138659910fd78d918bafed546e47163673c4a4e43dbb5ac53c5d + languageName: node + linkType: hard + "optionator@npm:^0.8.1": version: 0.8.3 resolution: "optionator@npm:0.8.3" @@ -18278,6 +19288,24 @@ __metadata: languageName: node linkType: hard +"os-locale@npm:5.0.0": + version: 5.0.0 + resolution: "os-locale@npm:5.0.0" + dependencies: + execa: ^4.0.0 + lcid: ^3.0.0 + mem: ^5.0.0 + checksum: 294bbb412f87a93bdbf271905cb05223a0365957ebc941af6e68e1df9f380cd69fcba62c623a0f31e913e48d009863cb9b9749deae81501d5d3b2e2d0e33b712 + languageName: node + linkType: hard + +"os-shim@npm:^0.1.2": + version: 0.1.3 + resolution: "os-shim@npm:0.1.3" + checksum: 2172be6da7ec31b26d06556588779ae7e2f1a4d14df76820a06e38cedf3eb7fccdb151e928a4e2678da00630edd3c031fabea8c764e52dca9226e0aaf25c6869 + languageName: node + linkType: hard + "os-tmpdir@npm:^1.0.0, os-tmpdir@npm:~1.0.2": version: 1.0.2 resolution: "os-tmpdir@npm:1.0.2" @@ -18333,6 +19361,13 @@ __metadata: languageName: node linkType: hard +"p-is-promise@npm:^2.1.0": + version: 2.1.0 + resolution: "p-is-promise@npm:2.1.0" + checksum: c9a8248c8b5e306475a5d55ce7808dbce4d4da2e3d69526e4991a391a7809bfd6cfdadd9bf04f1c96a3db366c93d9a0f5ee81d949e7b1684c4e0f61f747199ef + languageName: node + linkType: hard + "p-limit@npm:^1.1.0": version: 1.3.0 resolution: "p-limit@npm:1.3.0" @@ -18593,6 +19628,13 @@ __metadata: languageName: node linkType: hard +"pako@npm:~1.0.2": + version: 1.0.11 + resolution: "pako@npm:1.0.11" + checksum: 1be2bfa1f807608c7538afa15d6f25baa523c30ec870a3228a89579e474a4d992f4293859524e46d5d87fd30fa17c5edf34dbef0671251d9749820b488660b16 + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -18622,6 +19664,18 @@ __metadata: languageName: node linkType: hard +"parse-json@npm:6.0.2": + version: 6.0.2 + resolution: "parse-json@npm:6.0.2" + dependencies: + "@babel/code-frame": ^7.16.0 + error-ex: ^1.3.2 + json-parse-even-better-errors: ^2.3.1 + lines-and-columns: ^2.0.2 + checksum: b33d93abf869f3102804896b9a1f8c04bf371e3c55d7afafaf18fca2813a20b2e14a1ae5c6823feea3b4fabc63f35984dc272fa057c4767531ffe1b46d52fa79 + languageName: node + linkType: hard + "parse-json@npm:^4.0.0": version: 4.0.0 resolution: "parse-json@npm:4.0.0" @@ -18669,6 +19723,16 @@ __metadata: languageName: node linkType: hard +"parse5-htmlparser2-tree-adapter@npm:^7.0.0": + version: 7.0.0 + resolution: "parse5-htmlparser2-tree-adapter@npm:7.0.0" + dependencies: + domhandler: ^5.0.2 + parse5: ^7.0.0 + checksum: fc5d01e07733142a1baf81de5c2a9c41426c04b7ab29dd218acb80cd34a63177c90aff4a4aee66cf9f1d0aeecff1389adb7452ad6f8af0a5888e3e9ad6ef733d + languageName: node + linkType: hard + "parse5@npm:^7.0.0, parse5@npm:^7.1.1": version: 7.1.1 resolution: "parse5@npm:7.1.1" @@ -18802,6 +19866,13 @@ __metadata: languageName: node linkType: hard +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -18853,6 +19924,44 @@ __metadata: languageName: node linkType: hard +"pino-abstract-transport@npm:v1.0.0": + version: 1.0.0 + resolution: "pino-abstract-transport@npm:1.0.0" + dependencies: + readable-stream: ^4.0.0 + split2: ^4.0.0 + checksum: 05dd0eda52dd99fd204b39fe7b62656744b63e863bc052cdd5105d25f226a236966d0a46e39a1ace4838f6e988c608837ff946d2d0bc92835ca7baa0a3bff8d8 + languageName: node + linkType: hard + +"pino-std-serializers@npm:^6.0.0": + version: 6.1.0 + resolution: "pino-std-serializers@npm:6.1.0" + checksum: 5e42327c242b67c1a38fe7be1b64c5f655aa7116b159899f09f3ef057302055a23c99c54590e18da4b6b76557487e3b9478a89889cea8cbd3e0cc16c3dc154a5 + languageName: node + linkType: hard + +"pino@npm:8.8.0": + version: 8.8.0 + resolution: "pino@npm:8.8.0" + dependencies: + atomic-sleep: ^1.0.0 + fast-redact: ^3.1.1 + on-exit-leak-free: ^2.1.0 + pino-abstract-transport: v1.0.0 + pino-std-serializers: ^6.0.0 + process-warning: ^2.0.0 + quick-format-unescaped: ^4.0.3 + real-require: ^0.2.0 + safe-stable-stringify: ^2.3.1 + sonic-boom: ^3.1.0 + thread-stream: ^2.0.0 + bin: + pino: bin.js + checksum: 69256469221b332776333069d637100053eb15dc7baa3f95897d7864bf2e6fd99f15cfd9cfc94b56e7b00da2e6b349c49affcff1abaca9a3d4b7ba63ff86b4f0 + languageName: node + linkType: hard + "pirates@npm:^4.0.4, pirates@npm:^4.0.5": version: 4.0.5 resolution: "pirates@npm:4.0.5" @@ -19061,7 +20170,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.0.9": +"postcss@npm:8.4.21, postcss@npm:^8.0.9": version: 8.4.21 resolution: "postcss@npm:8.4.21" dependencies: @@ -19256,6 +20365,13 @@ __metadata: languageName: node linkType: hard +"process-warning@npm:^2.0.0": + version: 2.1.0 + resolution: "process-warning@npm:2.1.0" + checksum: 2f22a3b8ec0de018c3a35e5945a2261c006aa3dfecf3d4f7aa323bc57e4fcdedfd566003283708547fde666d3ab7097d70f8d9765cd831d300723e4008adb7ab + languageName: node + linkType: hard + "process@npm:^0.11.1, process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" @@ -19308,6 +20424,15 @@ __metadata: languageName: node linkType: hard +"promise-toolbox@npm:0.21.0": + version: 0.21.0 + resolution: "promise-toolbox@npm:0.21.0" + dependencies: + make-error: ^1.3.2 + checksum: 549ad21b64af98d3548aeb632c996db851a6c912c410b97b7e198a90378e793bdeee2e79c15f765405110d3c85432c02ba835ecfcd677874cd21f6bd7c7e7eea + languageName: node + linkType: hard + "promise@npm:^8.3.0": version: 8.3.0 resolution: "promise@npm:8.3.0" @@ -19415,7 +20540,7 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.33": +"psl@npm:^1.1.28, psl@npm:^1.1.33": version: 1.9.0 resolution: "psl@npm:1.9.0" checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d @@ -19473,6 +20598,13 @@ __metadata: languageName: node linkType: hard +"qs@npm:~6.5.2": + version: 6.5.3 + resolution: "qs@npm:6.5.3" + checksum: 6f20bf08cabd90c458e50855559539a28d00b2f2e7dddcb66082b16a43188418cb3cb77cbd09268bcef6022935650f0534357b8af9eeb29bf0f27ccb17655692 + languageName: node + linkType: hard + "querystringify@npm:^2.1.1": version: 2.2.0 resolution: "querystringify@npm:2.2.0" @@ -19487,6 +20619,22 @@ __metadata: languageName: node linkType: hard +"queue@npm:6.0.2": + version: 6.0.2 + resolution: "queue@npm:6.0.2" + dependencies: + inherits: ~2.0.3 + checksum: ebc23639248e4fe40a789f713c20548e513e053b3dc4924b6cb0ad741e3f264dcff948225c8737834dd4f9ec286dbc06a1a7c13858ea382d9379f4303bcc0916 + languageName: node + linkType: hard + +"quick-format-unescaped@npm:^4.0.3": + version: 4.0.4 + resolution: "quick-format-unescaped@npm:4.0.4" + checksum: 7bc32b99354a1aa46c089d2a82b63489961002bb1d654cee3e6d2d8778197b68c2d854fd23d8422436ee1fdfd0abaddc4d4da120afe700ade68bd357815b26fd + languageName: node + linkType: hard + "quick-lru@npm:^4.0.1": version: 4.0.1 resolution: "quick-lru@npm:4.0.1" @@ -20071,6 +21219,33 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:^2.2.2": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.3 + isarray: ~1.0.0 + process-nextick-args: ~2.0.0 + safe-buffer: ~5.1.1 + string_decoder: ~1.1.1 + util-deprecate: ~1.0.1 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + languageName: node + linkType: hard + +"readable-stream@npm:^4.0.0": + version: 4.3.0 + resolution: "readable-stream@npm:4.3.0" + dependencies: + abort-controller: ^3.0.0 + buffer: ^6.0.3 + events: ^3.3.0 + process: ^0.11.10 + checksum: 5f8d5fc1eb0c6eb47771ad4537881126d6280666e1f10ba1e2262a670a0352c36f59e6a04d17c9a6f7c888218984836dc67f55e95a77de8bfdf06fb75f00f670 + languageName: node + linkType: hard + "readable-stream@npm:^4.1.0": version: 4.2.0 resolution: "readable-stream@npm:4.2.0" @@ -20111,6 +21286,13 @@ __metadata: languageName: node linkType: hard +"real-require@npm:^0.2.0": + version: 0.2.0 + resolution: "real-require@npm:0.2.0" + checksum: fa060f19f2f447adf678d1376928c76379dce5f72bd334da301685ca6cdcb7b11356813332cc243c88470796bc2e2b1e2917fc10df9143dd93c2ea608694971d + languageName: node + linkType: hard + "recast@npm:^0.20.4": version: 0.20.5 resolution: "recast@npm:0.20.5" @@ -20172,7 +21354,7 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.10": +"regenerator-runtime@npm:^0.13.10, regenerator-runtime@npm:^0.13.11": version: 0.13.11 resolution: "regenerator-runtime@npm:0.13.11" checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 @@ -20273,6 +21455,18 @@ __metadata: languageName: node linkType: hard +"relaxed-json@npm:1.0.3": + version: 1.0.3 + resolution: "relaxed-json@npm:1.0.3" + dependencies: + chalk: ^2.4.2 + commander: ^2.6.0 + bin: + rjson: ./bin/rjson.js + checksum: 339d119f3ca052dfa3f86dd9471e82bed77f5b7de05c5e85adf082a151543f666872086868066543e83c128b292d600b76444a6b76a300d8aa63019b77d009bc + languageName: node + linkType: hard + "remote-git-tags@npm:^3.0.0": version: 3.0.0 resolution: "remote-git-tags@npm:3.0.0" @@ -20301,6 +21495,34 @@ __metadata: languageName: node linkType: hard +"request@npm:2.88.2": + version: 2.88.2 + resolution: "request@npm:2.88.2" + 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 + checksum: 4e112c087f6eabe7327869da2417e9d28fcd0910419edd2eb17b6acfc4bfa1dad61954525949c228705805882d8a98a86a0ea12d7f739c01ee92af7062996983 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -20592,7 +21814,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 @@ -20626,7 +21848,14 @@ __metadata: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": +"safe-stable-stringify@npm:^2.3.1": + version: 2.4.2 + resolution: "safe-stable-stringify@npm:2.4.2" + checksum: 0324ba2e40f78cae63e31a02b1c9bdf1b786621f9e8760845608eb9e81aef401944ac2078e5c9c1533cf516aea34d08fa8052ca853637ced84b791caaf1e394e + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 @@ -20845,7 +22074,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8": +"semver@npm:7.3.8, semver@npm:7.x, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8": version: 7.3.8 resolution: "semver@npm:7.3.8" dependencies: @@ -20975,6 +22204,13 @@ __metadata: languageName: node linkType: hard +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd + languageName: node + linkType: hard + "setprototypeof@npm:1.1.0": version: 1.1.0 resolution: "setprototypeof@npm:1.1.0" @@ -20989,6 +22225,18 @@ __metadata: languageName: node linkType: hard +"sha.js@npm:2.4.11": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + bin: + sha.js: ./bin.js + checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 + languageName: node + linkType: hard + "shallow-clone@npm:^3.0.0": version: 3.0.1 resolution: "shallow-clone@npm:3.0.1" @@ -21037,6 +22285,13 @@ __metadata: languageName: node linkType: hard +"shell-quote@npm:1.7.3": + version: 1.7.3 + resolution: "shell-quote@npm:1.7.3" + checksum: aca58e73a3a5d933d02e0bdddedc53ee14f7c2ec264f97ac915b9d4482d077a38e422aa664631d60a672cd3cdb4054eb2e6c0303f54882453dacb6483e482d34 + languageName: node + linkType: hard + "shell-quote@npm:^1.6.1, shell-quote@npm:^1.7.2, shell-quote@npm:^1.7.3": version: 1.7.4 resolution: "shell-quote@npm:1.7.4" @@ -21044,6 +22299,13 @@ __metadata: languageName: node linkType: hard +"shellwords@npm:^0.1.1": + version: 0.1.1 + resolution: "shellwords@npm:0.1.1" + checksum: 8d73a5e9861f5e5f1068e2cfc39bc0002400fe58558ab5e5fa75630d2c3adf44ca1fac81957609c8320d5533e093802fcafc72904bf1a32b95de3c19a0b1c0d4 + languageName: node + linkType: hard + "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -21055,6 +22317,24 @@ __metadata: languageName: node linkType: hard +"sign-addon@npm:5.2.0": + version: 5.2.0 + resolution: "sign-addon@npm:5.2.0" + dependencies: + common-tags: 1.8.2 + core-js: 3.27.1 + deepcopy: 2.1.0 + es6-error: 4.1.1 + es6-promisify: 7.0.0 + jsonwebtoken: 9.0.0 + mz: 2.7.0 + request: 2.88.2 + source-map-support: 0.5.21 + stream-to-promise: 3.0.0 + checksum: ef66bfc1e5154bfb1001e087c4b276a21b40c20ebbc82575a3dc6be2a6b8eb53d44f74870321e35b920e8609bc03911b464715e479322e4d7d3f2f4bd985d212 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -21257,6 +22537,15 @@ __metadata: languageName: node linkType: hard +"sonic-boom@npm:^3.1.0": + version: 3.2.1 + resolution: "sonic-boom@npm:3.2.1" + dependencies: + atomic-sleep: ^1.0.0 + checksum: 674d0af31c67818c99a0956482720b853bdaa6e46a63814db9fd28024580836a4cfdafa2c2ba6b0ec08449e9a92a5e7959530689b2c1fb5c83f786708cd7a7da + languageName: node + linkType: hard + "sort-keys@npm:^2.0.0": version: 2.0.0 resolution: "sort-keys@npm:2.0.0" @@ -21305,7 +22594,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.19, source-map-support@npm:^0.5.21, source-map-support@npm:~0.5.20": +"source-map-support@npm:0.5.21, source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.19, source-map-support@npm:^0.5.21, source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -21359,6 +22648,16 @@ __metadata: languageName: node linkType: hard +"spawn-sync@npm:1.0.15": + version: 1.0.15 + resolution: "spawn-sync@npm:1.0.15" + dependencies: + concat-stream: ^1.4.7 + os-shim: ^0.1.2 + checksum: a280ff895b2251ba7ea5ae3f12aa56e5775e15f17c4db75493dc39ac68dfa891a022a1643af120618f4669ae60a3d79967e5267ec4bc555605cf9f668d61ecc9 + languageName: node + linkType: hard + "spdx-correct@npm:^3.0.0": version: 3.1.1 resolution: "spdx-correct@npm:3.1.1" @@ -21438,7 +22737,14 @@ __metadata: languageName: node linkType: hard -"split@npm:^1.0.0": +"split2@npm:^4.0.0": + version: 4.1.0 + resolution: "split2@npm:4.1.0" + checksum: ec581597cb74c13cdfb5e2047543dd40cb1e8e9803c7b1e0c29ede05f2b4f049b2d6e7f2788a225d544549375719658b8f38e9366364dec35dc7a12edfda5ee5 + languageName: node + linkType: hard + +"split@npm:^1.0.0, split@npm:~1.0.1": version: 1.0.1 resolution: "split@npm:1.0.1" dependencies: @@ -21461,6 +22767,27 @@ __metadata: languageName: node linkType: hard +"sshpk@npm:^1.7.0": + version: 1.17.0 + resolution: "sshpk@npm:1.17.0" + 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 + checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597 + languageName: node + linkType: hard + "ssri@npm:^10.0.0": version: 10.0.0 resolution: "ssri@npm:10.0.0" @@ -21592,6 +22919,26 @@ __metadata: languageName: node linkType: hard +"stream-to-array@npm:~2.3.0": + version: 2.3.0 + resolution: "stream-to-array@npm:2.3.0" + dependencies: + any-promise: ^1.1.0 + checksum: 7feaf63b38399b850615e6ffcaa951e96e4c8f46745dbce4b553a94c5dc43966933813747014935a3ff97793e7f30a65270bde19f82b2932871a1879229a77cf + languageName: node + linkType: hard + +"stream-to-promise@npm:3.0.0": + version: 3.0.0 + resolution: "stream-to-promise@npm:3.0.0" + dependencies: + any-promise: ~1.3.0 + end-of-stream: ~1.4.1 + stream-to-array: ~2.3.0 + checksum: 206905dc40f852c4abec93c70bd48e4ff4e5dfb859bdbc95f815101793b84d317649a18c95cf30a5374f12716c845f47e6d71b522cc607edbe3f943c48ade973 + languageName: node + linkType: hard + "string-argv@npm:^0.3.1": version: 0.3.1 resolution: "string-argv@npm:0.3.1" @@ -21759,6 +23106,32 @@ __metadata: languageName: node linkType: hard +"strip-bom-buf@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-bom-buf@npm:2.0.0" + dependencies: + is-utf8: ^0.2.1 + checksum: f2cd19e336e4329dc0b82b27d5131833dd02214b905f745f3b61085351784aab4d980d2e57bc0a397ff4e4169c945ad810d0ecd86cab1ab31b7bf84d59daa834 + languageName: node + linkType: hard + +"strip-bom-stream@npm:4.0.0": + version: 4.0.0 + resolution: "strip-bom-stream@npm:4.0.0" + dependencies: + first-chunk-stream: ^3.0.0 + strip-bom-buf: ^2.0.0 + checksum: 376717a110e1ddc1b41868bf97aee30a623d458a1aca546ac571a4c89202aa308e58b019b0eda05c93c4872dca96aef28c734ff0502d6ca171421d9c86324a27 + languageName: node + linkType: hard + +"strip-bom@npm:5.0.0": + version: 5.0.0 + resolution: "strip-bom@npm:5.0.0" + checksum: 60a38bb7565076f6111b64b719720f77826e08b5c93da60179e20be0275a496e1a968ac56091631325ad87ce683611c5dbb8c5b7035f621b0bc15e935e92ef97 + languageName: node + linkType: hard + "strip-bom@npm:^3.0.0": version: 3.0.0 resolution: "strip-bom@npm:3.0.0" @@ -21803,6 +23176,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:5.0.0": + version: 5.0.0 + resolution: "strip-json-comments@npm:5.0.0" + checksum: 99cad07ccc3b86cc7bb8a9274a801b0660cbd595189ad291f6e206b8d7b23d90eed3119cdae44e126d9563796024b3ef0e7de2eeee4634b3b9019bafb62803e7 + languageName: node + linkType: hard + "strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -22194,6 +23574,24 @@ __metadata: languageName: node linkType: hard +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: ">= 3.1.0 < 4" + checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: ^1.0.0 + checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e + languageName: node + linkType: hard + "thirty-two@npm:^1.0.2": version: 1.0.2 resolution: "thirty-two@npm:1.0.2" @@ -22201,6 +23599,15 @@ __metadata: languageName: node linkType: hard +"thread-stream@npm:^2.0.0": + version: 2.3.0 + resolution: "thread-stream@npm:2.3.0" + dependencies: + real-require: ^0.2.0 + checksum: e9ea58f9f36320165b41c2aae5c439bf68bd3575eb533c458483d8b290e31d519979e351408c7d6e248711611434332c2a3aae2165650b028cc3eb9b1052ac16 + languageName: node + linkType: hard + "throat@npm:^5.0.0": version: 5.0.0 resolution: "throat@npm:5.0.0" @@ -22264,6 +23671,15 @@ __metadata: languageName: node linkType: hard +"tmp@npm:0.2.1, tmp@npm:^0.2.0": + version: 0.2.1 + resolution: "tmp@npm:0.2.1" + dependencies: + rimraf: ^3.0.0 + checksum: 8b1214654182575124498c87ca986ac53dc76ff36e8f0e0b67139a8d221eaecfdec108c0e6ec54d76f49f1f72ab9325500b246f562b926f85bcdfca8bf35df9e + languageName: node + linkType: hard + "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -22273,15 +23689,6 @@ __metadata: languageName: node linkType: hard -"tmp@npm:^0.2.0": - version: 0.2.1 - resolution: "tmp@npm:0.2.1" - dependencies: - rimraf: ^3.0.0 - checksum: 8b1214654182575124498c87ca986ac53dc76ff36e8f0e0b67139a8d221eaecfdec108c0e6ec54d76f49f1f72ab9325500b246f562b926f85bcdfca8bf35df9e - languageName: node - linkType: hard - "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -22343,6 +23750,13 @@ __metadata: languageName: node linkType: hard +"tosource@npm:1.0.0": + version: 1.0.0 + resolution: "tosource@npm:1.0.0" + checksum: 683fc64700484cd749b6eed461c2d105e251df7caf886484ff824bcf1249e365210d65c4f2ca3ced30baa34ea7912c656984e084aaada669920b44e2437c1c05 + languageName: node + linkType: hard + "tough-cookie@npm:^4.1.2": version: 4.1.2 resolution: "tough-cookie@npm:4.1.2" @@ -22355,6 +23769,16 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:~2.5.0": + version: 2.5.0 + resolution: "tough-cookie@npm:2.5.0" + dependencies: + psl: ^1.1.28 + punycode: ^2.1.1 + checksum: 16a8cd090224dd176eee23837cbe7573ca0fa297d7e468ab5e1c02d49a4e9a97bb05fef11320605eac516f91d54c57838a25864e8680e27b069a5231d8264977 + languageName: node + linkType: hard + "tr46@npm:^3.0.0": version: 3.0.0 resolution: "tr46@npm:3.0.0" @@ -22570,6 +23994,13 @@ __metadata: languageName: node linkType: hard +"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": + version: 0.14.5 + resolution: "tweetnacl@npm:0.14.5" + checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487 + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -22588,7 +24019,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 @@ -22910,6 +24341,13 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^1.0.0": + version: 1.0.0 + resolution: "universalify@npm:1.0.0" + checksum: 095a808f2b915e3b89d29b6f3b4ee4163962b02fa5b7cb686970b8d0439f4ca789bc43f319b7cbb1ce552ae724e631d148e5aee9ce04c4f46a7fe0c5bbfd2b9e + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.0 resolution: "universalify@npm:2.0.0" @@ -22941,7 +24379,7 @@ __metadata: languageName: node linkType: hard -"upath@npm:^2.0.1": +"upath@npm:2.0.1, upath@npm:^2.0.1": version: 2.0.1 resolution: "upath@npm:2.0.1" checksum: 2db04f24a03ef72204c7b969d6991abec9e2cb06fb4c13a1fd1c59bc33b46526b16c3325e55930a11ff86a77a8cbbcda8f6399bf914087028c5beae21ecdb33c @@ -22962,7 +24400,7 @@ __metadata: languageName: node linkType: hard -"update-notifier@npm:^6.0.2": +"update-notifier@npm:6.0.2, update-notifier@npm:^6.0.2": version: 6.0.2 resolution: "update-notifier@npm:6.0.2" dependencies: @@ -23094,7 +24532,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^3.0.1": +"uuid@npm:^3.0.1, uuid@npm:^3.3.2": version: 3.4.0 resolution: "uuid@npm:3.4.0" bin: @@ -23183,6 +24621,17 @@ __metadata: languageName: node linkType: hard +"verror@npm:1.10.0": + version: 1.10.0 + resolution: "verror@npm:1.10.0" + dependencies: + assert-plus: ^1.0.0 + core-util-is: 1.0.2 + extsprintf: ^1.2.0 + checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea + languageName: node + linkType: hard + "verror@npm:^1.10.0": version: 1.10.1 resolution: "verror@npm:1.10.1" @@ -23226,7 +24675,7 @@ __metadata: languageName: node linkType: hard -"watchpack@npm:^2.4.0": +"watchpack@npm:2.4.0, watchpack@npm:^2.4.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0" dependencies: @@ -23254,6 +24703,62 @@ __metadata: languageName: node linkType: hard +"web-ext@npm:^7.5.0": + version: 7.5.0 + resolution: "web-ext@npm:7.5.0" + dependencies: + "@babel/runtime": 7.20.13 + "@devicefarmer/adbkit": 3.2.3 + addons-linter: 5.27.0 + bunyan: 1.8.15 + camelcase: 7.0.1 + chrome-launcher: 0.15.1 + debounce: 1.2.1 + decamelize: 6.0.0 + es6-error: 4.1.1 + firefox-profile: 4.2.2 + fs-extra: 11.1.0 + fx-runner: 1.3.0 + import-fresh: 3.3.0 + jose: 4.11.2 + mkdirp: 1.0.4 + multimatch: 6.0.0 + mz: 2.7.0 + node-fetch: 3.3.0 + node-notifier: 10.0.1 + open: 8.4.0 + parse-json: 6.0.2 + promise-toolbox: 0.21.0 + sign-addon: 5.2.0 + source-map-support: 0.5.21 + strip-bom: 5.0.0 + strip-json-comments: 5.0.0 + tmp: 0.2.1 + update-notifier: 6.0.2 + watchpack: 2.4.0 + ws: 8.12.0 + yargs: 17.6.2 + zip-dir: 2.0.0 + bin: + web-ext: bin/web-ext.js + checksum: bac491442d8bc24828bf51bb125cd9c08dbb8627e01e57eede2ae4e9251419212c4d8aa6f3db4449ec6d5e596e60b846672b2fe9ba7da9bdf744c90b54165d59 + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.0.3": + version: 3.2.1 + resolution: "web-streams-polyfill@npm:3.2.1" + checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 + languageName: node + linkType: hard + +"webextension-polyfill@npm:^0.10.0": + version: 0.10.0 + resolution: "webextension-polyfill@npm:0.10.0" + checksum: 4a59036bda571360c2c0b2fb03fe1dc244f233946bcf9a6766f677956c40fd14d270aaa69cdba95e4ac521014afbe4008bfa5959d0ac39f91c990eb206587f91 + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -23519,6 +25024,13 @@ __metadata: languageName: node linkType: hard +"when@npm:3.7.7": + version: 3.7.7 + resolution: "when@npm:3.7.7" + checksum: e8cf81790ca5d59c33289e7d0d9b075b8c9a49fcfdd10b9cd27a45614a96496de672a79701fda52e5bbd0dc964ca19d841c003e80f5328438e055adb7f18a084 + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2" @@ -23539,6 +25051,18 @@ __metadata: languageName: node linkType: hard +"which@npm:1.2.4": + version: 1.2.4 + resolution: "which@npm:1.2.4" + dependencies: + is-absolute: ^0.1.7 + isexe: ^1.1.1 + bin: + which: ./bin/which + checksum: 988abcbf802993d25ddaf9eca3b00265eec559554d2853da228b38a920a199cc4fc17530a29b8b8a06a25f0723f66f6d47b8290eaf7fb17ad7aeebeb53295f73 + languageName: node + linkType: hard + "which@npm:^1.2.9, which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" @@ -23597,6 +25121,13 @@ __metadata: languageName: node linkType: hard +"winreg@npm:0.0.12": + version: 0.0.12 + resolution: "winreg@npm:0.0.12" + checksum: 633109ab7155ec136eaf0ce38f8ba1453f90cfbd80054ffb4c24fad6161ba6d4d65eafcaa4e8349e95cd72c8805edf6382de152adde42008c66cc32f7fbef54b + languageName: node + linkType: hard + "word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": version: 1.2.3 resolution: "word-wrap@npm:1.2.3" @@ -23733,6 +25264,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:8.12.0": + version: 8.12.0 + resolution: "ws@npm:8.12.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 818ff3f8749c172a95a114cceb8b89cedd27e43a82d65c7ad0f7882b1e96a2ee6709e3746a903c3fa88beec0c8bae9a9fcd75f20858b32a166dfb7519316a5d7 + languageName: node + linkType: hard + "ws@npm:^6.2.2": version: 6.2.2 resolution: "ws@npm:6.2.2" @@ -23796,7 +25342,7 @@ __metadata: languageName: node linkType: hard -"xml2js@npm:0.4.23": +"xml2js@npm:0.4.23, xml2js@npm:~0.4.23": version: 0.4.23 resolution: "xml2js@npm:0.4.23" dependencies: @@ -23926,6 +25472,21 @@ __metadata: languageName: node linkType: hard +"yargs@npm:17.6.2, yargs@npm:^17.6.2": + version: 17.6.2 + resolution: "yargs@npm:17.6.2" + dependencies: + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 47da1b0d854fa16d45a3ded57b716b013b2179022352a5f7467409da5a04a1eef5b3b3d97a2dfc13e8bbe5f2ffc0afe3bc6a4a72f8254e60f5a4bd7947138643 + languageName: node + linkType: hard + "yargs@npm:^15.1.0": version: 15.4.1 resolution: "yargs@npm:15.4.1" @@ -23975,22 +25536,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.6.2": - version: 17.6.2 - resolution: "yargs@npm:17.6.2" - dependencies: - cliui: ^8.0.1 - escalade: ^3.1.1 - get-caller-file: ^2.0.5 - require-directory: ^2.1.1 - string-width: ^4.2.3 - y18n: ^5.0.5 - yargs-parser: ^21.1.1 - checksum: 47da1b0d854fa16d45a3ded57b716b013b2179022352a5f7467409da5a04a1eef5b3b3d97a2dfc13e8bbe5f2ffc0afe3bc6a4a72f8254e60f5a4bd7947138643 - languageName: node - linkType: hard - -"yauzl@npm:^2.10.0": +"yauzl@npm:2.10.0, yauzl@npm:^2.10.0": version: 2.10.0 resolution: "yauzl@npm:2.10.0" dependencies: @@ -24020,3 +25566,13 @@ __metadata: checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 languageName: node linkType: hard + +"zip-dir@npm:2.0.0": + version: 2.0.0 + resolution: "zip-dir@npm:2.0.0" + dependencies: + async: ^3.2.0 + jszip: ^3.2.2 + checksum: bfcfdefe410da3dd583f294b51db8dd670e6b4f742c95255e526df58cb9302e3c742fe84a0834fe4705c72c9c601fc3a14d7402560ce580a1ae3bd307cbed60c + languageName: node + linkType: hard