From 04caf83d0cdf18871499e4afe3a03f663132ce66 Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Fri, 23 Oct 2026 20:19:06 -0500 Subject: [PATCH 01/10] Guard against broken navigator.serviceWorker --- src/playground/load-service-worker.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/playground/load-service-worker.js b/src/playground/load-service-worker.js index d7971f99045..0b888b06204 100644 --- a/src/playground/load-service-worker.js +++ b/src/playground/load-service-worker.js @@ -9,7 +9,15 @@ const actuallyLoadServiceWorker = () => { }); }; const loadServiceWorker = () => { - if (process.env.ENABLE_SERVICE_WORKER && 'serviceWorker' in navigator && !loaded) { + if ( + process.env.ENABLE_SERVICE_WORKER && + // there are weird browser extensions / configuration people can apply that leave: + // `'serviceWorker' in navigator` as true, but register() is not a function. so we should guard + // against those weird scenarios. Example is Windscribe's "Worker Block" option. + navigator.serviceWorker && + typeof navigator.serviceWorker.register === 'function' && + !loaded + ) { loaded = true; if (document.readyState === 'complete') { actuallyLoadServiceWorker(); From 6f9539a3a75d78e69615f002a8b9ad45d39d2dc9 Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Fri, 23 Oct 2026 23:23:14 -0500 Subject: [PATCH 02/10] Reset permissions when project disposed --- src/containers/tw-security-manager.jsx | 43 ++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/containers/tw-security-manager.jsx b/src/containers/tw-security-manager.jsx index 890701ac573..33062a2a618 100644 --- a/src/containers/tw-security-manager.jsx +++ b/src/containers/tw-security-manager.jsx @@ -129,6 +129,16 @@ let allowedReadClipboard = false; let allowedNotify = false; let allowedGeolocation = false; +const resetPermissions = () => { + fetchHostsTrustedByUser.clear(); + embedHostsTrustedByUser.clear(); + allowedAudio = false; + allowedVideo = false; + allowedReadClipboard = false; + allowedNotify = false; + allowedGeolocation = false; +}; + const SECURITY_MANAGER_METHODS = [ 'getSandboxMode', 'canLoadExtensionFromProject', @@ -149,11 +159,16 @@ class TWSecurityManagerComponent extends React.Component { super(props); bindAll(this, [ 'handleAllowed', - 'handleDenied' + 'handleDenied', + 'handleRuntimeDisposed' ]); bindAll(this, SECURITY_MANAGER_METHODS); this.nextModalCallbacks = []; this.modalLocked = false; + /** + * Incremented each time previous project disposed. + */ + this.generation = 0; this.state = { type: null, data: null, @@ -168,6 +183,19 @@ class TWSecurityManagerComponent extends React.Component { for (const method of SECURITY_MANAGER_METHODS) { vmSecurityManager[method] = propsSecurityManager[method] || this[method]; } + this.props.vm.runtime.on('RUNTIME_DISPOSED', this.handleRuntimeDisposed); + } + + componentWillUnmount () { + this.props.vm.runtime.off('RUNTIME_DISPOSED', this.handleRuntimeDisposed); + } + + handleRuntimeDisposed () { + resetPermissions(); + this.generation++; + if (this.state.type) { + this.state.callback(false); + } } // eslint-disable-next-line valid-jsdoc @@ -181,6 +209,8 @@ class TWSecurityManagerComponent extends React.Component { // with just one click. This means that some places have to wait until previous modals are // closed before it knows if it needs to display another modal. + const generation = this.generation; + if (this.modalLocked) { await new Promise(resolve => { this.nextModalCallbacks.push(resolve); @@ -203,6 +233,11 @@ class TWSecurityManagerComponent extends React.Component { }; const showModal = async (type, data) => { + if (generation !== this.generation) { + // Request is from a previous project. + releaseLock(); + return false; + } const result = await new Promise(resolve => { this.setState(oldState => ({ type, @@ -212,7 +247,7 @@ class TWSecurityManagerComponent extends React.Component { })); }); releaseLock(); - return result; + return result && generation === this.generation; }; return { @@ -457,6 +492,10 @@ class TWSecurityManagerComponent extends React.Component { TWSecurityManagerComponent.propTypes = { vm: PropTypes.shape({ + runtime: PropTypes.shape({ + on: PropTypes.func.isRequired, + off: PropTypes.func.isRequired + }).isRequired, extensionManager: PropTypes.shape({ securityManager: PropTypes.shape( SECURITY_MANAGER_METHODS.reduce((obj, method) => { From 39780fbb6b6be8e6bc48c7cf223626de87fedcfd Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Sun, 25 Oct 2026 12:26:11 -0500 Subject: [PATCH 03/10] Pull addons (fix debugger breaking sound library) --- src/addons/addons/debugger/module.js | 25 ------------------------- src/addons/generated/upstream-meta.json | 2 +- 2 files changed, 1 insertion(+), 26 deletions(-) diff --git a/src/addons/addons/debugger/module.js b/src/addons/addons/debugger/module.js index 1133e8a167c..1dcdf148613 100644 --- a/src/addons/addons/debugger/module.js +++ b/src/addons/addons/debugger/module.js @@ -432,31 +432,6 @@ export const setup = (addon) => { return count; }; - // All instances of AudioEngine use the same AudioContext by default, - // which means that opening the sound library resumes the VM's context. See #6847. - // This can be fixed by creating a separate context from the sound library. - addon.tab - .waitForElement("[class*='play-button_play-button_']", { - reduxEvents: ["scratch-gui/modals/OPEN_MODAL"], - }) - .then(() => { - const soundLibrary = document.querySelector("[class*='modal_modal-content_']"); - const reactInternalKey = addon.tab.traps.getInternalKey(soundLibrary); - let reactInternalInstance = soundLibrary[reactInternalKey]; - while (!reactInternalInstance.stateNode?.audioEngine) { - reactInternalInstance = reactInternalInstance.return; - } - const soundLibraryInstance = reactInternalInstance.stateNode; - const SoundLibrary = soundLibraryInstance.constructor; - const AudioEngine = soundLibraryInstance.audioEngine.constructor; - const soundLibraryContext = new AudioContext(); - soundLibraryInstance.audioEngine = new AudioEngine(soundLibraryContext); - SoundLibrary.prototype.componentDidMount = function () { - this.audioEngine = new AudioEngine(soundLibraryContext); - this.playingSoundPromise = null; - }; - }); - // Prevent the VM's context from being resumed while the project is paused const newResume = function () { if (!paused) AudioContext.prototype.resume.call(this); diff --git a/src/addons/generated/upstream-meta.json b/src/addons/generated/upstream-meta.json index be1668b83ba..289d97e6497 100644 --- a/src/addons/generated/upstream-meta.json +++ b/src/addons/generated/upstream-meta.json @@ -1 +1 @@ -{"commit":"b206908"} \ No newline at end of file +{"commit":"e33b0c5"} \ No newline at end of file From f610ee6960bfe94c94b6160f82e189e6fa516992 Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Sun, 25 Oct 2026 12:51:28 -0500 Subject: [PATCH 04/10] Initialize shared audio context if it doesn't exist and we need it Fixes https://github.com/TurboWarp/scratch-gui/issues/1202 --- src/lib/audio/shared-audio-context.js | 41 ++++++++++++++------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/lib/audio/shared-audio-context.js b/src/lib/audio/shared-audio-context.js index d42856d78f1..f1f071c9c68 100644 --- a/src/lib/audio/shared-audio-context.js +++ b/src/lib/audio/shared-audio-context.js @@ -1,34 +1,35 @@ import StartAudioContext from '@turbowarp/startaudiocontext'; -import bowser from 'bowser'; import log from '../log'; let AUDIO_CONTEXT; -if (!bowser.msie) { - /** - * AudioContext can be initialized only when user interaction event happens - */ - const event = - typeof document.ontouchstart === 'undefined' ? - 'mousedown' : - 'touchstart'; - const initAudioContext = () => { - document.removeEventListener(event, initAudioContext); +/** + * AudioContext can be initialized only when user interaction event happens + */ +const event = + typeof document.ontouchstart === 'undefined' ? + 'mousedown' : + 'touchstart'; +const initAudioContext = () => { + document.removeEventListener(event, initAudioContext); + if (AUDIO_CONTEXT) return; - try { - AUDIO_CONTEXT = new (window.AudioContext || window.webkitAudioContext)(); - StartAudioContext(AUDIO_CONTEXT); - } catch (e) { - log.error('could not create shared audio context; sound-related features will not be available', e); - } - }; - document.addEventListener(event, initAudioContext); -} + try { + AUDIO_CONTEXT = new (window.AudioContext || window.webkitAudioContext)(); + StartAudioContext(AUDIO_CONTEXT); + } catch (e) { + log.error('could not create shared audio context; sound-related features will not be available', e); + } +}; +document.addEventListener(event, initAudioContext); /** * Wrap browser AudioContext because we shouldn't create more than one * @return {AudioContext} The singleton AudioContext */ export default function () { + if (!AUDIO_CONTEXT) { + initAudioContext(); + } return AUDIO_CONTEXT; } From 011e5351cd5d1b0e73d73cb14cdfdb37a0a079da Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Sun, 25 Oct 2026 14:51:18 -0500 Subject: [PATCH 05/10] Update translations --- src/addons/settings/translations.json | 8 ++++---- src/lib/tw-translations/generated-translations.json | 6 +++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/addons/settings/translations.json b/src/addons/settings/translations.json index f2a5dc8e8ce..6e0a11b8b8a 100644 --- a/src/addons/settings/translations.json +++ b/src/addons/settings/translations.json @@ -279,7 +279,7 @@ "addonFeedback": "애드온 피드백하기", "confirmResetAll": "정말로 애드온 설정을 기본값으로 초기화하시겠습니까?", "credits": "도움을 준 사람들 :", - "dirty": "설정을 적용하려면 탭을 새로고침해야 합니다.", + "dirty": "설정을 적용하기 위해 탭을 새로고침해야 합니다.", "dirtyButton": "지금 재시작하기", "enableDangerous": "이 애드온은 위험하며 몇몇 기능을 의도적으로 비활성화할 수 있습니다. 일반적인 사용자는 이 애드온을 활성화하지 않는 것이 좋습니다. 정말로 활성화 하시겠습니까?", "export": "설정 내보내기", @@ -287,8 +287,8 @@ "groupNew": "새 기능 ({number})", "groupOthers": "기타 ({number})", "import": "설정 가져오기", - "noCompiler": "이 애드온은 메뉴의 고급 설정 > 컴파일러 비활성화를 설정했거나, \"에디터에서 컴파일러 비활성화\" 애드온을 사용해 컴파일러를 비활성화했을 때에만 동작합니다.", - "noResults": "결과가 없습니다.", + "noCompiler": "이 애드온은 [고급 설정] > [컴파일러 비활성화] 설정을 활성화했거나, '에디터에서 컴파일러 비활성화' 애드온을 사용해 컴파일러를 비활성화했을 때에만 동작합니다.", + "noResults": "결과 없음.", "presets": "프리셋", "reset": "초기화", "resetAll": "모두 초기화", @@ -299,7 +299,7 @@ "tagRecommended": "추천", "tagTheme": "테마", "title": "애드온 설정", - "unsupported": "몇몇 애드온은 다음의 브라우저에서 사용할 수 없습니다 :" + "unsupported": "다음의 브라우저에서 일부 애드온을 사용할 수 없습니다 :" }, "lt": { "addonFeedback": "Įskiepių atsiliepimas", diff --git a/src/lib/tw-translations/generated-translations.json b/src/lib/tw-translations/generated-translations.json index 8effa6da70b..c1e6d633c15 100644 --- a/src/lib/tw-translations/generated-translations.json +++ b/src/lib/tw-translations/generated-translations.json @@ -2218,13 +2218,17 @@ "tw.blocks.mouseButton.secondary": "(2) 오른쪽", "tw.blocks.openDocs": "문서 열기", "tw.browserModal.desktopSettings": "데스크톱 설정 열기", + "tw.browserModal.desktopTitle": "지원되지 않는 실행 환경입니다", + "tw.browserModal.webgl1": "{APP_NAME}을(를) 실행하려면 WebGL을 지원해야 합니다. 현재 실행 환경에서는 WebGL이 지원되지 않습니다. 이 오류는 일시적으로 발생할 수 있으며 컴퓨터를 다시 시작하여 해결할 수 있습니다.", + "tw.browserModal.webglBrowser": "최신 버전의 웹 브라우저를 사용하고 그래픽카드 드라이버를 최신 버전으로 업데이트하시기 바랍니다. 또는 웹 브라우저의 [그래픽 가속] 혹은 [하드웨어 가속] 설정을 변경하여 문제를 해결할 수 있습니다.", + "tw.browserModal.webglDesktop": "또는 데스크톱 앱의 [그래픽 가속] 설정을 변경하여 문제를 해결할 수 있습니다.", "tw.cantUseCloud": "클라우드 변수를 생성할 수는 있으나, 해당 프로젝트가 Scratch에 업로드 하거나, {packager}와 같은 도구를 통해 변환하지 않는 한 클라우드 변수는 작동하지 않습니다.", "tw.changeUsername.cannotChangeWhileRunning": "'사용자 이름'은 프로젝트가 실행되는 동안 변경할 수 없습니다.", "tw.clipboard.danger": "클립보드에 비밀번호와 같은 민감한 정보가 포함되어 있을 경우, 프로젝트에 의해 해당 정보가 다른 사용자 또는 서버와 공유될 수 있습니다.", "tw.clipboard.permission": "일부 브라우저에서는 클립보드에 접근이 불가능할 수 있습니다. 권한을 허용할 경우, 추가적인 클립보드 읽기 요청이 자동으로 허용됩니다.", "tw.clipboard.title": "프로젝트가 클립보드의 데이터 읽기 권한을 요청합니다.", "tw.cloudProvider": "서버 제공자 : {name}", - "tw.cloudServers": "거주지 근처에 있는 서버를 선택하세요 :", + "tw.cloudServers": "가까운 지역의 서버를 선택해주세요 :", "tw.code": "소스코드", "tw.confirmIncompatibleExtension": "이 확장 기능은 스크래치와 호환되지 않습니다.\n해당 확장 기능을 활성화할 경우 프로젝트가 스크래치 웹사이트에 업로드되지 않을 수 있습니다. 계속하시겠습니까?", "tw.createdBy": "제작자 : ", From 5ef75508e47e15609fc3ad0a60863169c37b8855 Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Sun, 25 Oct 2026 15:03:27 -0500 Subject: [PATCH 06/10] Consider debugger addon "new" --- src/addons/addons.js | 2 +- src/addons/addons/debugger/_manifest_entry.js | 4 +++- src/addons/addons/expanded-backpack/_manifest_entry.js | 4 +--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/addons/addons.js b/src/addons/addons.js index 1dd6f1a64b0..989387c8147 100644 --- a/src/addons/addons.js +++ b/src/addons/addons.js @@ -85,7 +85,7 @@ const addons = [ ]; const newAddons = [ - 'expanded-backpack' + 'debugger' ]; // eslint-disable-next-line import/no-commonjs diff --git a/src/addons/addons/debugger/_manifest_entry.js b/src/addons/addons/debugger/_manifest_entry.js index 4676e7313bb..2a484f36b80 100644 --- a/src/addons/addons/debugger/_manifest_entry.js +++ b/src/addons/addons/debugger/_manifest_entry.js @@ -103,6 +103,8 @@ const manifest = { "description": "Replaces the percentage column with a ratio of each block’s total time to the smallest block’s total time." } ], - "tags": [] + "tags": [ + "new" + ] }; export default manifest; diff --git a/src/addons/addons/expanded-backpack/_manifest_entry.js b/src/addons/addons/expanded-backpack/_manifest_entry.js index 83599ed13dd..0dd07aceb8c 100644 --- a/src/addons/addons/expanded-backpack/_manifest_entry.js +++ b/src/addons/addons/expanded-backpack/_manifest_entry.js @@ -7,9 +7,7 @@ const manifest = { "name": "pumpkinhasapatch" } ], - "tags": [ - "new" - ], + "tags": [], "enabledByDefault": false, "settings": [ { From 9c954186705af0d764d08aec86bad0c436c4829b Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Sun, 25 Oct 2026 16:02:23 -0500 Subject: [PATCH 07/10] semver-safe version bumps notably includes likes of dompurify --- package-lock.json | 2405 ++++++++++++++++++++++++--------------------- 1 file changed, 1262 insertions(+), 1143 deletions(-) diff --git a/package-lock.json b/package-lock.json index cfe94171a60..b13972bd5f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -120,26 +120,13 @@ "react-dom": "^16.0.0" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/cli": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.27.2.tgz", - "integrity": "sha512-cfd7DnGlhH6OIyuPSSj3vcfIdnbXukhAyKY8NaZrFadC7pXyL9mOL5WgjcptiEJLi5k3j8aYvLIVCzezrWTaiA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.29.7.tgz", + "integrity": "sha512-/75HwRbAYPqXv/Ax1h7Fg3IZfXgdU98jnA8H93/m/QBaPV3Hp5ICoLqzGYye1yHBCgpmXvtqgSUN8oOKX5tojQ==", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", + "@jridgewell/trace-mapping": "^0.3.28", "commander": "^6.2.0", "convert-source-map": "^2.0.0", "fs-readdir-recursive": "^1.1.0", @@ -163,12 +150,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -177,30 +164,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", - "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", - "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.4", - "@babel/parser": "^7.27.4", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.4", - "@babel/types": "^7.27.3", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -216,9 +203,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.27.5.tgz", - "integrity": "sha512-HLkYQfRICudzcOtjGwkPvGc5nF1b4ljLZh1IRDj50lRZ718NAKVgQpIAUX8bfg6u/yuSKY3L7E0YzIV+OxrB8Q==", + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.29.9.tgz", + "integrity": "sha512-GmrJTAtiRbNip+eKFqeuSvoHMJhKlH36j8U0yE3Gqn45B+SIO7NvsEiHtsmzkBqV1hLSMqYr41dI1aZLTkJ37g==", "dev": true, "license": "MIT", "peer": true, @@ -236,15 +223,15 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.5", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -252,26 +239,26 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -281,18 +268,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", - "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", + "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.27.1", + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/traverse": "^7.29.7", "semver": "^6.3.1" }, "engines": { @@ -303,14 +290,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.10.tgz", + "integrity": "sha512-/YY9soQuWa8TURtHXHT+GbklpbAA+dZErxFGHIr6qgDg96xuGWrTAs1+MfjgVJPF0YLQsOVsOYs8lhgsPbOinQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", + "@babel/helper-annotate-as-pure": "^7.29.7", + "regexpu-core": "^6.5.3", "semver": "^6.3.1" }, "engines": { @@ -353,42 +340,51 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", + "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -398,37 +394,37 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", + "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.1" + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", - "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz", + "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-wrap-function": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-wrap-function": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -438,15 +434,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", + "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -456,81 +452,81 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", + "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.11", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.11.tgz", + "integrity": "sha512-snZbO7MEDOof+hvNa97EjEY7qD7h2kwvQr5AJC3ZhQudKW5dnej6k3kP9NQV88hJwaS8vDqRLFo9rivLEhle2g==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", - "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz", + "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", - "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.10.tgz", + "integrity": "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.6" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "version": "7.29.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.11.tgz", + "integrity": "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.29.11" }, "bin": { "parser": "bin/babel-parser.js" @@ -540,15 +536,15 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", - "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz", + "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -931,13 +927,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -973,13 +969,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1099,13 +1095,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1115,13 +1111,13 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", - "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz", + "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1149,13 +1145,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", - "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz", + "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1165,13 +1161,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.5.tgz", - "integrity": "sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==", + "version": "7.29.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.11.tgz", + "integrity": "sha512-iARF4jjHSM0v8DImCACPXrwEltBP3DgqDpXTvjAMBAVpyEY0LiGss78wvI+KtmW+IJNEvZ5sOhPDCsOsXsIybA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1181,18 +1177,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", - "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", + "version": "7.29.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.11.tgz", + "integrity": "sha512-f8kTDM/nTvpLeafb+TJ4jboFr/Y3BbC+QzgPpPGzSKJqWLnj9LW0WLqv4XKA11LX5sr+EgvLE6Ix3YsCEusodw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.27.1", - "globals": "^11.1.0" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/traverse": "^7.29.10" }, "engines": { "node": ">=6.9.0" @@ -1202,14 +1198,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz", + "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/template": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1219,13 +1215,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz", - "integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz", + "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1235,14 +1232,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", - "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz", + "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1252,13 +1249,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", - "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz", + "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1268,13 +1265,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz", + "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1284,14 +1281,14 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz", + "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1301,15 +1298,15 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz", + "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1319,13 +1316,13 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", - "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz", + "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1335,13 +1332,13 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", - "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz", + "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1351,14 +1348,14 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", - "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz", + "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1368,14 +1365,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz", + "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1385,16 +1382,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz", + "integrity": "sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.8" }, "engines": { "node": ">=6.9.0" @@ -1404,14 +1401,14 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", - "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz", + "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1421,14 +1418,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1438,13 +1435,13 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", - "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz", + "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1454,14 +1451,14 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", - "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz", + "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1471,14 +1468,14 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz", + "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1488,13 +1485,13 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", - "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz", + "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1504,13 +1501,13 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", - "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz", + "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1520,13 +1517,13 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz", - "integrity": "sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.29.7.tgz", + "integrity": "sha512-+1wdDMGNb4UPeY3Q4L5yLiYe6TXPXubs4NjrgRFw13hPRLJfEMw2Q5OXkee6/IfdqePIeW4Jjwe3aBh7SdKz4Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1536,17 +1533,17 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", - "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.29.7.tgz", + "integrity": "sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-syntax-jsx": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1556,13 +1553,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", - "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.29.7.tgz", + "integrity": "sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.27.1" + "@babel/plugin-transform-react-jsx": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1572,14 +1569,14 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", - "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.29.7.tgz", + "integrity": "sha512-H5E+HBgDpr6Q5t+Aj11tL7XkIui1jhbIoArVQnqjgXo5/3YxkN7ZEBcWF4RQlB0T4rrxJQbXS6kiFV6B7XTqUA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1589,13 +1586,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.5.tgz", - "integrity": "sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==", + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz", + "integrity": "sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1605,13 +1602,13 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", - "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz", + "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1621,13 +1618,13 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", - "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz", + "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1637,14 +1634,14 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "version": "7.29.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.11.tgz", + "integrity": "sha512-5xWGhfuMgbOfIjsk/I2c4uMnoqRwQdKYi4QjvybQrcEVE0G9/p3qmIkp2Sxe8YF8DGNNVs5whfwNqIM5684XoQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1654,13 +1651,13 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", - "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz", + "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1670,13 +1667,13 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", - "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz", + "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1686,13 +1683,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", - "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz", + "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1702,13 +1699,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", - "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz", + "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1718,14 +1715,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", - "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz", + "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1886,45 +1883,45 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.10.tgz", + "integrity": "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.9", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "version": "7.29.11", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.11.tgz", + "integrity": "sha512-WCsemW40Cpc6gouC1SrY6PBaZ+oLRlEVY9XBvZBI7il/HyUrb2nJ505wE1MHEFyDZNnrWDEuy4jL50WVHfTTSQ==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-string-parser": "^7.29.11", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1938,9 +1935,9 @@ "license": "MIT" }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", "dev": true, "license": "MIT", "dependencies": { @@ -1970,9 +1967,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -2003,35 +2000,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@eslint/js": { "version": "8.55.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", @@ -2142,9 +2110,9 @@ } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.2.tgz", + "integrity": "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==", "dev": true, "license": "MIT", "dependencies": { @@ -2208,9 +2176,9 @@ } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", "dev": true, "license": "MIT", "engines": { @@ -2901,17 +2869,23 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -2923,19 +2897,10 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -2943,21 +2908,28 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, "node_modules/@microbit/microbit-universal-hex": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@microbit/microbit-universal-hex/-/microbit-universal-hex-0.2.2.tgz", @@ -3036,9 +3008,9 @@ } }, "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3090,9 +3062,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "version": "0.27.12", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.12.tgz", + "integrity": "sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==", "dev": true, "license": "MIT" }, @@ -3145,11 +3117,14 @@ } }, "node_modules/@transifex/api/node_modules/core-js": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.43.0.tgz", - "integrity": "sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.51.0.tgz", + "integrity": "sha512-7bDKx/5jm5MxzsXxc93g6Z2+4ZsuT/MddrfRmTDJNAkWsYWHU8EVNEsBiIEWnMAMCHMmRfUEjkuo3jeNBOIHRw==", "hasInstallScript": true, "license": "MIT", + "engines": { + "node": "*" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -3309,12 +3284,12 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/glob": { @@ -3393,12 +3368,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.1.tgz", - "integrity": "sha512-MX4Zioh39chHlDJbKmEgydJDS3tspMP/lnQC67G3SWsTnb9NeYVWOjkxpOSy4oMfPs4StcWHwBrvUb4ybfnuaw==", + "version": "26.6.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz", + "integrity": "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==", "license": "MIT", "dependencies": { - "undici-types": "~7.8.0" + "undici-types": "~8.9.0" } }, "node_modules/@types/node-hid": { @@ -3458,9 +3433,9 @@ } }, "node_modules/@types/w3c-web-usb": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.10.tgz", - "integrity": "sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.14.tgz", + "integrity": "sha512-Qu3Nn6JFuF4+sHKYl+IcX9vYiI40ogleXzFFSxoE1W94rG98o/kXs8uJ0QSfFzuwBCZWlGfUGpPkgwuuX4PchA==", "license": "MIT" }, "node_modules/@types/webpack": { @@ -3491,19 +3466,19 @@ } }, "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, "license": "BSD-3-Clause", "engines": { - "node": ">= 8" + "node": ">= 12" } }, "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, "license": "MIT", "dependencies": { @@ -3595,9 +3570,9 @@ } }, "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", + "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", "dev": true, "license": "ISC" }, @@ -3819,9 +3794,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz", + "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3892,9 +3867,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -3951,6 +3926,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -4090,18 +4078,18 @@ "license": "MIT" }, "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.2.0.tgz", + "integrity": "sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", + "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "es-shim-unscopables": "^1.1.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" }, @@ -4336,9 +4324,9 @@ } }, "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", + "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", "license": "MIT" }, "node_modules/assert": { @@ -4474,7 +4462,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -4502,15 +4489,26 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", - "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.20.0.tgz", + "integrity": "sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==", "dev": true, "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" } }, "node_modules/babel-code-frame": { @@ -4821,9 +4819,9 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, "license": "MIT", "dependencies": { @@ -4844,7 +4842,7 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -4933,6 +4931,18 @@ "integrity": "sha512-p32+F8dg+ANGx7s8QsZS74ZPHfIycmC2yZcoerzFgbersIYWitPbbF39G6SBx3gyvzyLH5nt1ooocxr0IHuWKA==", "license": "MIT" }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.33", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.33.tgz", + "integrity": "sha512-yiVKDX+qCMRKBE084lXvq9EcwFUhKZ2nU8TK1EQQuOgPNR/lmbGxXOeDdlGUqC2Zz11Cs9rk1d/8NfgBmlkt0w==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -4999,30 +5009,30 @@ "license": "MIT" }, "node_modules/bn.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.5.tgz", + "integrity": "sha512-Vq886eXykuP5E6HcKSSStP3bJgrE6In5WKxVUvJ8XGpWWYs2xZHWqUwzCtGgEtBcxyd57KBFDPFoUfNzdaHCNg==", "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.9", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.9.tgz", + "integrity": "sha512-FISIQxV5u91Y9gvuFq3q/tA/qTqLJn3AhRcEvyozyhJTh5OBFFtv827AdHU7Rbyct4r+Ba1/99oFa1Y3yuFsdw==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.16.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -5060,13 +5070,14 @@ "license": "MIT" }, "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.16.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.1.tgz", + "integrity": "sha512-5Px6J7rfHBAGUhNQ3es4YzcOdBBw0SDcVtThJml4RdnKw4tKs2epA0kPZ+K8X+WiHktT93RHVcQ/3ym5aTCgtg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -5076,9 +5087,9 @@ } }, "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.1.tgz", + "integrity": "sha512-xONzj4PfpPJw6xSqCcT2SmQkBOXpUINUz3o3qXcWJwYlXbkZNcNaUae0o5lle7tKt4HHV6dTgkIRhAXZ3nBMsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5086,7 +5097,7 @@ "deep-equal": "^1.0.1", "dns-equal": "^1.0.0", "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", + "multicast-dns": "^7.2.3", "multicast-dns-service-types": "^1.1.0" } }, @@ -5104,9 +5115,9 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", + "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -5204,24 +5215,23 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", - "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.6.tgz", + "integrity": "sha512-sd+Q65fjlWCYWtZKXiKfrUc8d+4jtp/8f0W2NkwzLtoW4bI6UDnWusLWIurHnmurW0XShIRxpwiOX4EoPtXUAg==", "license": "ISC", "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", + "bn.js": "^5.2.3", + "browserify-rsa": "^4.1.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.5", - "hash-base": "~3.0", + "elliptic": "^6.6.1", "inherits": "^2.0.4", - "parse-asn1": "^5.1.7", + "parse-asn1": "^5.1.9", "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 0.12" + "node": ">= 0.10" } }, "node_modules/browserify-zlib": { @@ -5234,9 +5244,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", - "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", + "version": "4.29.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.4.tgz", + "integrity": "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==", "funding": [ { "type": "opencollective", @@ -5253,10 +5263,11 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001718", - "electron-to-chromium": "^1.5.160", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.11.29", + "caniuse-lite": "^1.0.30001816", + "electron-to-chromium": "^1.5.459", + "node-releases": "^2.0.59", + "update-browserslist-db": "^1.3.4" }, "bin": { "browserslist": "cli.js" @@ -5266,11 +5277,11 @@ } }, "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.2.tgz", + "integrity": "sha512-V2o8YS2EhrKMO9AumnkK0ynynfFlsajpYupwq7S46H5mhcanwxDkNTw3K67wPIcKTH1ffkA4vhMOtAc7gRmPZw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { "node-int64": "^0.4.0" } @@ -5505,14 +5516,14 @@ } }, "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" }, "engines": { @@ -5616,9 +5627,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001722", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001722.tgz", - "integrity": "sha512-DCQHBBZtiK6JVkAGw7drvAMK0Q0POD/xZvEmDp6baiMMP6QXXk9HpD6mNYBZWhOPG6LvIDb82ITqtWjhDckHCA==", + "version": "1.0.30001819", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001819.tgz", + "integrity": "sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==", "funding": [ { "type": "opencollective", @@ -5674,9 +5685,9 @@ } }, "node_modules/cheerio": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.0.tgz", - "integrity": "sha512-+0hMx9eYhJvWbgpKV9hN7jg0JcwydpopZE4hgi+KvQtByZXPp04NiCWU0LzcAbP63abZckIHkTQaXVF52mX3xQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", "dev": true, "license": "MIT", "dependencies": { @@ -5684,16 +5695,16 @@ "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", - "encoding-sniffer": "^0.2.0", - "htmlparser2": "^10.0.0", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", "parse5": "^7.3.0", "parse5-htmlparser2-tree-adapter": "^7.1.0", "parse5-parser-stream": "^7.1.2", - "undici": "^7.10.0", + "undici": "^7.19.0", "whatwg-mimetype": "^4.0.0" }, "engines": { - "node": ">=18.17" + "node": ">=20.18.1" }, "funding": { "url": "https://github.com/cheeriojs/cheerio?sponsor=1" @@ -5800,13 +5811,14 @@ } }, "node_modules/cipher-base": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", - "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", "license": "MIT", "dependencies": { "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" }, "engines": { "node": ">= 0.10" @@ -5847,9 +5859,9 @@ } }, "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", @@ -5946,9 +5958,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", "dev": true, "license": "MIT" }, @@ -6042,22 +6054,27 @@ } }, "node_modules/compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.2.tgz", + "integrity": "sha512-o8vI5RE5A6EVVOd9o41jKp41aJom+QTEO/Bx8MYNjexMo/Bv2WOjUfZr+aL0WnYSgymUy6zeguqLTsIhV0gMvQ==", "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", + "destroy": "1.2.0", "negotiator": "~0.6.4", - "on-headers": "~1.0.2", + "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "engines": { "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/compression/node_modules/debug": { @@ -6163,9 +6180,9 @@ } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "dev": true, "license": "MIT" }, @@ -6276,13 +6293,16 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.43.0.tgz", - "integrity": "sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.51.0.tgz", + "integrity": "sha512-52r6fkXgxv4GLMjmFcMWRx7X9bw071xTTdrDcdyPGRqU2oE+9pCG0bAOMifSBdLw0JRBZKEF0q3B55qPlLuE8g==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.25.0" + "browserslist": "^4.29.3" + }, + "engines": { + "node": ">=6.4.0" }, "funding": { "type": "opencollective", @@ -6346,9 +6366,9 @@ } }, "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.2.tgz", + "integrity": "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==", "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -6391,9 +6411,9 @@ } }, "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", + "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", "license": "MIT" }, "node_modules/create-hash": { @@ -6669,9 +6689,9 @@ "license": "BSD" }, "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6705,9 +6725,9 @@ } }, "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -6817,9 +6837,9 @@ } }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -7037,9 +7057,9 @@ } }, "node_modules/dedent": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", - "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -7138,16 +7158,6 @@ "node": ">=6" } }, - "node_modules/default-gateway/node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/default-gateway/node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -7437,9 +7447,9 @@ } }, "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", + "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", "license": "MIT" }, "node_modules/dir-glob": { @@ -7469,14 +7479,16 @@ "license": "MIT" }, "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "license": "MIT", "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" } }, "node_modules/dns-txt": { @@ -7581,9 +7593,9 @@ } }, "node_modules/dompurify": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.5.tgz", - "integrity": "sha512-OrwIBKsdNSVEeubdJ1HBv/wNENRM9ytAVCv7YXt//A3vPdVMNuACRqK9mXCGCBW2ln7BT/A4X0jXHo2Gu89miA==", + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.17.tgz", + "integrity": "sha512-B/pSlYVHQ58kqISD/yDjuJ1yfzI34m1gF4lAod2bwSRhiN4K5Cl3H8Af7hqB2PmTL911tdEudnnXn5FnhRoz0w==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -7697,9 +7709,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.167", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.167.tgz", - "integrity": "sha512-LxcRvnYO5ez2bMOFpbuuVuAI5QNeY1ncVytE/KXaL6ZNfzX1yPlAO0nSOyIHx2fVAuUprMqPs/TdVhUFZy7SIQ==", + "version": "1.5.464", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.464.tgz", + "integrity": "sha512-nRa65aFge40viPAKxMKULIY8tcXKwKboJWNn4RoKwyWXJ6SP7BnrDGKUTzc64818jIciH0PK7LSF8QzZes19GA==", "license": "ISC" }, "node_modules/elliptic": { @@ -7718,9 +7730,9 @@ } }, "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", + "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", "license": "MIT" }, "node_modules/email-addresses": { @@ -7784,9 +7796,9 @@ } }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -7934,18 +7946,18 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", "dev": true, "license": "MIT", "dependencies": { @@ -8011,6 +8023,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-abstract-get": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz", + "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "is-callable": "^1.2.7", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-array-method-boxes-properly": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", @@ -8037,37 +8068,37 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz", + "integrity": "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", + "es-abstract": "^1.24.2", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", + "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", + "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -8106,15 +8137,18 @@ } }, "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz", + "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==", "dev": true, "license": "MIT", "dependencies": { + "es-abstract-get": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" + "is-date-object": "^1.1.0", + "is-symbol": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -8307,15 +8341,15 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", "dev": true, "license": "MIT", "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.6" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -8328,6 +8362,30 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "2.0.0-next.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", + "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.2", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-import-resolver-webpack": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.11.1.tgz", @@ -8379,9 +8437,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.14.0.tgz", + "integrity": "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==", "dev": true, "license": "MIT", "dependencies": { @@ -8522,19 +8580,25 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "version": "2.0.0-next.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", + "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.2", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8688,22 +8752,6 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -8730,19 +8778,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -8788,9 +8823,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8993,9 +9028,9 @@ } }, "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", @@ -9073,40 +9108,40 @@ } }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.3.tgz", + "integrity": "sha512-Bdcs4+3qlpVlx2NRn6fgX2Ue2/gGRaPeawebgclM0ERSCqDpA+owF1fdPwjJUTAJWMTuAaxjDf+hzb0/4eKvvw==", "dev": true, "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", + "body-parser": "~1.20.5", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "~0.1.13", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "~6.16.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -9127,9 +9162,9 @@ "license": "MIT" }, "node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "license": "MIT", "engines": { @@ -9154,13 +9189,14 @@ "license": "MIT" }, "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.16.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.1.tgz", + "integrity": "sha512-5Px6J7rfHBAGUhNQ3es4YzcOdBBw0SDcVtThJml4RdnKw4tKs2epA0kPZ+K8X+WiHktT93RHVcQ/3ym5aTCgtg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -9389,9 +9425,9 @@ "license": "MIT" }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", + "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -9411,13 +9447,13 @@ } }, "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.4.tgz", + "integrity": "sha512-tGQtaoYisPDriJBN0mT5yZSyNETnJGA1gTYxaVRAE5KUO3LI9kPUc9WIu8JXcxaIci+faIKlzXqXyPgrmubtBQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "bser": "2.1.1" + "bser": "2.1.2" } }, "node_modules/fd-slicer": { @@ -9549,18 +9585,18 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, "engines": { @@ -9851,9 +9887,9 @@ } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", "dev": true, "license": "ISC" }, @@ -9869,9 +9905,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.1.tgz", + "integrity": "sha512-FNvFGzoMLWmE6Yj9spb/zjd7yiNCHiAW9/Tg9CXrQ8wuu32HtlJOwWO11OJafl5FfY3DxTdQ0vj42zU1kvv5jg==", "dev": true, "funding": [ { @@ -9893,7 +9929,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.2.7" @@ -9924,17 +9959,17 @@ } }, "node_modules/form-data": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", - "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -10107,18 +10142,21 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz", + "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" + "has-property-descriptors": "^1.0.2", + "hasown": "^2.0.4", + "is-callable": "^1.2.7", + "is-document.all": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10137,6 +10175,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -10355,7 +10403,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -10444,12 +10492,19 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -10726,7 +10781,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -10825,9 +10879,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -10899,14 +10953,17 @@ } }, "node_modules/html-element-map": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz", - "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.4.1.tgz", + "integrity": "sha512-D+8Bp441S8PgDebxxF9jNZ9odEtaX13Mu1vgTvTe8yWRrCFEhyn5m8wzB0uF7u0KOwIRAn66+Zx3wXDYqjL1yw==", "dev": true, "license": "MIT", "dependencies": { - "array.prototype.filter": "^1.0.0", - "call-bind": "^1.0.2" + "array.prototype.filter": "^1.0.4", + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10993,9 +11050,9 @@ } }, "node_modules/htmlparser2": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", - "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -11008,14 +11065,14 @@ "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.2.1", - "entities": "^6.0.0" + "domutils": "^3.2.2", + "entities": "^7.0.1" } }, "node_modules/htmlparser2/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -11039,20 +11096,24 @@ "license": "MIT" }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-parser-js": { @@ -11689,13 +11750,13 @@ "license": "MIT" }, "node_modules/ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/ipaddr.js": { @@ -11719,15 +11780,15 @@ } }, "node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.2.tgz", + "integrity": "sha512-AIbwAcazqP3R65dGvqk1V+a+vE5Fg1yu/ZKMOiBWSUIXXiwQkYmXQcVa2O0nh0tSDKDFKxG2mY7dB1Sr4hEP1g==", "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.3" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" } }, "node_modules/is-arguments": { @@ -11847,7 +11908,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -11857,12 +11917,12 @@ } }, "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.17.0.tgz", + "integrity": "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==", "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.4" }, "engines": { "node": ">= 0.4" @@ -11919,12 +11979,12 @@ } }, "node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.4.tgz", + "integrity": "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww==", "license": "MIT", "dependencies": { - "is-accessor-descriptor": "^1.0.1", + "is-accessor-descriptor": "^1.0.2", "is-data-descriptor": "^1.0.1" }, "engines": { @@ -11940,6 +12000,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-document.all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz", + "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", @@ -12004,14 +12080,15 @@ } }, "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, @@ -12286,7 +12363,6 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" @@ -12377,15 +12453,15 @@ } }, "node_modules/is2": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", - "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.1.tgz", + "integrity": "sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==", "dev": true, "license": "MIT", "dependencies": { "deep-is": "^0.1.3", - "ip-regex": "^4.1.0", - "is-url": "^1.2.4" + "ip-regex": "^2.1.0", + "is-url": "^1.2.2" }, "engines": { "node": ">=v0.10.0" @@ -12447,9 +12523,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", "bin": { @@ -12491,9 +12567,9 @@ } }, "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", "bin": { @@ -12532,9 +12608,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -13955,9 +14031,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, "license": "ISC", "bin": { @@ -14277,10 +14353,20 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -14404,9 +14490,9 @@ } }, "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.2.tgz", + "integrity": "sha512-3l+rb15IOWtUhU0H5MFqES/T6Kh7abYwjosBey/vD6hDt8zoEffkSC5Ws5SGtgVw3gBx2NEbhTeSW1+kWkpyTQ==", "dev": true, "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { @@ -14569,15 +14655,15 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", "license": "MIT" }, "node_modules/lodash._getnative": { @@ -14935,9 +15021,9 @@ } }, "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", + "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", "license": "MIT" }, "node_modules/mime": { @@ -15003,9 +15089,10 @@ } }, "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "version": "2.19.2", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.2.tgz", + "integrity": "sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==", + "license": "MIT", "dependencies": { "dom-walk": "^0.1.0" } @@ -15032,9 +15119,9 @@ "license": "MIT" }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -15077,10 +15164,10 @@ } }, "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "license": "ISC", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.7.tgz", + "integrity": "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==", + "license": "BlueOak-1.0.0", "dependencies": { "minipass": "^3.0.0" }, @@ -15233,7 +15320,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -15303,9 +15390,9 @@ } }, "node_modules/moo": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.3.tgz", + "integrity": "sha512-m2fmM2dDm7GZQsY7KK2cme8agi+AAljILjQnof7p1ZMDe6dQ4bdnSMx0cPppudoeNv5hEFQirN6u+O4fDE0IWA==", "dev": true, "license": "BSD-3-Clause" }, @@ -15345,13 +15432,13 @@ "license": "MIT" }, "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "license": "MIT", "dependencies": { - "dns-packet": "^1.3.1", + "dns-packet": "^5.2.2", "thunky": "^1.0.2" }, "bin": { @@ -15375,9 +15462,9 @@ } }, "node_modules/nan": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", - "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.30.0.tgz", + "integrity": "sha512-P5mokDkSvCGBz6mZDD/2l+w9QoICRXdCyZ9ONGmTePr40oihJg3Kpn0YU3twKd6PJnwSlLBWNQeOT6yWEV2c4A==", "license": "MIT", "optional": true }, @@ -15474,6 +15561,25 @@ "tslib": "^2.0.3" } }, + "node_modules/node-exports-info": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.2.tgz", + "integrity": "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -15543,10 +15649,13 @@ } }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "license": "MIT" + "version": "2.0.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.60.tgz", + "integrity": "sha512-OmO8+GM1JUZqXET720VrJCwkjUCXmCMQm0Z3UDDRbfNLHS4NEAvY60j5jiFv0tkKw2PNNlqOLhahVmwJIOLDIQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -15684,9 +15793,9 @@ } }, "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", @@ -15814,22 +15923,22 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", - "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.9.tgz", + "integrity": "sha512-mt8YM6XwsTTovI+kdZdHSxoyF2DI59up034orlC9NfweclcWOt7CVascNNLp6U+bjFVCVCIh9PwS76tDM/rH8g==", "dev": true, "license": "MIT", "dependencies": { - "array.prototype.reduce": "^1.0.6", - "call-bind": "^1.0.7", + "array.prototype.reduce": "^1.0.8", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "gopd": "^1.0.1", - "safe-array-concat": "^1.1.2" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "gopd": "^1.2.0", + "safe-array-concat": "^1.1.3" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15851,15 +15960,16 @@ } }, "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.5.tgz", + "integrity": "sha512-gXT7jC9u2eJNjATa6kxXGt5ih/O7EHQ/q62HbOfLpWpKL2YcPd7AcvylEV/cWKSnzJGjmld2bUQCxwNkRNhPsQ==", "dev": true, "license": "MIT", "dependencies": { + "call-bind": "^1.0.9", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2" }, "engines": { "node": ">= 0.4" @@ -15912,9 +16022,9 @@ "integrity": "sha512-VYAQRSZo7qoBcwB5G29YqVPLnxvDkWulE3x35kwH3bq4GdH/ZkHrcPPhxVfaOGYGZ5KV2/55UpcjcyNIO1qZoQ==" }, "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.2.tgz", + "integrity": "sha512-ATWUv387i+nLD49EiDoOft5scf32Vsdz3ktrQJG9bi7jRFmaXTssvyvj1EmeKVVgvesbqUtvQQvaS2TpTukAZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15922,12 +16032,16 @@ }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "dev": true, "license": "MIT", "engines": { @@ -16007,13 +16121,14 @@ } }, "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", + "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.6", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" }, @@ -16192,16 +16307,15 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", - "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "version": "5.1.10", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.10.tgz", + "integrity": "sha512-gBlTKLbYnAJN9WjmawVOMfaGvVoy4lX0LH18t7ccwtEG9RgAa4ETf2eu3d2J4e/5SoCjCms0A0UF4tTw/Eyn6Q==", "license": "ISC", "dependencies": { "asn1.js": "^4.10.1", "browserify-aes": "^1.2.0", "evp_bytestokey": "^1.0.3", - "hash-base": "~3.0", - "pbkdf2": "^3.1.2", + "pbkdf2": "^3.1.7", "safe-buffer": "^5.2.1" }, "engines": { @@ -16345,6 +16459,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "devOptional": true, "license": "MIT" }, @@ -16390,9 +16505,9 @@ "license": "MIT" }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", "dev": true, "license": "MIT" }, @@ -16406,19 +16521,20 @@ } }, "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.7.tgz", + "integrity": "sha512-nS4mvFgVwUrecPTRdpdseM2fwpdfnX0/HibA8DgBRQtihUAzHQYJFU2l+OlEtiXtpqkrMvCPDwyXMUnASDt6Qw==", "license": "MIT", "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.2" }, "engines": { - "node": ">=0.12" + "node": ">= 0.10" } }, "node_modules/pend": { @@ -16440,9 +16556,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -16556,9 +16672,9 @@ } }, "node_modules/portfinder": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.37.tgz", - "integrity": "sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==", + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz", + "integrity": "sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==", "dev": true, "license": "MIT", "dependencies": { @@ -16589,7 +16705,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -17183,9 +17298,9 @@ "license": "MIT" }, "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz", + "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17194,6 +17309,10 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/proxy-from-env": { @@ -17252,15 +17371,15 @@ } }, "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "version": "4.12.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", + "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", "license": "MIT" }, "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -17314,9 +17433,9 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.5.tgz", + "integrity": "sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==", "license": "BSD-3-Clause", "engines": { "node": ">=0.6" @@ -17446,16 +17565,16 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" @@ -17774,22 +17893,10 @@ } }, "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/read-cache/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.2.tgz", + "integrity": "sha512-/peqiBB/n07gQGLsWaHho3WfvUyRscw0gYTsEFMhrIe/nWLkYaf5SbKYjGYqtRV3aPwykJgF2VEMo1ac4bnsGA==", + "license": "MIT" }, "node_modules/read-package-json": { "version": "2.1.2", @@ -17902,16 +18009,16 @@ } }, "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.5.0.tgz", + "integrity": "sha512-1s+CxXjJ71i7LNVy8nYwg47XV4y6lAnOEhsMtSKq3WpmPfhl9LuKlTqKIn/3yUpE8lBz+W+TT88Bxyhnr0U4yw==", "dev": true, "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.3.0.tgz", + "integrity": "sha512-9ns8odR8e9q3otKeHj3DE80jZYKg6zVeZKE+zQmRKXFoVUcuiTGeO6iusDhPRoIQQPVPRvH+SfBhrTud4eczuw==", "dev": true, "license": "MIT", "dependencies": { @@ -17962,18 +18069,18 @@ } }, "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.5.3.tgz", + "integrity": "sha512-E8VgUoSK+LMQrLboDxavm76MTBGrQhx9RiNuomRmYnZ10Uw12HrI8fkxOOncktb2hBpzIZ9SV/347euQHG5z+g==", "dev": true, "license": "MIT", "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", + "regenerate": "^1.5.0", + "regenerate-unicode-properties": "^10.3.0", "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { "node": ">=4" @@ -17987,31 +18094,18 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.4.tgz", + "integrity": "sha512-EWV80YgFaVgFrjGCAsV7oybp4GOxbls5RzBg8OB0nKEVXsBJR1JlV8Di1JhCROg3MzTfe1RI8yitIm1eOs68iA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", @@ -18204,7 +18298,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "license": "MIT", "bin": { "uuid": "bin/uuid" @@ -18235,12 +18329,13 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.13", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.13.tgz", + "integrity": "sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA==", "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.17.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -18354,9 +18449,9 @@ "license": "MIT" }, "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.4.tgz", + "integrity": "sha512-zepuGL0ulf+nt+XaFrlKeaiTJeyPFPLLY62+ncq1/VTHBdt3HsfXOH60priZ6tnXQozdGcDeIF5JVTanvIcYWQ==", "dev": true, "license": "MIT", "engines": { @@ -18416,13 +18511,31 @@ } }, "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", "license": "MIT", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "^3.1.2", + "inherits": "^2.0.4" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ripemd160/node_modules/hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/rst-selector-parser": { @@ -18470,15 +18583,15 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, @@ -18574,11 +18687,14 @@ "license": "MIT" }, "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", "dev": true, - "license": "ISC" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } }, "node_modules/scheduler": { "version": "0.19.1", @@ -18612,7 +18728,6 @@ "node_modules/scratch-audio": { "version": "0.1.0", "resolved": "git+ssh://git@github.com/TurboWarp/scratch-audio.git#dc47bf3bc177289531ed8a4fb616fed895dc303a", - "integrity": "sha512-JWfcMClxHzQLHGjL/LCx6IP0D0eF3HNT+Zp5vwHUmh0Lg8OWH3hscnvCWJFj8EkRf+gQ07uOMIt9VT3MwD6CWQ==", "license": "BSD-3-Clause", "dependencies": { "@turbowarp/nanolog": "^0.2.0", @@ -18775,7 +18890,7 @@ }, "node_modules/scratch-vm": { "version": "2.1.46", - "resolved": "git+ssh://git@github.com/TurboWarp/scratch-vm.git#371839de44e1c7790e0bb4a6774d1acb8fa1e47a", + "resolved": "git+ssh://git@github.com/TurboWarp/scratch-vm.git#f26ff67e951258a84d25cad3acaf8804eb202318", "license": "MPL-2.0", "dependencies": { "@turbowarp/json": "^0.1.2", @@ -18988,25 +19103,25 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, "engines": { "node": ">= 0.8.0" @@ -19029,16 +19144,6 @@ "dev": true, "license": "MIT" }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/serialize-javascript": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", @@ -19049,22 +19154,26 @@ } }, "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", "dev": true, "license": "MIT", "dependencies": { - "accepts": "~1.3.4", + "accepts": "~1.3.8", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" }, "engines": { "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-index/node_modules/debug": { @@ -19088,28 +19197,22 @@ } }, "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "license": "MIT", "dependencies": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true, - "license": "ISC" - }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -19117,13 +19220,6 @@ "dev": true, "license": "MIT" }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true, - "license": "ISC" - }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -19135,16 +19231,16 @@ } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "dev": true, "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "~0.19.1" }, "engines": { "node": ">= 0.8.0" @@ -19255,16 +19351,23 @@ "license": "ISC" }, "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "license": "(MIT AND BSD-3-Clause)", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/shallow-copy": { @@ -19351,14 +19454,14 @@ "license": "MIT" }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -19370,13 +19473,13 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -19548,9 +19651,9 @@ } }, "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", @@ -19736,9 +19839,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "version": "3.0.24", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.24.tgz", + "integrity": "sha512-cLS9TtWkIQFyLkJ3/5aFQAOHOSKTlOs/7WDut/XPSdjom1fJhUdkepeJAKXa9Y05+FabHd0sti+Et559vDtkpQ==", "license": "CC0-1.0" }, "node_modules/spdy": { @@ -19935,9 +20038,9 @@ } }, "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", @@ -19982,9 +20085,9 @@ "license": "MIT" }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true, "license": "MIT", "engines": { @@ -20140,25 +20243,25 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.1.0.tgz", + "integrity": "sha512-tHNHTxInrYLCga9O9YGxWA3G9/nnzQw8UGAyqGx3Ar1pSTTzIuM4woFSq4SowkXCjJIwq5sIiQvEfRI9tCH1qQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", + "es-abstract": "^1.24.2", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", + "es-object-atoms": "^1.1.2", + "get-intrinsic": "^1.3.0", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.4", "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" + "side-channel": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -20168,19 +20271,20 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz", + "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -20190,16 +20294,16 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz", + "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "es-object-atoms": "^1.1.2" }, "engines": { "node": ">= 0.4" @@ -20373,6 +20477,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "ISC", "dependencies": { "chownr": "^2.0.0", @@ -20420,14 +20525,14 @@ "license": "ISC" }, "node_modules/tcp-port-used": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", - "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.3.tgz", + "integrity": "sha512-4CEQ3qRJYo+mtEbJ+OoQu3dF4TDkwaO3RDVC4UzP5cpAOIUWwuwPjD7sdxDFFqsMUjsXVVYBMlg/boAaloThMA==", "dev": true, "license": "MIT", "dependencies": { "debug": "4.3.1", - "is2": "^2.0.6" + "is2": "2.0.1" } }, "node_modules/tcp-port-used/node_modules/debug": { @@ -20561,13 +20666,13 @@ } }, "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.42.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.42.0.tgz", - "integrity": "sha512-UYCvU9YQW2f/Vwl+P0GfhxJxbUGLwd+5QrrGgLajzWAtC/23AX0vcise32kkP7Eu0Wu9VlzzHAXkLObgjQfFlQ==", + "version": "5.51.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz", + "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.14.0", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -20691,9 +20796,23 @@ "license": "MIT" }, "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "license": "MIT" }, "node_modules/to-object-path": { @@ -20931,9 +21050,9 @@ } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -20961,7 +21080,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -20993,19 +21111,18 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.5.tgz", + "integrity": "sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", + "call-bind": "^1.0.9", + "for-each": "^0.3.5", "gopd": "^1.2.0", - "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" + "reflect.getprototypeof": "^1.0.10" }, "engines": { "node": ">= 0.4" @@ -21015,18 +21132,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz", + "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" }, "engines": { "node": ">= 0.4" @@ -21385,9 +21502,9 @@ } }, "node_modules/undici": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.10.0.tgz", - "integrity": "sha512-u5otvFBOBZvmdjWLVW+5DAc9Nkq8f24g0O9oY7qw2JVIF1VocIFoyz9JFkuVOS2j41AufeO0xnlweJ2RLT8nGw==", + "version": "7.30.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.30.1.tgz", + "integrity": "sha512-03KrMbjIFDWQR5RNPrSw3bd1r12JpyFQl9/yxjUbJtqkjmllqC5lFjZh6ujeuJCKr8EOQvRW872Oy/az+nLYxg==", "dev": true, "license": "MIT", "engines": { @@ -21395,9 +21512,9 @@ } }, "node_modules/undici-types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", - "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -21425,9 +21542,9 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "dev": true, "license": "MIT", "engines": { @@ -21435,9 +21552,9 @@ } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "dev": true, "license": "MIT", "engines": { @@ -21581,9 +21698,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz", + "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==", "funding": [ { "type": "opencollective", @@ -21743,12 +21860,13 @@ } }, "node_modules/url/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.16.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.1.tgz", + "integrity": "sha512-5Px6J7rfHBAGUhNQ3es4YzcOdBBw0SDcVtThJml4RdnKw4tKs2epA0kPZ+K8X+WiHktT93RHVcQ/3ym5aTCgtg==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -21819,6 +21937,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -23476,7 +23595,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "dev": true, "license": "MIT", "bin": { @@ -23729,9 +23848,9 @@ } }, "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.5.tgz", + "integrity": "sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -23757,6 +23876,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", "dev": true, "license": "MIT", "dependencies": { @@ -23884,14 +24004,13 @@ "license": "ISC" }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.24.tgz", + "integrity": "sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", + "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", @@ -24044,9 +24163,9 @@ } }, "node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "version": "6.2.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.6.tgz", + "integrity": "sha512-XTrf1gv7kXoVf1hbC3PAyAiPgR8Wz1blcrYIjEsUmr08BLksT41R8KbjmS9408C2ERx7v1JDLD/BkpLEttjfKA==", "dev": true, "license": "MIT", "dependencies": { @@ -24122,9 +24241,9 @@ "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", "dev": true, "license": "MIT", "dependencies": { From 59cf840b964a4379dbe20ad49704495c1a549818 Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Sat, 31 Oct 2026 12:48:12 -0500 Subject: [PATCH 08/10] Update addons - new translations --- src/addons/addons-l10n/de.json | 49 +++++++++++++++---------- src/addons/addons-l10n/es.json | 4 +- src/addons/addons-l10n/fi.json | 19 ++++++++-- src/addons/addons-l10n/fr.json | 4 +- src/addons/addons-l10n/hu.json | 2 +- src/addons/addons-l10n/it.json | 22 +++++++++-- src/addons/addons-l10n/ko.json | 9 +++++ src/addons/addons-l10n/ru.json | 18 +++++++++ src/addons/addons-l10n/sl.json | 15 +++++++- src/addons/addons-l10n/zh-cn.json | 6 +-- src/addons/generated/upstream-meta.json | 2 +- 11 files changed, 115 insertions(+), 35 deletions(-) diff --git a/src/addons/addons-l10n/de.json b/src/addons/addons-l10n/de.json index 6de8c6c3336..d8741fc295e 100644 --- a/src/addons/addons-l10n/de.json +++ b/src/addons/addons-l10n/de.json @@ -1,5 +1,5 @@ { - "_general/blocks/anticlockwise": "im Gegenuhrzeigersinn", + "_general/blocks/anticlockwise": "entgegen des Uhrzeigersinnes", "_general/blocks/clockwise": "im Uhrzeigersinn", "_general/blocks/green-flag": "Flagge", "editor-devtools/clean-plus": "Blöcke aufräumen +", @@ -46,20 +46,24 @@ "mediarecorder/record-duration": "Aufnahmedauer (in Sekunden)", "mediarecorder/record-mic": "Mikrofonklänge einschließen", "mediarecorder/record-until-stop": "Aufnahme anhalten, wenn das Projekt gestoppt wird", - "mediarecorder/record-until-stop-disabled": "Du musst \"{afterFlagOption}\" aktivieren um diese Option zu verwenden.", + "mediarecorder/record-until-stop-disabled": "Du musst \"{afterFlagOption}\" aktivieren, um diese Option zu verwenden.", "mediarecorder/start": "Starten", "mediarecorder/start-delay": "Startverzögerung (in Sekunden)", "mediarecorder/starting-in": "Startet in {secs}...", "mediarecorder/stop": "Aufnahme stoppen", "debugger/block-breakpoint": "unterbrechen", - "debugger/block-error": "schreibe Fehler %s im Log", - "debugger/block-log": "schreibe %s im Log", - "debugger/block-warn": "schreibe Warnung %s im Log", - "debugger/cannot-pause-player": "Der \"unterbrechen\"-Block kann nur im Editor verwendet werden.", + "debugger/block-error": "schreibe Fehler %s im Protokoll", + "debugger/block-log": "schreibe %s im Protokoll", + "debugger/block-start-timer": "starte die Stoppuhr %s", + "debugger/block-stop-timer": "halte die Stoppuhr %s an", + "debugger/block-warn": "schreibe Warnung %s im Protokoll", + "debugger/cannot-pause-player": "Der \"unterbrechen\"-Block kann nur verwendet werden, während du im Editor bist..", "debugger/clear": "Löschen", "debugger/clone-of": "Klon von {sprite}", "debugger/close": "Schließen", + "debugger/console": "Protokolle", "debugger/debug": "Debuggen", + "debugger/default-timer-label": "Stoppuhr1", "debugger/empty-string": "(leerer Text)", "debugger/enter-format": "Exportformat eingeben:", "debugger/export": "Exportieren", @@ -67,16 +71,23 @@ "debugger/icon-error": "Fehler", "debugger/icon-warn": "Warnung", "debugger/log-msg-broadcasted": "Nachricht '{broadcast}' gesendet.", - "debugger/log-msg-clone-cap": "Klonen von '{sprite}' fehlgeschlagen, es können nicht mehr als 300 Klone erzeugt werden.", + "debugger/log-msg-clone-cap": "'{sprite}' konnte nicht geklont werden, weil nicht mehr als 300 Klone existieren können.", "debugger/log-msg-clone-created": "'{sprite}' geklont.", "debugger/log-msg-flag-clicked": "Grüne Flagge angeklickt.", - "debugger/no-logs": "Es gibt keine Logs zum Anzeigen.", - "debugger/no-threads-running": "Es werden momentan keine Threads ausgeführt.", + "debugger/no-logs": "Es gibt keine Protokolle zum Anzeigen.", + "debugger/no-threads-running": "Aktuell werden keine Threads ausgeführt.", "debugger/performance-clonecount-graph-tooltip": "Klone: {clones}", "debugger/performance-clonecount-title": "Klone", "debugger/step": "Schritt", "debugger/step-desc": "Führt einen Block aus.", + "debugger/tab-logs": "Protokolle", "debugger/tab-performance": "Leistung", + "debugger/timing-average-time": "Durchschnittliche Zeit", + "debugger/timing-call-count": "Aufrufanzahl", + "debugger/timing-no-timers": "Keine Stoppuhren gestartet.", + "debugger/timing-percent-time": "Zeitprozentsatz", + "debugger/timing-ratio-time": "Zeitverhältnis", + "debugger/timing-total-time": "Gesamte Zeit", "debugger/unknown-sprite": "(unbekannte Figur)", "debugger/unpause": "Fortsetzen", "pause/play": "Fortfahren", @@ -90,8 +101,8 @@ "onion-skinning/merge": "Mischen", "onion-skinning/mode": "Modus", "onion-skinning/next": "Nächstes Kostüm", - "onion-skinning/opacity": "Transparenz (%)", - "onion-skinning/opacityStep": "Transparenz-Abstufung (%)", + "onion-skinning/opacity": "Deckkraft (%)", + "onion-skinning/opacityStep": "Deckkraft-Abstufung (%)", "onion-skinning/previous": "Vorheriges Kostüm", "onion-skinning/settings": "Einstellungen für Onion Skinning", "onion-skinning/tint": "Färbung", @@ -140,10 +151,10 @@ "gamepad/key-space": "Leertaste", "gamepad/key-up": "Oben", "gamepad/keyinput-title": "Klicke und drücke eine Taste oder klicke, um Knopf zu wechseln. Drücke Esc zum abbrechen. Löschen oder Entf zum Löschen.", - "gamepad/no-controllers": "Keine Controller gefunden. Schließe einen an und drücke einen der Knöpfe.", + "gamepad/no-controllers": "Es wurde kein Controller gefunden. Versuche, einen anzuschließen und drücke einen der Knöpfe.", "gamepad/reset": "Alle Steuerungen zu Projektstandards zurücksetzen", "gamepad/settings": "Gamepad-Einstellungen", - "gamepad/store-in-project": "Die oben angeführten Mappings im Projekt speichern. Nach dem Speichern des Projekts werden sie die neue Standardkonfiguration sein.", + "gamepad/store-in-project": "Die oben aufgeführten Mappings im Projekt speichern. Nach dem Speichern des Projekts werden sie die neue Standardkonfiguration sein.", "folders/add-to-folder": "zu Ordner \"{folder}\" hinzufügen", "folders/closed-folder": "Ordner", "folders/confirm-backpack-folder": "Den ganzen Ordner im Lager speichern?", @@ -172,9 +183,9 @@ "block-switching/data_setvariableto": "setze Variable auf", "block-switching/data_showlist": "zeige Liste", "block-switching/data_showvariable": "zeige Variable", - "block-switching/debugger_error": "Fehler im Log schreiben", - "block-switching/debugger_log": "im Log schreiben", - "block-switching/debugger_warn": "Warnung im Log schreiben", + "block-switching/debugger_error": "schreibe Fehler im Protokoll", + "block-switching/debugger_log": "schreibe im Protokoll", + "block-switching/debugger_warn": "schreibe Warnung im Protokoll", "block-switching/event_broadcast": "sende an alle", "block-switching/event_broadcastandwait": "sende an alle und warte", "block-switching/looks_backdropnumbername": "Bühnenbildnummer oder -name", @@ -240,10 +251,10 @@ "move-to-top-layer/move-to-front-layer": "gehe zu vorderster Ebene", "rename-broadcasts/RENAME_BROADCAST": "Nachricht umbenennen", "rename-broadcasts/RENAME_BROADCAST_MODAL_TITLE": "Nachricht umbenennen", - "rename-broadcasts/RENAME_BROADCAST_TITLE": "Alle \"{name}\"-Nachrichten umbenennen nach:", - "swap-local-global/cant-convert-cloud": "Cloudvariablen können nicht in nur für diese Figur umgewandelt werden.", + "rename-broadcasts/RENAME_BROADCAST_TITLE": "Alle \"{name}\"-Nachrichten umbenennen in:", + "swap-local-global/cant-convert-cloud": "Cloudvariablen können nicht in \"nur für diese Figur\" umgewandelt werden.", "swap-local-global/cant-convert-conflict": "Konnte nicht umwandeln, weil Konflikte mit Variablen in einer anderen Figur auftreten würden: {sprites}", - "swap-local-global/cant-convert-stage": "Die Bühne kann nicht Variablen nur für diese Figur haben.", + "swap-local-global/cant-convert-stage": "Die Bühne kann keine Variablen nur für diese Figur haben.", "swap-local-global/cant-convert-to-local": "Konnte nicht umwandeln, weil sie von mehreren Figuren verwendet wird: {sprites}", "swap-local-global/cant-convert-used-elsewhere": "Konnte nicht umwandeln, weil sie von einer anderen Figur verwendet wird: {sprite}", "swap-local-global/edit": "Eigenschaften bearbeiten:", diff --git a/src/addons/addons-l10n/es.json b/src/addons/addons-l10n/es.json index 22040d4c5c0..a73b29979cc 100644 --- a/src/addons/addons-l10n/es.json +++ b/src/addons/addons-l10n/es.json @@ -174,7 +174,7 @@ "block-switching/looks_costumenumbername": "número o nombre de disfraz", "block-switching/looks_goforwardbackwardlayers": "avanzar o retroceder capas", "block-switching/looks_gotofrontback": "ir a la capa delantera o trasera", - "block-switching/looks_hide": "ocultar", + "block-switching/looks_hide": "esconder", "block-switching/looks_nextbackdrop": "siguiente fondo", "block-switching/looks_nextcostume": "siguiente disfraz", "block-switching/looks_say": "decir", @@ -227,7 +227,7 @@ "blocks2image/export_selected_to_PNG": "Exportar bloque como PNG", "blocks2image/export_selected_to_SVG": "Exportar bloque como SVG", "move-to-top-bottom/bottom": "mover al fondo", - "move-to-top-bottom/top": "movar a la cima", + "move-to-top-bottom/top": "mover a la cima", "move-to-top-layer/move-to-front-layer": "mover a capa delantera", "rename-broadcasts/RENAME_BROADCAST": "Renombrar mensaje", "rename-broadcasts/RENAME_BROADCAST_MODAL_TITLE": "Renombrar Mensaje", diff --git a/src/addons/addons-l10n/fi.json b/src/addons/addons-l10n/fi.json index 47830e8ebe2..f915ebb9734 100644 --- a/src/addons/addons-l10n/fi.json +++ b/src/addons/addons-l10n/fi.json @@ -54,6 +54,8 @@ "debugger/block-breakpoint": "keskeytyskohta", "debugger/block-error": "kirjaa virhe %s", "debugger/block-log": "kirjaa lokimerkintä %s", + "debugger/block-start-timer": "käynnistä ajastin %s", + "debugger/block-stop-timer": "pysäytä ajastin %s", "debugger/block-warn": "kirjaa varoitus %s", "debugger/cannot-pause-player": "Keskeytyskohtalohkoa voidaan käyttää vain editorissa.", "debugger/clear": "Tyhjennä", @@ -61,6 +63,7 @@ "debugger/close": "Sulje", "debugger/console": "Lokimerkinnät", "debugger/debug": "Virheenkorjaus", + "debugger/default-timer-label": "ajastin1", "debugger/empty-string": "(tyhjä merkkijono)", "debugger/enter-format": "Anna latausformaatti:", "debugger/export": "Lataa", @@ -77,12 +80,22 @@ "debugger/performance-clonecount-title": "Kloonit", "debugger/performance-framerate-graph-tooltip": "Kuvataajuus: {fps} ruutua sekunnissa", "debugger/performance-framerate-title": "Kuvataajuus", - "debugger/step": "Vaihe", + "debugger/step": "Askel", "debugger/step-desc": "Suorittaa yhden lohkon.", "debugger/tab-logs": "Lokimerkinnät", "debugger/tab-performance": "Suorituskyky", "debugger/tab-threads": "Säikeet", + "debugger/tab-timing": "Ajastus", "debugger/thread": "Säie {id}", + "debugger/timing-average-time": "Keskimääräinen aika", + "debugger/timing-call-count": "Suorituskerrat", + "debugger/timing-heatmap": "Lämpökartta", + "debugger/timing-label": "Nimi", + "debugger/timing-no-timers": "Yhtään ajastinta ei ole käynnistetty.", + "debugger/timing-percent-time": "Osuus suoritusajasta", + "debugger/timing-profiling": "Profilointi", + "debugger/timing-ratio-time": "Aikasuhde", + "debugger/timing-total-time": "Kokonaisaika", "debugger/unknown-sprite": "(tuntematon hahmo)", "debugger/unpause": "Jatka", "pause/pause": "Keskeytä", @@ -98,7 +111,7 @@ "onion-skinning/mode": "Tila", "onion-skinning/next": "Seuraavat asusteet", "onion-skinning/opacity": "Peittävyys (%)", - "onion-skinning/opacityStep": "Peittävyysvaihe (%)", + "onion-skinning/opacityStep": "Peittävyyspykälä (%)", "onion-skinning/previous": "Edelliset asusteet", "onion-skinning/settings": "Sipulin kuorinnan asetukset", "onion-skinning/tint": "Värjää", @@ -110,7 +123,7 @@ "paint-snap/objectCorners": "Objektien kulmiin", "paint-snap/objectEdges": "Objektien reunoihin", "paint-snap/objectMidlines": "Objektien keskilinjoille", - "paint-snap/off": "Pois päältä", + "paint-snap/off": "Poissa päältä", "paint-snap/on": "Päällä", "paint-snap/pageAxes": "Muokkausalueen x- ja y-koordinaatteihin", "paint-snap/pageCenter": "Muokkausalueen keskipisteeseen", diff --git a/src/addons/addons-l10n/fr.json b/src/addons/addons-l10n/fr.json index 35a98f35332..43f84043ecc 100644 --- a/src/addons/addons-l10n/fr.json +++ b/src/addons/addons-l10n/fr.json @@ -230,8 +230,8 @@ "blocks2image/export_selected_to_PNG": "Exporter le bloc au format PNG", "blocks2image/export_selected_to_SVG": "Exporter le bloc au format SVG", "editor-extra-keys/enter-key": "entrée", - "move-to-top-bottom/bottom": "Déplacé en bas", - "move-to-top-bottom/top": "Déplacé en haut", + "move-to-top-bottom/bottom": "Déplacer en bas", + "move-to-top-bottom/top": "Déplacer en haut", "move-to-top-layer/move-to-front-layer": "passer à la couche avant", "rename-broadcasts/RENAME_BROADCAST": "Renommer le message", "rename-broadcasts/RENAME_BROADCAST_MODAL_TITLE": "Renommer le message", diff --git a/src/addons/addons-l10n/hu.json b/src/addons/addons-l10n/hu.json index 7e2636b3d83..84f2a0bba41 100644 --- a/src/addons/addons-l10n/hu.json +++ b/src/addons/addons-l10n/hu.json @@ -8,7 +8,7 @@ "editor-devtools/orphaned": "{count, plural, one {Fejlesztői eszközök: Törölni szeretnél 1 kódon kívüli értékadó blokkot?} other {Fejlesztői eszközök: Törölni szeretnél # kódon kívüli értékadó blokkot?} }", "editor-devtools/paste": "Beillesztés", "editor-devtools/replace": "Fejlesztői eszközök: Lecserélsz minden {name} változót ebben a szereplőben egy másik változóra, amit úgy hívnak:", - "editor-devtools/swap": "{var} cserélye a Szereplőben", + "editor-devtools/swap": "{var} cseréje a Szereplőben", "editor-devtools/unused-list": "{count, plural, one {Fejlesztői eszközök: Törölni szeretnél 1 nem használt helyi listát? Itt van:\n} other {Fejlesztői eszközök: Törölni szeretnél # nem használt heliy listát? Itt vannak:\n} }", "editor-devtools/unused-var": "{count, plural, one {Fejlesztői eszközök: Törölni szeretnél 1 nem használt helyi változót? Itt van:\n} other {Fejlesztői eszközök: Törölni szeretnél # nem használt helyi változót? Itt vannak:\n} }", "editor-devtools/var-not-exist": "Ez a változó nem létezik...", diff --git a/src/addons/addons-l10n/it.json b/src/addons/addons-l10n/it.json index d5d9ff70f7c..063b70a48cd 100644 --- a/src/addons/addons-l10n/it.json +++ b/src/addons/addons-l10n/it.json @@ -49,13 +49,18 @@ "mediarecorder/start-delay": "Ritardo Avvio (in secondi)", "mediarecorder/starting-in": "Inizierà tra {secs}...", "mediarecorder/stop": "Arresta Registrazione", + "debugger/block-breakpoint": "pausa", "debugger/block-error": "errore %s", + "debugger/block-log": "annotazione %s", + "debugger/block-start-timer": "avvia cronometro %s", + "debugger/block-stop-timer": "arresta cronometro %s", "debugger/block-warn": "avviso %s", - "debugger/cannot-pause-player": "Il blocco breakpoint può essere usato solo nell'editor.", + "debugger/cannot-pause-player": "Il blocco pausa può essere usato solo nell'editor.", "debugger/clear": "Cancella", "debugger/clone-of": "Clone di {sprite}", "debugger/close": "Chiudi", "debugger/console": "Log", + "debugger/default-timer-label": "cronometro1", "debugger/empty-string": "(stringa vuota)", "debugger/enter-format": "Inserisci il formato di esportazione:", "debugger/export": "Esporta", @@ -66,14 +71,24 @@ "debugger/log-msg-clone-cap": "Creazione del clone di '{sprite}' fallita, non è possibile creare più di 300 cloni..", "debugger/log-msg-clone-created": "Creato clone di '{sprite}'.", "debugger/log-msg-flag-clicked": "Bandiera verde cliccata.", - "debugger/no-logs": "Non ci sono log da mostrare.", + "debugger/no-logs": "Non ci sono log annotazioni mostrare.", "debugger/no-threads-running": "Nessun thread in esecuzione.", "debugger/performance-clonecount-graph-tooltip": "Cloni: {clones}", "debugger/performance-clonecount-title": "Cloni", "debugger/step": "Passi", "debugger/step-desc": "Esegue un blocco.", - "debugger/tab-logs": "Log", + "debugger/tab-logs": "Annotazioni", "debugger/tab-threads": "Thread", + "debugger/tab-timing": "Cronometraggio", + "debugger/timing-average-time": "Tempo Medio", + "debugger/timing-call-count": "Numero Chiamate", + "debugger/timing-heatmap": "Zone Calde", + "debugger/timing-label": "Etichetta", + "debugger/timing-no-timers": "Nessun timer avviato.", + "debugger/timing-percent-time": "Tempo Percentuale", + "debugger/timing-profiling": "Profilazione", + "debugger/timing-ratio-time": "Tempo Relativo", + "debugger/timing-total-time": "Tempo Totale", "debugger/unknown-sprite": "(sprite sconosciuto)", "debugger/unpause": "Riprendi", "pause/pause": "Pausa", @@ -172,6 +187,7 @@ "block-switching/data_showlist": "mostra la lista", "block-switching/data_showvariable": "mostra la variabile", "block-switching/debugger_error": "errore", + "block-switching/debugger_log": "annotazione", "block-switching/debugger_warn": "avviso", "block-switching/event_broadcast": "Invia a tutti", "block-switching/event_broadcastandwait": "Invia a tutti e attendi", diff --git a/src/addons/addons-l10n/ko.json b/src/addons/addons-l10n/ko.json index aba5effcf71..c589dcec275 100644 --- a/src/addons/addons-l10n/ko.json +++ b/src/addons/addons-l10n/ko.json @@ -1,4 +1,6 @@ { + "_general/blocks/anticlockwise": "반시계방향", + "_general/blocks/clockwise": "시계방향", "editor-devtools/clean-plus": "블럭 정리하기 +", "editor-devtools/copy-all": "모두 복사하기", "editor-devtools/copy-block": "블럭 복사하기", @@ -57,6 +59,7 @@ "debugger/close": "닫기", "debugger/console": "기록", "debugger/debug": "디버그", + "debugger/default-timer-label": "타이머1", "debugger/empty-string": "(빈 문자열)", "debugger/enter-format": "내보낼 방법을 입력하세요:", "debugger/export": "내보내기", @@ -77,6 +80,11 @@ "debugger/tab-performance": "성능", "debugger/tab-threads": "실행 중인 작업", "debugger/thread": "작업 {id}", + "debugger/timing-average-time": "평균 시간", + "debugger/timing-label": "레이블", + "debugger/timing-percent-time": "퍼센트 시간", + "debugger/timing-ratio-time": "비율 시간", + "debugger/timing-total-time": "전체 시간", "debugger/unknown-sprite": "(알 수 없는 스프라이트)", "debugger/unpause": "재개하기", "pause/pause": "일시정지", @@ -238,6 +246,7 @@ "editor-extra-keys/enter-key": "엔터", "move-to-top-bottom/bottom": "맨 아래로 옮기기", "move-to-top-bottom/top": "맨 위로 옮기기", + "move-to-top-layer/move-to-front-layer": "맨앞으로", "rename-broadcasts/RENAME_BROADCAST": "메시지 이름 변경하기", "rename-broadcasts/RENAME_BROADCAST_MODAL_TITLE": "메시지 이름 변경하기", "rename-broadcasts/RENAME_BROADCAST_TITLE": "모든 \"{name}\" 메시지를 다음으로 변경:", diff --git a/src/addons/addons-l10n/ru.json b/src/addons/addons-l10n/ru.json index a7134d3a19a..0e4ad117cbb 100644 --- a/src/addons/addons-l10n/ru.json +++ b/src/addons/addons-l10n/ru.json @@ -1,4 +1,7 @@ { + "_general/blocks/anticlockwise": "против часовой стрелки", + "_general/blocks/clockwise": "по часовой стрелке", + "_general/blocks/green-flag": "флажок", "editor-devtools/clean-plus": "Очистить блоки +", "editor-devtools/copy-all": "Копировать все", "editor-devtools/copy-block": "Копировать блок", @@ -46,6 +49,8 @@ "debugger/block-breakpoint": "приостановить", "debugger/block-error": "ошибка %s", "debugger/block-log": "логировать %s", + "debugger/block-start-timer": "начало таймера %s", + "debugger/block-stop-timer": "конец таймера %s", "debugger/block-warn": "предупредить %s", "debugger/cannot-pause-player": "Блок точки остановки может быть использовать только в редакторе.", "debugger/clear": "Очистить", @@ -53,6 +58,7 @@ "debugger/close": "Закрыть", "debugger/console": "Логи", "debugger/debug": "Отладка", + "debugger/default-timer-label": "таймер1", "debugger/empty-string": "(пустая строка)", "debugger/enter-format": "Введите формат экспорта:", "debugger/export": "Экспорт", @@ -74,10 +80,21 @@ "debugger/tab-logs": "Логи", "debugger/tab-performance": "Производительность", "debugger/tab-threads": "Потоки", + "debugger/tab-timing": "Таймеры", "debugger/thread": "Поток {id}", + "debugger/timing-average-time": "Среднее Время", + "debugger/timing-call-count": "Количество Вызовов", + "debugger/timing-heatmap": "Тепловая Карта", + "debugger/timing-label": "Бирка", + "debugger/timing-no-timers": "Никаких таймеров не начато.", + "debugger/timing-percent-time": "Процент Времени", + "debugger/timing-profiling": "Сборка Отладочной Информации", + "debugger/timing-ratio-time": "Пропорция Времени", + "debugger/timing-total-time": "Сумма Времени", "debugger/unknown-sprite": "(неизвестный спрайт)", "debugger/unpause": "Продолжить", "pause/pause": "Пауза", + "pause/play": "Возобновить", "clones/clones": "клонов: {cloneCount}", "color-picker/hex": "цвет hex", "remove-sprite-confirm/confirm": "Вы хотите удалить спрайт?", @@ -218,6 +235,7 @@ "block-switching/pen_setPenHueToNumber": "задать цвет", "block-switching/pen_setPenShadeToNumber": "задать оттенок", "block-switching/pen_setPenSizeTo": "задать размер", + "block-switching/sensing_coloristouchingcolor": "цвет касается цвета", "block-switching/sensing_mousex": "x мыши", "block-switching/sensing_mousey": "y мыши", "block-switching/sensing_touchingcolor": "касается цвета?", diff --git a/src/addons/addons-l10n/sl.json b/src/addons/addons-l10n/sl.json index dc342ed199b..6ee76933c2a 100644 --- a/src/addons/addons-l10n/sl.json +++ b/src/addons/addons-l10n/sl.json @@ -51,6 +51,8 @@ "mediarecorder/stop": "Ustavi snemanje", "debugger/block-error": "napaka %s", "debugger/block-log": "zapiši %s", + "debugger/block-start-timer": "začni štoparico %s", + "debugger/block-stop-timer": "ustavi štoparico %s", "debugger/block-warn": "opozorilo %s", "debugger/cannot-pause-player": "Blok breakpoint deluje samo v urejevalniku.", "debugger/clear": "Počisti", @@ -58,6 +60,7 @@ "debugger/close": "Zapri", "debugger/console": "Razhroščevanje", "debugger/debug": "Razhroščevanje", + "debugger/default-timer-label": "štoparica1", "debugger/empty-string": "(prazen niz)", "debugger/enter-format": "Oblika datoteke za izvoz:", "debugger/export": "Izvozi", @@ -77,7 +80,17 @@ "debugger/tab-logs": "Zapiski", "debugger/tab-performance": "Učinkovitost", "debugger/tab-threads": "Niti", + "debugger/tab-timing": "Merjenje časa", "debugger/thread": "Nit {id}", + "debugger/timing-average-time": "Povprečni čas", + "debugger/timing-call-count": "Število klicev", + "debugger/timing-heatmap": "Toplotna karta", + "debugger/timing-label": "Oznaka", + "debugger/timing-no-timers": "Nobena štoparica ni bila začeta.", + "debugger/timing-percent-time": "Delež", + "debugger/timing-profiling": "Podrobno", + "debugger/timing-ratio-time": "Razmerje", + "debugger/timing-total-time": "Skupni čas", "debugger/unknown-sprite": "(neznana figura)", "debugger/unpause": "Nadaljuj", "pause/pause": "Premor", @@ -144,7 +157,7 @@ "gamepad/key-up": "Gor", "gamepad/keyinput-title": "Kliknite in pritisnite tipko ali kliknite z miško, da izberete gumb. Pritisnite tipko Escape za preklic ali Backspace/Delete, da izbrišete vnos.", "gamepad/no-controllers": "Noben igralni plošček ni bil zaznan. Poskusite ga priključiti in pritisniti gumb na njem.", - "gamepad/reset": "Povrni privzete nastavitve", + "gamepad/reset": "Povrni privzete nastavitve projekta", "gamepad/settings": "Nastavitve igralnih ploščkov", "gamepad/store-in-project": "Shrani zgornje nastavitve v projektu. Ko shranite projekt, bodo postale privzete nastavitve za ta projekt.", "folders/add-to-folder": "dodaj v mapo: {folder}", diff --git a/src/addons/addons-l10n/zh-cn.json b/src/addons/addons-l10n/zh-cn.json index 427e4a677e6..78bb038321d 100644 --- a/src/addons/addons-l10n/zh-cn.json +++ b/src/addons/addons-l10n/zh-cn.json @@ -8,12 +8,12 @@ "editor-devtools/cut-block": "剪切积木", "editor-devtools/lists": "列表", "editor-devtools/make-space": "留出空间", - "editor-devtools/orphaned": "{count, plural, other {} }", + "editor-devtools/orphaned": "{count, plural, other {开发者工具:要删除 # 个单独存在的积木块吗?} }", "editor-devtools/paste": "粘贴", "editor-devtools/replace": "开发者工具:将此角色中的所有 {name} 变量切换为:", "editor-devtools/swap": "交换角色中的 {var}", - "editor-devtools/unused-list": "{count, plural, other {} }", - "editor-devtools/unused-var": "{count, plural, other {} }", + "editor-devtools/unused-list": "{count, plural, other {开发者工具:要删除 # 个没有使用的列表吗?这些列表包括:\n} }", + "editor-devtools/unused-var": "{count, plural, other {开发者工具:要删除 # 个没有使用的变量吗?这些变量包括:\n} }", "editor-devtools/var-not-exist": "变量不存在……", "editor-devtools/variables": "变量", "find-bar/complex-broadcast": "(表达式)", diff --git a/src/addons/generated/upstream-meta.json b/src/addons/generated/upstream-meta.json index 289d97e6497..2a11d385513 100644 --- a/src/addons/generated/upstream-meta.json +++ b/src/addons/generated/upstream-meta.json @@ -1 +1 @@ -{"commit":"e33b0c5"} \ No newline at end of file +{"commit":"a8b7945"} \ No newline at end of file From 4781ef41633b99dc8fada372a9e9ab3dcc0ddcdd Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Sat, 31 Oct 2026 13:14:23 -0500 Subject: [PATCH 09/10] Fix various backpack errors related to: https://github.com/TurboWarp/desktop/issues/1427 --- src/containers/backpack.jsx | 46 +++++----- src/lib/backpack/sprite-payload.js | 2 +- src/lib/tw-local-backpack-api.js | 133 ++++++++++++++++------------- 3 files changed, 95 insertions(+), 86 deletions(-) diff --git a/src/containers/backpack.jsx b/src/containers/backpack.jsx index 1b748cc194b..b945f9989ec 100644 --- a/src/containers/backpack.jsx +++ b/src/containers/backpack.jsx @@ -123,36 +123,32 @@ class Backpack extends React.Component { if (!payloader) return; // Creating the payload is async, so set loading before starting - this.setState({loading: true}, () => { - payloader(dragInfo.payload, this.props.vm) - .then(payload => { - // Force the asset to save to the asset server before storing in backpack - // Ensures any asset present in the backpack is also on the asset server - if (presaveAsset && !presaveAsset.clean && !this.props.host === LOCAL_API) { - return storage.store( - presaveAsset.assetType, - presaveAsset.dataFormat, - presaveAsset.data, - presaveAsset.assetId - ).then(() => payload); - } - return payload; - }) - .then(payload => saveBackpackObject({ + this.setState({loading: true}, async () => { + try { + const payload = await payloader(dragInfo.payload, this.props.vm); + // Force the asset to save to the asset server before storing in backpack + // Ensures any asset present in the backpack is also on the asset server + if (presaveAsset && !presaveAsset.clean && !this.props.host === LOCAL_API) { + await storage.store( + presaveAsset.assetType, + presaveAsset.dataFormat, + presaveAsset.data, + presaveAsset.assetId + ); + } + const item = await saveBackpackObject({ host: this.props.host, token: this.props.token, username: this.props.username, ...payload - })) - .then(item => { - this.setState({ - loading: false, - contents: [item].concat(this.state.contents) - }); - }) - .catch(error => { - this.handleError(error); }); + this.setState({ + loading: false, + contents: [item].concat(this.state.contents) + }); + } catch (error) { + this.handleError(error); + } }); } handleDelete (id) { diff --git a/src/lib/backpack/sprite-payload.js b/src/lib/backpack/sprite-payload.js index ce539005a44..b0c1f054b6b 100644 --- a/src/lib/backpack/sprite-payload.js +++ b/src/lib/backpack/sprite-payload.js @@ -2,7 +2,7 @@ import createThumbnail from './thumbnail'; const spritePayload = (id, vm) => { const target = vm.runtime.getTargetById(id); - if (!target) return null; + if (!target) return Promise.reject(new Error(`Sprite ${id} does not exist`)); return vm.exportSprite( id, diff --git a/src/lib/tw-local-backpack-api.js b/src/lib/tw-local-backpack-api.js index a7960490ca6..d3c8035e1b1 100644 --- a/src/lib/tw-local-backpack-api.js +++ b/src/lib/tw-local-backpack-api.js @@ -86,37 +86,68 @@ const openDB = () => new Promise((resolve, reject) => { }; }); +/** + * Run a transaction on the backpack store. + * @param {IDBTransactionMode} mode readonly or readwrite + * @param {string} errorDescription For error messages + * @param {(store: IDBObjectStore, withErrorHandling: () => void): void} callback What to run + * @returns {Promise} Resolves when the transaction commits. + */ +const runTransaction = async (mode, errorDescription, callback) => { + const db = await openDB(); + return new Promise((resolve, reject) => { + let handledError = null; + const transaction = db.transaction(STORE_NAME, mode); + + transaction.oncomplete = () => { + resolve(); + }; + + transaction.onabort = () => { + reject(handledError || new Error(`${errorDescription}: ${transaction.error}`)); + }; + + const withErrorHandling = fn => (...args) => { + try { + fn(...args); + } catch (e) { + handledError = e; + transaction.abort(); + } + }; + + const wrappedCallback = withErrorHandling(callback); + wrappedCallback(transaction.objectStore(STORE_NAME), withErrorHandling); + }); +}; + const getBackpackContents = async ({ limit, offset }) => { - const db = await openDB(); - return new Promise((resolve, reject) => { - const transaction = db.transaction(STORE_NAME, 'readonly'); - transaction.onerror = event => { - reject(new Error(`Getting contents: ${event.target.error}`)); - }; - const store = transaction.objectStore(STORE_NAME); - const items = []; + const idbItems = []; + await runTransaction('readonly', 'Getting contents', (store, withErrorHandling) => { const request = store.openCursor(null, 'prev'); let first = true; - request.onsuccess = e => { - const cursor = e.target.result; + request.onsuccess = withErrorHandling(() => { + const cursor = request.result; + if (!cursor) { + return; + } if (first) { first = false; - if (cursor && offset !== 0) { + if (offset !== 0) { cursor.advance(offset); return; } } - if (cursor && items.length < limit) { - items.push(idbItemToBackpackItem(cursor.value)); + if (idbItems.length < limit) { + idbItems.push(cursor.value); cursor.continue(); - } else { - resolve(items); } - }; + }); }); + return idbItems.map(idbItemToBackpackItem); }; const saveBackpackObject = async ({ @@ -129,47 +160,33 @@ const saveBackpackObject = async ({ // User interaction -- fine to show a permission dialog requestPersistentStorage(); - const db = await openDB(); - return new Promise((resolve, reject) => { - const transaction = db.transaction(STORE_NAME, 'readwrite'); - transaction.onerror = event => { - reject(new Error(`Sving object: ${event.target.error}`)); - }; - const store = transaction.objectStore(STORE_NAME); - const bodyData = base64ToArrayBuffer(body); - const bodyMD5 = md5(bodyData); - const idbItem = { - type, - mime, - name, - bodyData, - bodyMD5, - thumbnailData: base64ToArrayBuffer(thumbnail) - }; + const bodyData = base64ToArrayBuffer(body); + const idbItem = { + type, + mime, + name, + bodyData, + bodyMD5: md5(bodyData), + thumbnailData: base64ToArrayBuffer(thumbnail) + }; + let backpackItem; + await runTransaction('readwrite', 'Saving object', (store, withErrorHandling) => { const putRequest = store.put(idbItem); - putRequest.onsuccess = () => { + putRequest.onsuccess = withErrorHandling(() => { idbItem.id = putRequest.result; - resolve(idbItemToBackpackItem(idbItem)); - }; + backpackItem = idbItemToBackpackItem(idbItem); + }); }); + return backpackItem; }; const deleteBackpackObject = async ({ id }) => { + // Convert string IDs to number IDs id = +id; - const db = await openDB(); - return new Promise((resolve, reject) => { - const transaction = db.transaction(STORE_NAME, 'readwrite'); - transaction.onerror = event => { - reject(new Error(`Deleting object: ${event.target.error}`)); - }; - const store = transaction.objectStore(STORE_NAME); - // Convert string IDs to number IDs - const deleteRequest = store.delete(id); - deleteRequest.onsuccess = () => { - resolve(); - }; + await runTransaction('readwrite', 'Deleting object', store => { + store.delete(id); }); }; @@ -178,25 +195,21 @@ const updateBackpackObject = async ({ name }) => { id = +id; - const db = await openDB(); - return new Promise((resolve, reject) => { - const transaction = db.transaction(STORE_NAME, 'readwrite'); - transaction.onerror = event => { - reject(new Error(`Updating object: ${event.target.error}`)); - }; - const store = transaction.objectStore(STORE_NAME); + let backpackItem; + await runTransaction('readwrite', 'Updating object', (store, withErrorHandling) => { const getRequest = store.get(id); - getRequest.onsuccess = () => { + getRequest.onsuccess = withErrorHandling(() => { const newItem = { ...getRequest.result, name: name }; const putRequest = store.put(newItem); - putRequest.onsuccess = () => { - resolve(idbItemToBackpackItem(newItem)); - }; - }; + putRequest.onsuccess = withErrorHandling(() => { + backpackItem = idbItemToBackpackItem(newItem); + }); + }); }); + return backpackItem; }; export default { From 54043ccbcfd795183af2b1dfd299b4e9ab09f6ff Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Sat, 31 Oct 2026 13:19:13 -0500 Subject: [PATCH 10/10] Remove testing infrastructure that we don't use --- package-lock.json | 16365 ++++++---------- package.json | 32 +- test/.eslintrc.js | 11 - test/__mocks__/audio-buffer-player.js | 15 - test/__mocks__/audio-effects.js | 24 - test/__mocks__/editor-msgs-mock.js | 3 - test/__mocks__/fileMock.js | 3 - test/__mocks__/styleMock.js | 3 - test/addons-settings.test.mjs | 707 + test/fixtures/100-100.svg | 20 - test/fixtures/bmpfile.bmp | Bin 30122 -> 0 bytes test/fixtures/corrupt-bmp.sb3 | Bin 5579 -> 0 bytes test/fixtures/corrupt-bmp.sprite3 | Bin 4806 -> 0 bytes test/fixtures/corrupt-from-scratch3.svg | 14 - test/fixtures/corrupt-svg.sb2 | Bin 4534 -> 0 bytes test/fixtures/corrupt-svg.sb3 | Bin 4856 -> 0 bytes test/fixtures/corrupt-svg.sprite3 | Bin 3320 -> 0 bytes test/fixtures/corrupted-svg.sprite2 | Bin 4352 -> 0 bytes test/fixtures/gh-3582-png.png | Bin 62836 -> 0 bytes test/fixtures/missing-bmp.sb3 | Bin 2623 -> 0 bytes test/fixtures/missing-bmp.sprite3 | Bin 1898 -> 0 bytes test/fixtures/missing-sprite-svg.sb3 | Bin 3446 -> 0 bytes test/fixtures/missing-svg.sb2 | Bin 2891 -> 0 bytes test/fixtures/missing-svg.sprite2 | Bin 2635 -> 0 bytes test/fixtures/missing-svg.sprite3 | Bin 1949 -> 0 bytes test/fixtures/monitor-variable.sb3 | Bin 1004 -> 0 bytes test/fixtures/movie.wav | Bin 76348 -> 0 bytes test/fixtures/paddleball.gif | Bin 9512 -> 0 bytes test/fixtures/project1.sb3 | Bin 41936 -> 0 bytes test/fixtures/scratch2-corrupted.svg | 10 - test/fixtures/sneaker.wav | Bin 4668 -> 0 bytes test/helpers/enzyme-setup.js | 4 - test/helpers/intl-helpers.jsx | 39 - test/helpers/selenium-helper.js | 378 - test/integration/backdrops.test.js | 117 - test/integration/backpack.test.js | 44 - test/integration/blocks.test.js | 339 - test/integration/connection-modal.test.js | 67 - test/integration/costumes.test.js | 262 - test/integration/examples.test.js | 100 - test/integration/how-tos.test.js | 38 - test/integration/localization.test.js | 109 - test/integration/menu-bar.test.js | 172 - test/integration/project-loading.test.js | 117 - test/integration/project-state.test.js | 45 - test/integration/sb-file-uploader-hoc.test.js | 114 - test/integration/sounds.test.js | 189 - test/integration/sprites.test.js | 299 - test/integration/stage-size.test.js | 46 - test/integration/tutorials-shortcut.test.js | 38 - test/register-hooks.mjs | 30 + test/smoke/browser.test.js | 74 - test/unit/addons/settings.test.js | 705 - .../__snapshots__/button.test.jsx.snap | 13 - .../__snapshots__/icon-button.test.jsx.snap | 22 - .../__snapshots__/sound-editor.test.jsx.snap | 565 - .../sprite-selector-item.test.jsx.snap | 179 - test/unit/components/button.test.jsx | 23 - test/unit/components/cards.test.jsx | 62 - test/unit/components/controls.test.jsx | 40 - .../components/error-boundary-hoc.test.jsx | 43 - test/unit/components/icon-button.test.jsx | 37 - test/unit/components/menu-bar.test.jsx | 64 - test/unit/components/monitor-list.test.jsx | 78 - test/unit/components/monitor.test.jsx | 56 - test/unit/components/sound-editor.test.jsx | 146 - .../components/sprite-selector-item.test.jsx | 83 - test/unit/components/toggle-buttons.test.jsx | 52 - test/unit/containers/menu-bar-hoc.test.jsx | 170 - test/unit/containers/save-status.test.jsx | 76 - test/unit/containers/slider-prompt.test.jsx | 111 - test/unit/containers/sound-editor.test.jsx | 306 - .../containers/sprite-selector-item.test.jsx | 58 - test/unit/reducers/alerts-reducer.test.js | 208 - test/unit/reducers/mode-reducer.test.js | 53 - .../reducers/monitor-layout-reducer.test.js | 302 - .../reducers/project-state-reducer.test.js | 508 - .../workspace-metrics-reducer.test.js | 25 - test/unit/util/audio-context.test.js | 30 - test/unit/util/audio-effects.test.js | 91 - test/unit/util/audio-util.test.js | 102 - test/unit/util/cloud-manager-hoc.test.jsx | 401 - test/unit/util/cloud-provider.test.js | 211 - test/unit/util/code-payload.test.js | 19 - test/unit/util/default-project.test.js | 21 - test/unit/util/define-dynamic-block.test.js | 199 - test/unit/util/detect-locale.test.js | 86 - test/unit/util/drag-recognizer.test.js | 120 - test/unit/util/drag-utils.test.js | 74 - test/unit/util/get-costume-url.test.js | 11 - .../util/hash-project-loader-hoc.test.jsx | 81 - test/unit/util/opcode-labels.test.js | 15 - test/unit/util/project-fetcher-hoc.test.jsx | 68 - test/unit/util/project-saver-hoc.test.jsx | 491 - test/unit/util/sb-file-uploader-hoc.test.jsx | 110 - test/unit/util/themes.test.js | 165 - .../unit/util/throttled-property-hoc.test.jsx | 54 - test/unit/util/translate-video.test.js | 25 - test/unit/util/tutorial-from-url.test.js | 47 - test/unit/util/vm-listener-hoc.test.jsx | 186 - test/unit/util/vm-manager-hoc.test.jsx | 199 - 101 files changed, 6442 insertions(+), 20177 deletions(-) delete mode 100644 test/.eslintrc.js delete mode 100644 test/__mocks__/audio-buffer-player.js delete mode 100644 test/__mocks__/audio-effects.js delete mode 100644 test/__mocks__/editor-msgs-mock.js delete mode 100644 test/__mocks__/fileMock.js delete mode 100644 test/__mocks__/styleMock.js create mode 100644 test/addons-settings.test.mjs delete mode 100644 test/fixtures/100-100.svg delete mode 100644 test/fixtures/bmpfile.bmp delete mode 100644 test/fixtures/corrupt-bmp.sb3 delete mode 100644 test/fixtures/corrupt-bmp.sprite3 delete mode 100644 test/fixtures/corrupt-from-scratch3.svg delete mode 100644 test/fixtures/corrupt-svg.sb2 delete mode 100644 test/fixtures/corrupt-svg.sb3 delete mode 100644 test/fixtures/corrupt-svg.sprite3 delete mode 100644 test/fixtures/corrupted-svg.sprite2 delete mode 100644 test/fixtures/gh-3582-png.png delete mode 100644 test/fixtures/missing-bmp.sb3 delete mode 100644 test/fixtures/missing-bmp.sprite3 delete mode 100644 test/fixtures/missing-sprite-svg.sb3 delete mode 100644 test/fixtures/missing-svg.sb2 delete mode 100644 test/fixtures/missing-svg.sprite2 delete mode 100644 test/fixtures/missing-svg.sprite3 delete mode 100644 test/fixtures/monitor-variable.sb3 delete mode 100644 test/fixtures/movie.wav delete mode 100644 test/fixtures/paddleball.gif delete mode 100644 test/fixtures/project1.sb3 delete mode 100644 test/fixtures/scratch2-corrupted.svg delete mode 100644 test/fixtures/sneaker.wav delete mode 100644 test/helpers/enzyme-setup.js delete mode 100644 test/helpers/intl-helpers.jsx delete mode 100644 test/helpers/selenium-helper.js delete mode 100644 test/integration/backdrops.test.js delete mode 100644 test/integration/backpack.test.js delete mode 100644 test/integration/blocks.test.js delete mode 100644 test/integration/connection-modal.test.js delete mode 100644 test/integration/costumes.test.js delete mode 100644 test/integration/examples.test.js delete mode 100644 test/integration/how-tos.test.js delete mode 100644 test/integration/localization.test.js delete mode 100644 test/integration/menu-bar.test.js delete mode 100644 test/integration/project-loading.test.js delete mode 100644 test/integration/project-state.test.js delete mode 100644 test/integration/sb-file-uploader-hoc.test.js delete mode 100644 test/integration/sounds.test.js delete mode 100644 test/integration/sprites.test.js delete mode 100644 test/integration/stage-size.test.js delete mode 100644 test/integration/tutorials-shortcut.test.js create mode 100644 test/register-hooks.mjs delete mode 100644 test/smoke/browser.test.js delete mode 100644 test/unit/addons/settings.test.js delete mode 100644 test/unit/components/__snapshots__/button.test.jsx.snap delete mode 100644 test/unit/components/__snapshots__/icon-button.test.jsx.snap delete mode 100644 test/unit/components/__snapshots__/sound-editor.test.jsx.snap delete mode 100644 test/unit/components/__snapshots__/sprite-selector-item.test.jsx.snap delete mode 100644 test/unit/components/button.test.jsx delete mode 100644 test/unit/components/cards.test.jsx delete mode 100644 test/unit/components/controls.test.jsx delete mode 100644 test/unit/components/error-boundary-hoc.test.jsx delete mode 100644 test/unit/components/icon-button.test.jsx delete mode 100644 test/unit/components/menu-bar.test.jsx delete mode 100644 test/unit/components/monitor-list.test.jsx delete mode 100644 test/unit/components/monitor.test.jsx delete mode 100644 test/unit/components/sound-editor.test.jsx delete mode 100644 test/unit/components/sprite-selector-item.test.jsx delete mode 100644 test/unit/components/toggle-buttons.test.jsx delete mode 100644 test/unit/containers/menu-bar-hoc.test.jsx delete mode 100644 test/unit/containers/save-status.test.jsx delete mode 100644 test/unit/containers/slider-prompt.test.jsx delete mode 100644 test/unit/containers/sound-editor.test.jsx delete mode 100644 test/unit/containers/sprite-selector-item.test.jsx delete mode 100644 test/unit/reducers/alerts-reducer.test.js delete mode 100644 test/unit/reducers/mode-reducer.test.js delete mode 100644 test/unit/reducers/monitor-layout-reducer.test.js delete mode 100644 test/unit/reducers/project-state-reducer.test.js delete mode 100644 test/unit/reducers/workspace-metrics-reducer.test.js delete mode 100644 test/unit/util/audio-context.test.js delete mode 100644 test/unit/util/audio-effects.test.js delete mode 100644 test/unit/util/audio-util.test.js delete mode 100644 test/unit/util/cloud-manager-hoc.test.jsx delete mode 100644 test/unit/util/cloud-provider.test.js delete mode 100644 test/unit/util/code-payload.test.js delete mode 100644 test/unit/util/default-project.test.js delete mode 100644 test/unit/util/define-dynamic-block.test.js delete mode 100644 test/unit/util/detect-locale.test.js delete mode 100644 test/unit/util/drag-recognizer.test.js delete mode 100644 test/unit/util/drag-utils.test.js delete mode 100644 test/unit/util/get-costume-url.test.js delete mode 100644 test/unit/util/hash-project-loader-hoc.test.jsx delete mode 100644 test/unit/util/opcode-labels.test.js delete mode 100644 test/unit/util/project-fetcher-hoc.test.jsx delete mode 100644 test/unit/util/project-saver-hoc.test.jsx delete mode 100644 test/unit/util/sb-file-uploader-hoc.test.jsx delete mode 100644 test/unit/util/themes.test.js delete mode 100644 test/unit/util/throttled-property-hoc.test.jsx delete mode 100644 test/unit/util/translate-video.test.js delete mode 100644 test/unit/util/tutorial-from-url.test.js delete mode 100644 test/unit/util/vm-listener-hoc.test.jsx delete mode 100644 test/unit/util/vm-manager-hoc.test.jsx diff --git a/package-lock.json b/package-lock.json index b13972bd5f5..8940669d446 100644 --- a/package-lock.json +++ b/package-lock.json @@ -84,32 +84,20 @@ "@babel/plugin-transform-async-to-generator": "7.14.5", "@babel/preset-env": "7.14.8", "@babel/preset-react": "7.14.5", - "babel-core": "7.0.0-bridge.0", "babel-eslint": "10.1.0", "babel-loader": "8.3.0", - "chromedriver": "117.0.3", - "enzyme": "3.10.0", - "enzyme-adapter-react-16": "1.15.7", "eslint": "8.55.0", "eslint-config-scratch": "9.0.3", "eslint-import-resolver-webpack": "0.11.1", "eslint-plugin-import": "2.29.1", - "eslint-plugin-jest": "22.17.0", "eslint-plugin-react": "7.33.2", "file-loader": "6.2.0", "gh-pages": "3.2.3", "html-webpack-plugin": "^4.2.0", - "jest": "^29.7.0", - "jest-junit": "7.0.0", "mkdirp": "1.0.3", - "raf": "3.4.1", - "react-test-renderer": "16.14.0", - "redux-mock-store": "1.5.3", "rimraf": "2.7.1", - "selenium-webdriver": "3.6.0", "uglifyjs-webpack-plugin": "1.3.0", "url-loader": "4.1.1", - "web-audio-test-api": "0.5.2", "webpack": "4.47.0", "webpack-cli": "3.3.12", "webpack-dev-server": "3.11.2", @@ -858,19 +846,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", @@ -926,35 +901,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", - "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -1094,22 +1040,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", - "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz", @@ -1927,13 +1857,6 @@ "node": ">=6.9.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, - "license": "MIT" - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", @@ -2054,6765 +1977,2810 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "license": "ISC", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.2.tgz", - "integrity": "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==", - "dev": true, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "dev": true, + "license": "MIT" + }, + "node_modules/@microbit/microbit-universal-hex": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@microbit/microbit-universal-hex/-/microbit-universal-hex-0.2.2.tgz", + "integrity": "sha512-qyFt8ATgxAyPkNz9Yado4HXEeCctwP/8L1/v2hFLeVUqw/HFqVqV4piJbqRMmyOefMcQ9OyVPhLXjtbKn9063Q==", "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" + "node": ">=8.5", + "npm": ">=6.0", + "yarn": "^1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "tslib": ">=1.11.1" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "license": "MIT", + "optional": true + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "eslint-scope": "5.1.1" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", - "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", - "dev": true, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10" } }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "license": "MIT", + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "glob": "^7.1.3" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "bin": { + "rimraf": "bin.js" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/core/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, + "node_modules/@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/@jest/core/node_modules/ansi-styles": { + "node_modules/@transifex/api": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/@transifex/api/-/api-4.3.0.tgz", + "integrity": "sha512-RCpqAqxZlrHDo7rfam8tLSoT02wvF8LQeNRC0VZG5IGrH+wv+G6fB8PWLLHrvUuaqO6XCwkMmYlJ/X9U9TLTHw==", + "license": "Apache-2.0", "dependencies": { - "color-convert": "^2.0.1" + "core-js": "^3.22.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=14.0.0" } }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@transifex/api/node_modules/core-js": { + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.51.0.tgz", + "integrity": "sha512-7bDKx/5jm5MxzsXxc93g6Z2+4ZsuT/MddrfRmTDJNAkWsYWHU8EVNEsBiIEWnMAMCHMmRfUEjkuo3jeNBOIHRw==", + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": "*" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", + "node_modules/@turbowarp/ancient-hull.js": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/@turbowarp/ancient-hull.js/-/ancient-hull.js-0.2.13.tgz", + "integrity": "sha512-lpVDr18qRjOLWcPtw9H+nlFhY7hbdgQlLU1b6nJfEn2pMYRnOEtzFXZbprG5JgmUCIzGx/H9WPajbkjRdvUC+Q==", + "license": "BSD" + }, + "node_modules/@turbowarp/json": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@turbowarp/json/-/json-0.1.2.tgz", + "integrity": "sha512-9nWywp+0SH7ROVzQPQQO9gMWBikahsqyMWp1Ku8VV0q+q6bnx6dS0aNPTjqTtF2GHAY55hcREsqKzaoUdWBSwg==", + "license": "MIT" + }, + "node_modules/@turbowarp/jszip": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@turbowarp/jszip/-/jszip-3.12.0.tgz", + "integrity": "sha512-nTKFFc1rUToxTdxUKPIou3YKUsSelgEoyx4TAPzK/0BkGPntkenp9zoJOSnxnGWNchVXYVZv01+3aZwlS1K8hw==", + "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" } }, - "node_modules/@jest/core/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/@turbowarp/nanolog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@turbowarp/nanolog/-/nanolog-1.0.1.tgz", + "integrity": "sha512-jdkH5MMdEo81Z9CJDDKsUqnTD5W3oeVt9SWyRSPLT3Q5NPGD6E4SnffD5pXWIZbjF052u2SamDxp/awW7W7cVQ==", + "license": "MIT" + }, + "node_modules/@turbowarp/paper": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@turbowarp/paper/-/paper-0.13.0.tgz", + "integrity": "sha512-ECixLnNuI6oO2hLLte+i6WdRZvo8mcTgkmMJna/si/7JXzu0/z7eoYzWQb48+BWVKj747+ArBPNvC43wFivz/Q==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", + "node_modules/@turbowarp/sb3fix": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@turbowarp/sb3fix/-/sb3fix-0.5.0.tgz", + "integrity": "sha512-X5EOo+2nO3jIjEAzDY/Fmyn0wj6uAqOYXrRB9HAwTX4xWrmwvhuN/l8trVg/p+718/ySB9vQ7BGP2P0wklBCzw==", + "license": "MPL-2.0", "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "@turbowarp/jszip": "^3.12.0" } }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", + "node_modules/@turbowarp/scratch-l10n": { + "version": "3.1001.202405101234", + "resolved": "https://registry.npmjs.org/@turbowarp/scratch-l10n/-/scratch-l10n-3.1001.202405101234.tgz", + "integrity": "sha512-a0JTugOunBFQqAKtjdkViUSmLxuDWwtdNi+1gbqnbDQyGfHOBdOe1xVkmQekw/CzR2HgsBAlL8aS4rsuVXzR3Q==", + "license": "BSD-3-Clause", "dependencies": { - "has-flag": "^4.0.0" + "@babel/cli": "^7.1.2", + "@babel/core": "^7.1.2", + "@transifex/api": "4.3.0", + "babel-plugin-react-intl": "^3.0.1", + "download": "^8.0.0", + "transifex": "1.6.6" }, - "engines": { - "node": ">=8" + "bin": { + "build-i18n-src": "scripts/build-i18n-src.js", + "tx-push-src": "scripts/tx-push-src.js" } }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "license": "MIT", + "node_modules/@turbowarp/scratch-storage": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@turbowarp/scratch-storage/-/scratch-storage-2.0.0.tgz", + "integrity": "sha512-Qi/wpKuf9Vd1FKYuwbh9NY4aB6nxh9V7ulQ03TFsWxZJfV1GOL8NiFRQMGFBDda00kUjWr5+f/eobbRAOqZpUg==", + "license": "BSD-3-Clause", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@babel/runtime": "7.21.0", + "@turbowarp/nanolog": "^0.2.0", + "arraybuffer-loader": "^1.0.3", + "base64-js": "1.3.0", + "cross-fetch": "3.1.5", + "js-md5": "0.7.3", + "worker-loader": "^2.0.0" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "license": "MIT", + "node_modules/@turbowarp/scratch-storage/node_modules/@turbowarp/nanolog": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@turbowarp/nanolog/-/nanolog-0.2.0.tgz", + "integrity": "sha512-texcM9oxfEsADVlVDR5UhLkYclPKsV9mytJh+9pHHonNcUrxRVGF6FkJTzWO/Hl5NafU1crSdw737nqKE3atSA==", + "license": "MIT" + }, + "node_modules/@turbowarp/scratch-svg-renderer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@turbowarp/scratch-svg-renderer/-/scratch-svg-renderer-1.1.0.tgz", + "integrity": "sha512-UPSUNKfR9f73ZNgjYdxsz5yheZYO/EiKE3Wji31thRVDGzOJOROQXcFicl/1oDWkMII4FvSLylGAw6/MPpoXqg==", + "license": "MPL-2.0", "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" + "@turbowarp/nanolog": "^0.2.0", + "base64-js": "1.2.1", + "base64-loader": "1.0.0", + "dompurify": "^3.4.5", + "transformation-matrix": "1.15.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "scratch-render-fonts": "github:TurboWarp/scratch-render-fonts#master" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, + "node_modules/@turbowarp/scratch-svg-renderer/node_modules/@turbowarp/nanolog": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@turbowarp/nanolog/-/nanolog-0.2.0.tgz", + "integrity": "sha512-texcM9oxfEsADVlVDR5UhLkYclPKsV9mytJh+9pHHonNcUrxRVGF6FkJTzWO/Hl5NafU1crSdw737nqKE3atSA==", + "license": "MIT" + }, + "node_modules/@turbowarp/scratch-svg-renderer/node_modules/base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "license": "MIT" + }, + "node_modules/@turbowarp/startaudiocontext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@turbowarp/startaudiocontext/-/startaudiocontext-1.0.0.tgz", + "integrity": "sha512-BJ7EVYVwuTH/Tr6tEaLaXA5TCi8qKxNWsxohNqxIEDzykN+FscgOALhEMUlNc6vgcmOi7yQFJ82Prx9bnY5DgA==", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@babel/types": "^7.0.0" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "@babel/types": "^7.28.2" } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } + "license": "MIT" }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" }, - "node_modules/@jest/reporters/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/@jest/reporters/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "26.6.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz", + "integrity": "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==", "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "undici-types": "~8.9.0" } }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/@types/node-hid": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/node-hid/-/node-hid-1.3.4.tgz", + "integrity": "sha512-0ootpsYetN9vjqkDSwm/cA4fk/9yGM/PO0X8SLPE/BzXlUaBelImMWMymtF9QEoEzxY0pnhcROIJM0CNSUqO8w==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@types/node": "*" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@types/source-list-map": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz", + "integrity": "sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==", "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "license": "MIT" }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "node_modules/@types/tapable": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.12.tgz", + "integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==", "dev": true, + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "optional": true }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "node_modules/@types/uglify-js": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz", + "integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "source-map": "^0.6.1" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, + "node_modules/@types/usb": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/usb/-/usb-1.5.4.tgz", + "integrity": "sha512-NOUza/8yuswu6RoECQyPHEjA34qpDaeONQ72fm+bCnnN2DJjDePAY+NsmV17H88oIlq4JlJ2mD5Kh5d6R2MwTQ==", "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@types/node": "*" } }, - "node_modules/@jest/test-sequencer/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/@types/w3c-web-usb": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.14.tgz", + "integrity": "sha512-Qu3Nn6JFuF4+sHKYl+IcX9vYiI40ogleXzFFSxoE1W94rG98o/kXs8uJ0QSfFzuwBCZWlGfUGpPkgwuuX4PchA==", + "license": "MIT" }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "node_modules/@types/webpack": { + "version": "4.41.40", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.40.tgz", + "integrity": "sha512-u6kMFSBM9HcoTpUXnL6mt2HSzftqb3JgYV6oxIgL2dl6sX6aCa5k6SOkzv5DuZjBTPUE/dJltKtwwuqrkZHpfw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@types/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" } }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 12" } }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@ungap/structured-clone": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", + "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", "dev": true, + "license": "ISC" + }, + "node_modules/@vernier/godirect": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vernier/godirect/-/godirect-1.5.0.tgz", + "integrity": "sha512-vMS0fQubI3WSSLg1Ry3aey/qWCl9XoCsFzgwOWYkeJs45YxjPel+42pLh5pO7uP6oF47sjZUKx8kGOoTiiiirA==", + "license": "BSD-3-Clause" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, - "node_modules/@jest/transform/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" } }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@webassemblyjs/ast": "1.9.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "@xtuc/long": "4.2.2" } }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", "license": "MIT", - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", - "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", - "license": "MIT" + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "license": "MIT" - }, - "node_modules/@microbit/microbit-universal-hex": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@microbit/microbit-universal-hex/-/microbit-universal-hex-0.2.2.tgz", - "integrity": "sha512-qyFt8ATgxAyPkNz9Yado4HXEeCctwP/8L1/v2hFLeVUqw/HFqVqV4piJbqRMmyOefMcQ9OyVPhLXjtbKn9063Q==", "license": "MIT", "engines": { - "node": ">=8.5", - "npm": ">=6.0", - "yarn": "^1.0" - }, - "peerDependencies": { - "tslib": ">=1.11.1" + "node": ">= 0.6" } }, - "node_modules/@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", - "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "node_modules/acorn": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz", + "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==", "license": "MIT", - "optional": true + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "eslint-scope": "5.1.1" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "license": "MIT", - "engines": { - "node": ">= 8" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "ajv": ">=5.0.0" } }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" } }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "devOptional": true, "license": "ISC", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">= 8" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.12", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.12.tgz", - "integrity": "sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==", + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "node_modules/archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", "license": "MIT", + "dependencies": { + "file-type": "^4.2.0" + }, "engines": { "node": ">=4" } }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" + "node_modules/archive-type/node_modules/file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" + "license": "Python-2.0" + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@testim/chrome-version": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.4.tgz", - "integrity": "sha512-kIhULpw9TrGYnHp/8VfdcneIcxKnLixmADtukQRtJUmsVlMg0niMkwV0xZmi8hqa57xqilIHjWFA0GKvEjVU5g==", - "dev": true, - "license": "MIT" + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/@transifex/api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@transifex/api/-/api-4.3.0.tgz", - "integrity": "sha512-RCpqAqxZlrHDo7rfam8tLSoT02wvF8LQeNRC0VZG5IGrH+wv+G6fB8PWLLHrvUuaqO6XCwkMmYlJ/X9U9TLTHw==", - "license": "Apache-2.0", - "dependencies": { - "core-js": "^3.22.4" - }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">=0.10.0" } }, - "node_modules/@transifex/api/node_modules/core-js": { - "version": "3.51.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.51.0.tgz", - "integrity": "sha512-7bDKx/5jm5MxzsXxc93g6Z2+4ZsuT/MddrfRmTDJNAkWsYWHU8EVNEsBiIEWnMAMCHMmRfUEjkuo3jeNBOIHRw==", - "hasInstallScript": true, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, "engines": { - "node": "*" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@turbowarp/ancient-hull.js": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/@turbowarp/ancient-hull.js/-/ancient-hull.js-0.2.13.tgz", - "integrity": "sha512-lpVDr18qRjOLWcPtw9H+nlFhY7hbdgQlLU1b6nJfEn2pMYRnOEtzFXZbprG5JgmUCIzGx/H9WPajbkjRdvUC+Q==", - "license": "BSD" - }, - "node_modules/@turbowarp/json": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@turbowarp/json/-/json-0.1.2.tgz", - "integrity": "sha512-9nWywp+0SH7ROVzQPQQO9gMWBikahsqyMWp1Ku8VV0q+q6bnx6dS0aNPTjqTtF2GHAY55hcREsqKzaoUdWBSwg==", + "node_modules/array-find": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", + "integrity": "sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ==", + "dev": true, "license": "MIT" }, - "node_modules/@turbowarp/jszip": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/@turbowarp/jszip/-/jszip-3.12.0.tgz", - "integrity": "sha512-nTKFFc1rUToxTdxUKPIou3YKUsSelgEoyx4TAPzK/0BkGPntkenp9zoJOSnxnGWNchVXYVZv01+3aZwlS1K8hw==", - "license": "(MIT OR GPL-3.0-or-later)", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@turbowarp/nanolog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@turbowarp/nanolog/-/nanolog-1.0.1.tgz", - "integrity": "sha512-jdkH5MMdEo81Z9CJDDKsUqnTD5W3oeVt9SWyRSPLT3Q5NPGD6E4SnffD5pXWIZbjF052u2SamDxp/awW7W7cVQ==", + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true, "license": "MIT" }, - "node_modules/@turbowarp/paper": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@turbowarp/paper/-/paper-0.13.0.tgz", - "integrity": "sha512-ECixLnNuI6oO2hLLte+i6WdRZvo8mcTgkmMJna/si/7JXzu0/z7eoYzWQb48+BWVKj747+ArBPNvC43wFivz/Q==", + "node_modules/array-includes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.2.0.tgz", + "integrity": "sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@turbowarp/sb3fix": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@turbowarp/sb3fix/-/sb3fix-0.5.0.tgz", - "integrity": "sha512-X5EOo+2nO3jIjEAzDY/Fmyn0wj6uAqOYXrRB9HAwTX4xWrmwvhuN/l8trVg/p+718/ySB9vQ7BGP2P0wklBCzw==", - "license": "MPL-2.0", - "dependencies": { - "@turbowarp/jszip": "^3.12.0" - } - }, - "node_modules/@turbowarp/scratch-l10n": { - "version": "3.1001.202405101234", - "resolved": "https://registry.npmjs.org/@turbowarp/scratch-l10n/-/scratch-l10n-3.1001.202405101234.tgz", - "integrity": "sha512-a0JTugOunBFQqAKtjdkViUSmLxuDWwtdNi+1gbqnbDQyGfHOBdOe1xVkmQekw/CzR2HgsBAlL8aS4rsuVXzR3Q==", - "license": "BSD-3-Clause", "dependencies": { - "@babel/cli": "^7.1.2", - "@babel/core": "^7.1.2", - "@transifex/api": "4.3.0", - "babel-plugin-react-intl": "^3.0.1", - "download": "^8.0.0", - "transifex": "1.6.6" + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "es-shim-unscopables": "^1.1.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, - "bin": { - "build-i18n-src": "scripts/build-i18n-src.js", - "tx-push-src": "scripts/tx-push-src.js" - } - }, - "node_modules/@turbowarp/scratch-storage": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@turbowarp/scratch-storage/-/scratch-storage-2.0.0.tgz", - "integrity": "sha512-Qi/wpKuf9Vd1FKYuwbh9NY4aB6nxh9V7ulQ03TFsWxZJfV1GOL8NiFRQMGFBDda00kUjWr5+f/eobbRAOqZpUg==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/runtime": "7.21.0", - "@turbowarp/nanolog": "^0.2.0", - "arraybuffer-loader": "^1.0.3", - "base64-js": "1.3.0", - "cross-fetch": "3.1.5", - "js-md5": "0.7.3", - "worker-loader": "^2.0.0" - } - }, - "node_modules/@turbowarp/scratch-storage/node_modules/@turbowarp/nanolog": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@turbowarp/nanolog/-/nanolog-0.2.0.tgz", - "integrity": "sha512-texcM9oxfEsADVlVDR5UhLkYclPKsV9mytJh+9pHHonNcUrxRVGF6FkJTzWO/Hl5NafU1crSdw737nqKE3atSA==", - "license": "MIT" - }, - "node_modules/@turbowarp/scratch-svg-renderer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@turbowarp/scratch-svg-renderer/-/scratch-svg-renderer-1.1.0.tgz", - "integrity": "sha512-UPSUNKfR9f73ZNgjYdxsz5yheZYO/EiKE3Wji31thRVDGzOJOROQXcFicl/1oDWkMII4FvSLylGAw6/MPpoXqg==", - "license": "MPL-2.0", - "dependencies": { - "@turbowarp/nanolog": "^0.2.0", - "base64-js": "1.2.1", - "base64-loader": "1.0.0", - "dompurify": "^3.4.5", - "transformation-matrix": "1.15.0" + "engines": { + "node": ">= 0.4" }, - "peerDependencies": { - "scratch-render-fonts": "github:TurboWarp/scratch-render-fonts#master" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@turbowarp/scratch-svg-renderer/node_modules/@turbowarp/nanolog": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@turbowarp/nanolog/-/nanolog-0.2.0.tgz", - "integrity": "sha512-texcM9oxfEsADVlVDR5UhLkYclPKsV9mytJh+9pHHonNcUrxRVGF6FkJTzWO/Hl5NafU1crSdw737nqKE3atSA==", - "license": "MIT" - }, - "node_modules/@turbowarp/scratch-svg-renderer/node_modules/base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", - "license": "MIT" - }, - "node_modules/@turbowarp/startaudiocontext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@turbowarp/startaudiocontext/-/startaudiocontext-1.0.0.tgz", - "integrity": "sha512-BJ7EVYVwuTH/Tr6tEaLaXA5TCi8qKxNWsxohNqxIEDzykN+FscgOALhEMUlNc6vgcmOi7yQFJ82Prx9bnY5DgA==", - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.2" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "node_modules/array.prototype.reduce": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz", + "integrity": "sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==", "dev": true, "license": "MIT", "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "is-string": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "26.6.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz", - "integrity": "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==", "license": "MIT", "dependencies": { - "undici-types": "~8.9.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/@types/node-hid": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/node-hid/-/node-hid-1.3.4.tgz", - "integrity": "sha512-0ootpsYetN9vjqkDSwm/cA4fk/9yGM/PO0X8SLPE/BzXlUaBelImMWMymtF9QEoEzxY0pnhcROIJM0CNSUqO8w==", + "node_modules/arraybuffer-loader": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/arraybuffer-loader/-/arraybuffer-loader-1.0.8.tgz", + "integrity": "sha512-CwUVCcxCgcgZUu2w741OV6Xj1tvRVQebq22RCyGXiLgJOJ4e4M/59EPYdtK2MLfIN28t1TDvuh2ojstNq3Kh5g==", "license": "MIT", "dependencies": { - "@types/node": "*" + "loader-utils": "^1.1.0" + }, + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/@types/source-list-map": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.6.tgz", - "integrity": "sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/tapable": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.12.tgz", - "integrity": "sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "license": "MIT", - "optional": true + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@types/uglify-js": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz", - "integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==", - "dev": true, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "license": "MIT", "dependencies": { - "source-map": "^0.6.1" + "safer-buffer": "~2.1.0" } }, - "node_modules/@types/usb": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/usb/-/usb-1.5.4.tgz", - "integrity": "sha512-NOUza/8yuswu6RoECQyPHEjA34qpDaeONQ72fm+bCnnN2DJjDePAY+NsmV17H88oIlq4JlJ2mD5Kh5d6R2MwTQ==", + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "license": "MIT", "dependencies": { - "@types/node": "*" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "node_modules/@types/w3c-web-usb": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.14.tgz", - "integrity": "sha512-Qu3Nn6JFuF4+sHKYl+IcX9vYiI40ogleXzFFSxoE1W94rG98o/kXs8uJ0QSfFzuwBCZWlGfUGpPkgwuuX4PchA==", + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", + "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", "license": "MIT" }, - "node_modules/@types/webpack": { - "version": "4.41.40", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.40.tgz", - "integrity": "sha512-u6kMFSBM9HcoTpUXnL6mt2HSzftqb3JgYV6oxIgL2dl6sX6aCa5k6SOkzv5DuZjBTPUE/dJltKtwwuqrkZHpfw==", - "dev": true, + "node_modules/assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", "license": "MIT", "dependencies": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" + "object.assign": "^4.1.4", + "util": "^0.10.4" } }, - "node_modules/@types/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==", - "dev": true, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "license": "MIT", "dependencies": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" + "inherits": "2.0.3" } }, - "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "license": "MIT", "engines": { - "node": ">= 12" + "node": ">=0.10.0" } }, - "node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "lodash": "^4.17.14" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT" }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">= 0.4" } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", - "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "1.13.0", - "eslint-scope": "^4.0.0" + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" }, "engines": { - "node": "^6.14.0 || ^8.10.0 || >=9.10.0" - }, - "peerDependencies": { - "eslint": "*" + "node": ">= 4.5.0" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "node_modules/autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" }, - "engines": { - "node": ">=4.0.0" + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } + "node_modules/autoprefixer/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "license": "ISC" }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", - "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", "dependencies": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">=6.14.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", + "engines": { + "node": "*" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", - "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vernier/godirect": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@vernier/godirect/-/godirect-1.5.0.tgz", - "integrity": "sha512-vMS0fQubI3WSSLg1Ry3aey/qWCl9XoCsFzgwOWYkeJs45YxjPel+42pLh5pO7uP6oF47sjZUKx8kGOoTiiiirA==", - "license": "BSD-3-Clause" + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "license": "MIT" }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", "license": "MIT", "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", "license": "MIT" }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" } }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "license": "ISC" + "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0" + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "node_modules/babel-loader/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "license": "MIT", "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", + "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", + "dev": true, "license": "MIT", "dependencies": { - "@xtuc/long": "4.2.2" + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.4", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", + "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.16.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", + "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", + "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@babel/helper-define-polyfill-provider": "^0.2.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "license": "MIT", + "node_modules/babel-plugin-react-intl": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-react-intl/-/babel-plugin-react-intl-3.5.1.tgz", + "integrity": "sha512-1jlEJCSmLaJM4tjIKpu64UZ833COCHmwR77bFJDOye+zlwf80uR1b8p41l4tClx1QsrfI+qV6w/5AiPYQgaMUQ==", + "deprecated": "this package has been renamed to babel-plugin-formatjs", + "license": "BSD-3-Clause", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@babel/core": "^7.4.5", + "@babel/helper-plugin-utils": "^7.0.0", + "@types/babel__core": "^7.1.2", + "fs-extra": "^8.0.1", + "intl-messageformat-parser": "^1.8.1" } }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "license": "MIT" }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause" + "node_modules/balance-text": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/balance-text/-/balance-text-3.3.1.tgz", + "integrity": "sha512-tpnHvo1w0rJ5rbu+jZKf7NLKKg6XZ6eAwREP/9jEDJ+ZTBi6jQFqn/UGARL3/oqD8SgQbyTwBXBjhKDdTgoPRw==" }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0" + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/acorn": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz", - "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==", - "license": "MIT", + "node_modules/base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "license": "MIT" + }, + "node_modules/base64-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64-loader/-/base64-loader-1.0.0.tgz", + "integrity": "sha512-p32+F8dg+ANGx7s8QsZS74ZPHfIycmC2yZcoerzFgbersIYWitPbbF39G6SBx3gyvzyLH5nt1ooocxr0IHuWKA==", + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.33", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.33.tgz", + "integrity": "sha512-yiVKDX+qCMRKBE084lXvq9EcwFUhKZ2nU8TK1EQQuOgPNR/lmbGxXOeDdlGUqC2Zz11Cs9rk1d/8NfgBmlkt0w==", + "license": "Apache-2.0", "bin": { - "acorn": "bin/acorn" + "baseline-browser-mapping": "dist/cli.cjs" }, "engines": { - "node": ">=0.4.0" + "node": ">=6.0.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } + "license": "MIT" }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "license": "MIT", + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" + "tweetnacl": "^0.14.3" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/airbnb-prop-types": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz", - "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==", - "deprecated": "This package has been renamed to 'prop-types-tools'", - "dev": true, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "license": "MIT", - "dependencies": { - "array.prototype.find": "^2.1.1", - "function.prototype.name": "^1.1.2", - "is-regex": "^1.1.0", - "object-is": "^1.1.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.2", - "prop-types": "^15.7.2", - "prop-types-exact": "^1.2.0", - "react-is": "^16.13.1" + "optional": true, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "peerDependencies": { - "react": "^0.14 || ^15.0.0 || ^16.0.0-alpha" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "license": "MIT", + "optional": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "license": "MIT", - "peerDependencies": { - "ajv": ">=5.0.0" + "file-uri-to-path": "1.0.0" } }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, - "node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/bn.js": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.5.tgz", + "integrity": "sha512-Vq886eXykuP5E6HcKSSStP3bJgrE6In5WKxVUvJ8XGpWWYs2xZHWqUwzCtGgEtBcxyd57KBFDPFoUfNzdaHCNg==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.9", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.9.tgz", + "integrity": "sha512-FISIQxV5u91Y9gvuFq3q/tA/qTqLJn3AhRcEvyozyhJTh5OBFFtv827AdHU7Rbyct4r+Ba1/99oFa1Y3yuFsdw==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.16.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA==", + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "devOptional": true, - "license": "ISC", + "node_modules/body-parser/node_modules/qs": { + "version": "6.16.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.1.tgz", + "integrity": "sha512-5Px6J7rfHBAGUhNQ3es4YzcOdBBw0SDcVtThJml4RdnKw4tKs2epA0kPZ+K8X+WiHktT93RHVcQ/3ym5aTCgtg==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { - "node": ">= 8" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "node_modules/bonjour": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.1.tgz", + "integrity": "sha512-xONzj4PfpPJw6xSqCcT2SmQkBOXpUINUz3o3qXcWJwYlXbkZNcNaUae0o5lle7tKt4HHV6dTgkIRhAXZ3nBMsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^7.2.3", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true, "license": "ISC" }, - "node_modules/archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", + "node_modules/bowser": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", + "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", + "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", "license": "MIT", "dependencies": { - "file-type": "^4.2.0" - }, - "engines": { - "node": ">=4" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/archive-type/node_modules/file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "node_modules/brfs": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", + "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^2.2.0", + "through2": "^2.0.0" + }, + "bin": { + "brfs": "bin/cmd.js" } }, - "node_modules/arr-flatten": { + "node_modules/brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha512-7Rfk377tpSM9TWBEeHs0FlDZGoAIei2V/4MdZJoFMBFAK6BqLpxAIUepGRHGdPFgGsLb02PXovC4qddyHvQqTg==", + "license": "ISC" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "node_modules/array-buffer-byte-length": { + "node_modules/browserify-des": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/array-find": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/array-includes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.2.0.tgz", - "integrity": "sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg==", - "dev": true, + "node_modules/browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.2", - "es-object-atoms": "^1.1.2", - "es-shim-unscopables": "^1.1.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.4.tgz", - "integrity": "sha512-r+mCJ7zXgXElgR4IRC+fkvNCeoaavWBs6EdCso5Tbcf+iEMKzBU/His60lt34WEZ9vlb8wDkZvQGcVI5GwkfoQ==", - "dev": true, - "license": "MIT", + "node_modules/browserify-sign": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.6.tgz", + "integrity": "sha512-sd+Q65fjlWCYWtZKXiKfrUc8d+4jtp/8f0W2NkwzLtoW4bI6UDnWusLWIurHnmurW0XShIRxpwiOX4EoPtXUAg==", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-array-method-boxes-properly": "^1.0.0", - "es-object-atoms": "^1.0.0", - "is-string": "^1.0.7" + "bn.js": "^5.2.3", + "browserify-rsa": "^4.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.6.1", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.9", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.10" } }, - "node_modules/array.prototype.find": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.3.tgz", - "integrity": "sha512-fO/ORdOELvjbbeIfZfzrXFMhYHGofRGqd+am9zm3tZ4GlJINj/pA2eITyfd65Vg6+ZbHd/Cys7stpoRSWtQFdA==", - "dev": true, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "pako": "~1.0.5" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, + "node_modules/browserslist": { + "version": "4.29.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.4.tgz", + "integrity": "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" + "baseline-browser-mapping": "^2.11.29", + "caniuse-lite": "^1.0.30001816", + "electron-to-chromium": "^1.5.459", + "node-releases": "^2.0.59", + "update-browserslist-db": "^1.3.4" }, - "engines": { - "node": ">= 0.4" + "bin": { + "browserslist": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "license": "(MIT OR Apache-2.0)", + "bin": { + "btoa": "bin/btoa.js" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.4.0" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "node_modules/array.prototype.reduce": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz", - "integrity": "sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==", - "dev": true, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-array-method-boxes-properly": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "is-string": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "license": "MIT" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": "*" } }, - "node_modules/arraybuffer-loader": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/arraybuffer-loader/-/arraybuffer-loader-1.0.8.tgz", - "integrity": "sha512-CwUVCcxCgcgZUu2w741OV6Xj1tvRVQebq22RCyGXiLgJOJ4e4M/59EPYdtK2MLfIN28t1TDvuh2ojstNq3Kh5g==", + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", "license": "MIT", - "dependencies": { - "loader-utils": "^1.1.0" - }, "engines": { - "node": ">= 4.0.0" + "node": ">=0.4.0" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "license": "MIT" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "license": "MIT" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "license": "ISC", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "license": "MIT", + "node_modules/cacache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { - "safer-buffer": "~2.1.0" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "node_modules/cacache/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "license": "MIT", "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", - "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "node_modules/cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", "license": "MIT", "dependencies": { - "object.assign": "^4.1.4", - "util": "^0.10.4" + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" } }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "license": "MIT", "engines": { - "node": ">=0.8" + "node": ">=4" } }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" + "node_modules/cacheable-request/node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "license": "MIT" }, - "node_modules/assert/node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "node_modules/cacheable-request/node_modules/keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", "license": "MIT", "dependencies": { - "inherits": "2.0.3" + "json-buffer": "3.0.0" } }, - "node_modules/assign-symbols": { + "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "license": "MIT", "dependencies": { - "lodash": "^4.17.14" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "devOptional": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "license": "MIT", + "dependencies": { + "callsites": "^2.0.0" }, "engines": { - "node": ">= 4.5.0" + "node": ">=4" } }, - "node_modules/autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", "license": "MIT", - "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" + "engines": { + "node": ">=4" } }, - "node_modules/autoprefixer/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "license": "ISC" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", "license": "MIT", "dependencies": { - "possible-typed-array-names": "^1.0.0" + "caller-callsite": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "license": "Apache-2.0", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/aws4": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", - "license": "MIT" - }, - "node_modules/axios": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.20.0.tgz", - "integrity": "sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==", + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, "license": "MIT", "dependencies": { - "follow-redirects": "^1.16.0", - "form-data": "^4.0.6", - "https-proxy-agent": "^5.0.1", - "proxy-from-env": "^2.1.0" + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "node_modules/axios/node_modules/proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", - "license": "MIT", - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } + "node_modules/caniuse-lite": { + "version": "1.0.30001819", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001819.tgz", + "integrity": "sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "node_modules/canvas-toBlob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/canvas-toBlob/-/canvas-toBlob-1.0.0.tgz", + "integrity": "sha512-oU5bawygt/Nef9F+C49eTFmzXzz6yKdGqn6J1wn/LZQF5ulnnZVm0KIZzik85I6tjCbZFH6aa47j4bU2tkHxRw==", "license": "MIT" }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "license": "MIT", - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", + "optional": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=6" + "node": ">= 8.10.0" }, - "peerDependencies": { - "eslint": ">= 4.12.1" + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/babel-eslint/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "license": "MIT", - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "node": ">=6.0" } }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.10" } }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/babel-loader/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz", - "integrity": "sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.4", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", - "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.16.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz", - "integrity": "sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-react-intl": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-react-intl/-/babel-plugin-react-intl-3.5.1.tgz", - "integrity": "sha512-1jlEJCSmLaJM4tjIKpu64UZ833COCHmwR77bFJDOye+zlwf80uR1b8p41l4tClx1QsrfI+qV6w/5AiPYQgaMUQ==", - "deprecated": "this package has been renamed to babel-plugin-formatjs", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.4.5", - "@babel/helper-plugin-utils": "^7.0.0", - "@types/babel__core": "^7.1.2", - "fs-extra": "^8.0.1", - "intl-messageformat-parser": "^1.8.1" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "license": "MIT", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-runtime/node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "license": "MIT" - }, - "node_modules/balance-text": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/balance-text/-/balance-text-3.3.1.tgz", - "integrity": "sha512-tpnHvo1w0rJ5rbu+jZKf7NLKKg6XZ6eAwREP/9jEDJ+ZTBi6jQFqn/UGARL3/oqD8SgQbyTwBXBjhKDdTgoPRw==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "license": "MIT", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "license": "MIT" - }, - "node_modules/base64-loader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64-loader/-/base64-loader-1.0.0.tgz", - "integrity": "sha512-p32+F8dg+ANGx7s8QsZS74ZPHfIycmC2yZcoerzFgbersIYWitPbbF39G6SBx3gyvzyLH5nt1ooocxr0IHuWKA==", - "license": "MIT" - }, - "node_modules/baseline-browser-mapping": { - "version": "2.11.33", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.33.tgz", - "integrity": "sha512-yiVKDX+qCMRKBE084lXvq9EcwFUhKZ2nU8TK1EQQuOgPNR/lmbGxXOeDdlGUqC2Zz11Cs9rk1d/8NfgBmlkt0w==", - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true, - "license": "MIT" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "license": "MIT", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/bn.js": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.5.tgz", - "integrity": "sha512-Vq886eXykuP5E6HcKSSStP3bJgrE6In5WKxVUvJ8XGpWWYs2xZHWqUwzCtGgEtBcxyd57KBFDPFoUfNzdaHCNg==", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.9", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.9.tgz", - "integrity": "sha512-FISIQxV5u91Y9gvuFq3q/tA/qTqLJn3AhRcEvyozyhJTh5OBFFtv827AdHU7Rbyct4r+Ba1/99oFa1Y3yuFsdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.16.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.16.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.1.tgz", - "integrity": "sha512-5Px6J7rfHBAGUhNQ3es4YzcOdBBw0SDcVtThJml4RdnKw4tKs2epA0kPZ+K8X+WiHktT93RHVcQ/3ym5aTCgtg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "es-define-property": "^1.0.1", - "side-channel": "^1.1.1" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/bonjour": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.1.tgz", - "integrity": "sha512-xONzj4PfpPJw6xSqCcT2SmQkBOXpUINUz3o3qXcWJwYlXbkZNcNaUae0o5lle7tKt4HHV6dTgkIRhAXZ3nBMsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^7.2.3", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" - }, - "node_modules/bowser": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", - "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.21.tgz", - "integrity": "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brfs": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", - "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", - "license": "MIT", - "dependencies": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^2.2.0", - "through2": "^2.0.0" - }, - "bin": { - "brfs": "bin/cmd.js" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "license": "MIT" - }, - "node_modules/browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha512-7Rfk377tpSM9TWBEeHs0FlDZGoAIei2V/4MdZJoFMBFAK6BqLpxAIUepGRHGdPFgGsLb02PXovC4qddyHvQqTg==", - "license": "ISC" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "license": "MIT", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "license": "MIT", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", - "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", - "license": "MIT", - "dependencies": { - "bn.js": "^5.2.1", - "randombytes": "^2.1.0", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.6.tgz", - "integrity": "sha512-sd+Q65fjlWCYWtZKXiKfrUc8d+4jtp/8f0W2NkwzLtoW4bI6UDnWusLWIurHnmurW0XShIRxpwiOX4EoPtXUAg==", - "license": "ISC", - "dependencies": { - "bn.js": "^5.2.3", - "browserify-rsa": "^4.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.6.1", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.9", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "license": "MIT", - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.29.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.4.tgz", - "integrity": "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.11.29", - "caniuse-lite": "^1.0.30001816", - "electron-to-chromium": "^1.5.459", - "node-releases": "^2.0.59", - "update-browserslist-db": "^1.3.4" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.2.tgz", - "integrity": "sha512-V2o8YS2EhrKMO9AumnkK0ynynfFlsajpYupwq7S46H5mhcanwxDkNTw3K67wPIcKTH1ffkA4vhMOtAc7gRmPZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", - "license": "(MIT OR Apache-2.0)", - "bin": { - "btoa": "bin/btoa.js" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "license": "MIT", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "license": "MIT", - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "license": "MIT" - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "license": "MIT" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true, - "license": "MIT" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "license": "MIT" - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "license": "MIT", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", - "license": "MIT", - "dependencies": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/cacheable-request/node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "license": "MIT" - }, - "node_modules/cacheable-request/node_modules/keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", - "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "get-intrinsic": "^1.3.0", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "license": "MIT", - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "license": "MIT", - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001819", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001819.tgz", - "integrity": "sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/canvas-toBlob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canvas-toBlob/-/canvas-toBlob-1.0.0.tgz", - "integrity": "sha512-oU5bawygt/Nef9F+C49eTFmzXzz6yKdGqn6J1wn/LZQF5ulnnZVm0KIZzik85I6tjCbZFH6aa47j4bU2tkHxRw==", - "license": "MIT" - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "license": "Apache-2.0" - }, - "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/cheerio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", - "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "encoding-sniffer": "^0.2.1", - "htmlparser2": "^10.1.0", - "parse5": "^7.3.0", - "parse5-htmlparser2-tree-adapter": "^7.1.0", - "parse5-parser-stream": "^7.1.2", - "undici": "^7.19.0", - "whatwg-mimetype": "^4.0.0" - }, - "engines": { - "node": ">=20.18.1" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "license": "BSD-2-Clause", - "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" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "optional": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/chromedriver": { - "version": "117.0.3", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-117.0.3.tgz", - "integrity": "sha512-c2rk2eGK5zZFBJMdviUlAJfQEBuPNIKfal4+rTFVYAmrWbMPYAqPozB+rIkc1lDP/Ryw44lPiqKglrI01ILhTQ==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@testim/chrome-version": "^1.1.3", - "axios": "^1.4.0", - "compare-versions": "^6.0.0", - "extract-zip": "^2.0.1", - "https-proxy-agent": "^5.0.1", - "proxy-from-env": "^1.1.0", - "tcp-port-used": "^1.0.1" - }, - "bin": { - "chromedriver": "bin/chromedriver" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cipher-base": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", - "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", - "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==", - "license": "MIT" - }, - "node_modules/clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", - "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", - "dev": true, - "license": "MIT" - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "license": "MIT", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", - "integrity": "sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==" - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "license": "MIT" - }, - "node_modules/compare-versions": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", - "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", - "dev": true, - "license": "MIT" - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.2.tgz", - "integrity": "sha512-o8vI5RE5A6EVVOd9o41jKp41aJom+QTEO/Bx8MYNjexMo/Bv2WOjUfZr+aL0WnYSgymUy6zeguqLTsIhV0gMvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "destroy": "1.2.0", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/computed-style-to-inline-style": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/computed-style-to-inline-style/-/computed-style-to-inline-style-3.0.0.tgz", - "integrity": "sha512-6XAOG2ZZkpCfbM9AhRN4/wjMgQujtH/2q/eowZON190oAASUjEb3jwcodjmRlR8HNDMahJdBQwchuDftOtF7eg==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-concurrently/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz", - "integrity": "sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==", - "license": "MIT", - "dependencies": { - "cacache": "^15.0.5", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "webpack-sources": "^1.4.3" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "license": "MIT" - }, - "node_modules/core-js-compat": { - "version": "3.51.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.51.0.tgz", - "integrity": "sha512-52r6fkXgxv4GLMjmFcMWRx7X9bw071xTTdrDcdyPGRqU2oE+9pCG0bAOMifSBdLw0JRBZKEF0q3B55qPlLuE8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.29.3" - }, - "engines": { - "node": ">=6.4.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "license": "MIT", - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/cosmiconfig/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "license": "MIT", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.2.tgz", - "integrity": "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/cosmiconfig/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/create-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/create-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/create-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/create-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "license": "MIT", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", - "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", - "license": "MIT", - "dependencies": { - "browserify-cipher": "^1.0.1", - "browserify-sign": "^4.2.3", - "create-ecdh": "^4.0.4", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "diffie-hellman": "^5.0.3", - "hash-base": "~3.0.4", - "inherits": "^2.0.4", - "pbkdf2": "^3.1.2", - "public-encrypt": "^4.0.3", - "randombytes": "^2.1.0", - "randomfill": "^1.0.4" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/css-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", - "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", - "license": "MIT", - "dependencies": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash": "^4.17.11", - "postcss": "^6.0.23", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" - }, - "engines": { - "node": ">= 6.9.0 <7.0.0 || >= 8.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/css-loader/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-loader/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-loader/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/css-loader/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/css-loader/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/css-loader/node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "license": "MIT", - "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/css-loader/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "license": "MIT" - }, - "node_modules/css-loader/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-mediaquery": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", - "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==", - "license": "BSD" - }, - "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, - "node_modules/css-vendor": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-0.3.8.tgz", - "integrity": "sha512-Vx/Vl3zsHj32Z+WTNzGjd2iSbSIJTYHMmyGUT2nzCjj0Xk4qLfwpQ8nF6TQ5oo3Cf0s/An3DTc7LclH1BkAXbQ==", - "license": "MIT", - "dependencies": { - "is-in-browser": "^1.0.2" - } - }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cyclist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", - "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/dapjs": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/dapjs/-/dapjs-2.3.0.tgz", - "integrity": "sha512-quanzq7+2xnqgGqqYgARz9o3iBcZ3Ir5r5mTA7WPsjrp9ilEqqCToSFGTL+8HuGP35dUIL7O+yMBloYHhHgZDA==", - "license": "MIT", - "dependencies": { - "@types/node-hid": "^1.2.0", - "@types/usb": "^1.5.1", - "@types/w3c-web-usb": "^1.0.4" - }, - "engines": { - "node": ">=8.14.0" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-html": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decode-html/-/decode-html-2.0.0.tgz", - "integrity": "sha512-lVJ+EBozhAXA2nSQG+xAgcD0P5K3uejnIIvM09uoQfS8AALkQ+HhHcEUvKovXi0EIpIZWjm0y8X7ULjaJpgY9w==", - "license": "MIT" - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "license": "MIT", - "dependencies": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "license": "MIT", - "dependencies": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "license": "MIT", - "dependencies": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2/node_modules/file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "license": "MIT", - "dependencies": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", - "license": "MIT", - "dependencies": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip/node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-unzip/node_modules/get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", - "license": "MIT", - "dependencies": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-unzip/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress/node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress/node_modules/make-dir/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dedent": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", - "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-equal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", - "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.5.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/default-gateway/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/default-gateway/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/del/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "license": "MIT" - }, - "node_modules/diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-match-patch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz", - "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==", - "license": "Apache-2.0" - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true, - "license": "MIT" - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "license": "MIT", - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dompurify": { - "version": "3.4.17", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.17.tgz", - "integrity": "sha512-B/pSlYVHQ58kqISD/yDjuJ1yfzI34m1gF4lAod2bwSRhiN4K5Cl3H8Af7hqB2PmTL911tdEudnnXn5FnhRoz0w==", - "license": "(MPL-2.0 OR Apache-2.0)", - "optionalDependencies": { - "@types/trusted-types": "^2.0.7" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/download": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", - "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", - "license": "MIT", - "dependencies": { - "archive-type": "^4.0.0", - "content-disposition": "^0.5.2", - "decompress": "^4.2.1", - "ext-name": "^5.0.0", - "file-type": "^11.1.0", - "filenamify": "^3.0.0", - "get-stream": "^4.1.0", - "got": "^8.3.1", - "make-dir": "^2.1.0", - "p-event": "^2.1.0", - "pify": "^4.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "license": "BSD-3-Clause", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "license": "BSD-3-Clause" - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.464", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.464.tgz", - "integrity": "sha512-nRa65aFge40viPAKxMKULIY8tcXKwKboJWNn4RoKwyWXJ6SP7BnrDGKUTzc64818jIciH0PK7LSF8QzZes19GA==", - "license": "ISC" - }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.5", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", - "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", - "license": "MIT" - }, - "node_modules/email-addresses": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", - "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding-sniffer": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", - "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "^0.6.3", - "whatwg-encoding": "^3.1.1" - }, - "funding": { - "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", - "integrity": "sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.2.0", - "tapable": "^0.1.8" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/enzyme": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz", - "integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array.prototype.flat": "^1.2.1", - "cheerio": "^1.0.0-rc.2", - "function.prototype.name": "^1.1.0", - "has": "^1.0.3", - "html-element-map": "^1.0.0", - "is-boolean-object": "^1.0.0", - "is-callable": "^1.1.4", - "is-number-object": "^1.0.3", - "is-regex": "^1.0.4", - "is-string": "^1.0.4", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.6.0", - "object-is": "^1.0.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4", - "object.values": "^1.0.4", - "raf": "^3.4.0", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.1.2" - } - }, - "node_modules/enzyme-adapter-react-16": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.7.tgz", - "integrity": "sha512-LtjKgvlTc/H7adyQcj+aq0P0H07LDL480WQl1gU512IUyaDo/sbOaNDdZsJXYW2XaoPqrLLE9KbZS+X2z6BASw==", - "dev": true, - "license": "MIT", - "dependencies": { - "enzyme-adapter-utils": "^1.14.1", - "enzyme-shallow-equal": "^1.0.5", - "has": "^1.0.3", - "object.assign": "^4.1.4", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "react-is": "^16.13.1", - "react-test-renderer": "^16.0.0-0", - "semver": "^5.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "peerDependencies": { - "enzyme": "^3.0.0", - "react": "^16.0.0-0", - "react-dom": "^16.0.0-0" - } - }, - "node_modules/enzyme-adapter-react-16/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/enzyme-adapter-utils": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.2.tgz", - "integrity": "sha512-1ZC++RlsYRaiOWE5NRaF5OgsMt7F5rn/VuaJIgc7eW/fmgg8eS1/Ut7EugSPPi7VMdWMLcymRnMF+mJUJ4B8KA==", - "dev": true, - "license": "MIT", - "dependencies": { - "airbnb-prop-types": "^2.16.0", - "function.prototype.name": "^1.1.6", - "hasown": "^2.0.0", - "object.assign": "^4.1.5", - "object.fromentries": "^2.0.7", - "prop-types": "^15.8.1", - "semver": "^6.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "peerDependencies": { - "react": "0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0" - } - }, - "node_modules/enzyme-shallow-equal": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.7.tgz", - "integrity": "sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0", - "object-is": "^1.1.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "license": "MIT", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.24.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", - "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-abstract-get": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz", - "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.2", - "is-callable": "^1.2.7", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz", - "integrity": "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.2", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.1.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.3.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.5", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", - "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz", - "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-abstract-get": "^1.0.0", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "is-callable": "^1.2.7", - "is-date-object": "^1.1.0", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", - "license": "MIT" - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "license": "MIT", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "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.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-scratch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-scratch/-/eslint-config-scratch-9.0.3.tgz", - "integrity": "sha512-BSMx4Y6V7IjDW/thMXLAYTxKvjeI4M8RtHmbpUbx3N70CZV4armoA9zJ7RmER1hjV5KQebCVQy45A2xMj2Ng8w==", - "dev": true, - "license": "BSD-3-Clause", - "optionalDependencies": { - "eslint-plugin-react": ">=7.27.0" - }, - "peerDependencies": { - "@babel/eslint-parser": "^7.11.0", - "eslint": "^8.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", - "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.16.1", - "resolve": "^2.0.0-next.6" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/resolve": { - "version": "2.0.0-next.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", - "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "is-core-module": "^2.16.2", - "node-exports-info": "^1.6.0", - "object-keys": "^1.1.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-import-resolver-webpack": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.11.1.tgz", - "integrity": "sha512-eK3zR7xVQR/MaoBWwGuD+CULYVuqe5QFlDukman71aI6IboCGzggDUohHNfu1ZeBnbHcUHJc0ywWoXUBNB6qdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-find": "^1.0.0", - "debug": "^2.6.8", - "enhanced-resolve": "~0.9.0", - "find-root": "^1.1.0", - "has": "^1.0.1", - "interpret": "^1.0.0", - "lodash": "^4.17.4", - "node-libs-browser": "^1.0.0 || ^2.0.0", - "resolve": "^1.10.0", - "semver": "^5.3.0" - }, - "peerDependencies": { - "eslint-plugin-import": ">=1.4.0", - "webpack": ">=1.11.0" - } - }, - "node_modules/eslint-import-resolver-webpack/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-import-resolver-webpack/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-import-resolver-webpack/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.14.0.tgz", - "integrity": "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==", - "dev": true, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "license": "MIT", "dependencies": { - "debug": "^3.2.7" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "node_modules/classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==", + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" + "source-map": "~0.6.0" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "node": ">= 4.0" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "mimic-response": "^1.0.0" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-jest": { - "version": "22.17.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.17.0.tgz", - "integrity": "sha512-WT4DP4RoGBhIQjv+5D0FM20fAdAUstfYAf/mkufLNTojsfgzc5/IYW22cIg/Q4QBavAZsROQlqppiWDpFZDS8Q==", + "node_modules/color-convert": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", + "integrity": "sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==" + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, + "license": "MIT" + }, + "node_modules/colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", "dependencies": { - "@typescript-eslint/experimental-utils": "^1.13.0" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">=5" + "node": ">= 0.8" } }, - "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", - "dev": true, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "node": ">= 6" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", - "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", + "node_modules/compression": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.2.tgz", + "integrity": "sha512-o8vI5RE5A6EVVOd9o41jKp41aJom+QTEO/Bx8MYNjexMo/Bv2WOjUfZr+aL0WnYSgymUy6zeguqLTsIhV0gMvQ==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "is-core-module": "^2.16.2", - "node-exports-info": "^1.6.0", - "object-keys": "^1.1.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "destroy": "1.2.0", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "BSD-2-Clause", - "peer": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/computed-style-to-inline-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/computed-style-to-inline-style/-/computed-style-to-inline-style-3.0.0.tgz", + "integrity": "sha512-6XAOG2ZZkpCfbM9AhRN4/wjMgQujtH/2q/eowZON190oAASUjEb3jwcodjmRlR8HNDMahJdBQwchuDftOtF7eg==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true, - "license": "BSD-2-Clause", - "peer": true, + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=0.8" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/copy-concurrently/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "minimist": "^1.2.6" }, - "engines": { - "node": ">=7.0.0" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/copy-webpack-plugin": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz", + "integrity": "sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "cacache": "^15.0.5", + "fast-glob": "^3.2.4", + "find-cache-dir": "^3.3.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "webpack-sources": "^1.4.3" }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 10.13.0" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, - "engines": { - "node": ">=10.13.0" + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" } }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/copy-webpack-plugin/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=8" + "node": ">=8.9.0" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=8" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.51.0.tgz", + "integrity": "sha512-52r6fkXgxv4GLMjmFcMWRx7X9bw071xTTdrDcdyPGRqU2oE+9pCG0bAOMifSBdLw0JRBZKEF0q3B55qPlLuE8g==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "browserslist": "^4.29.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.4.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=4" } }, - "node_modules/esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/cosmiconfig/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -8822,1410 +4790,1458 @@ "node": ">=4" } }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=4" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.2.tgz", + "integrity": "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==", + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "license": "MIT", "engines": { - "node": ">=0.8.x" + "node": ">=4" } }, - "node_modules/eventsource": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", - "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", - "dev": true, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "license": "MIT", - "engines": { - "node": ">=12.0.0" + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", + "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", + "license": "MIT" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "license": "MIT", "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "node-fetch": "2.6.7" } }, - "node_modules/execa/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/exenv": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", - "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==", - "license": "BSD-3-Clause" - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">= 8" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "node_modules/crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "license": "MIT", "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/css-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", + "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash": "^4.17.11", + "postcss": "^6.0.23", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + }, + "engines": { + "node": ">= 6.9.0 <7.0.0 || >= 8.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" } }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "node_modules/css-loader/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "license": "MIT", "dependencies": { - "is-descriptor": "^0.1.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/css-loader/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "license": "MIT", "dependencies": { - "is-extendable": "^0.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", - "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", + "node_modules/css-loader/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "license": "MIT", "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, + "color-name": "1.1.3" + } + }, + "node_modules/css-loader/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/css-loader/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/css-loader/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4.0.0" } }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/css-loader/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "license": "MIT" }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, + "node_modules/css-loader/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "license": "MIT", "dependencies": { - "homedir-polyfill": "^1.0.1" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, + "node_modules/css-mediaquery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==", + "license": "BSD" + }, + "node_modules/css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", "license": "MIT", "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" } }, - "node_modules/exports-loader": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.7.0.tgz", - "integrity": "sha512-RKwCrO4A6IiKm0pG3c9V46JxIHcDplwwGJn6+JJ1RcVnh/WSGJa0xkmk5cRVtgOPzCAtTMGj2F7nluh9L0vpSA==", + "node_modules/css-vendor": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-0.3.8.tgz", + "integrity": "sha512-Vx/Vl3zsHj32Z+WTNzGjd2iSbSIJTYHMmyGUT2nzCjj0Xk4qLfwpQ8nF6TQ5oo3Cf0s/An3DTc7LclH1BkAXbQ==", "license": "MIT", "dependencies": { - "loader-utils": "^1.1.0", - "source-map": "0.5.0" - }, + "is-in-browser": "^1.0.2" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">= 4" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/exports-loader/node_modules/source-map": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.0.tgz", - "integrity": "sha512-gjGnxNN0K+/Pr4Mi4fs/pOtda10dKB6Wn9QvjOrH6v5TWsI7ghHuJUHoIgyM6DkUL5kr2GtPFGererzKpMBWfA==", - "license": "BSD-3-Clause", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/express": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.3.tgz", - "integrity": "sha512-Bdcs4+3qlpVlx2NRn6fgX2Ue2/gGRaPeawebgclM0ERSCqDpA+owF1fdPwjJUTAJWMTuAaxjDf+hzb0/4eKvvw==", + "node_modules/cyclist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", + "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", "dev": true, + "license": "MIT" + }, + "node_modules/dapjs": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/dapjs/-/dapjs-2.3.0.tgz", + "integrity": "sha512-quanzq7+2xnqgGqqYgARz9o3iBcZ3Ir5r5mTA7WPsjrp9ilEqqCToSFGTL+8HuGP35dUIL7O+yMBloYHhHgZDA==", "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.5", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.13", - "proxy-addr": "~2.0.7", - "qs": "~6.16.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "@types/node-hid": "^1.2.0", + "@types/usb": "^1.5.1", + "@types/w3c-web-usb": "^1.0.4" }, "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=8.14.0" } }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, - "license": "MIT" + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } }, - "node_modules/express/node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/express/node_modules/qs": { - "version": "6.16.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.1.tgz", - "integrity": "sha512-5Px6J7rfHBAGUhNQ3es4YzcOdBBw0SDcVtThJml4RdnKw4tKs2epA0kPZ+K8X+WiHktT93RHVcQ/3ym5aTCgtg==", + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "es-define-property": "^1.0.1", - "side-channel": "^1.1.1" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=0.6" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { - "mime-db": "^1.28.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, "license": "MIT", - "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "node_modules/decode-html": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decode-html/-/decode-html-2.0.0.tgz", + "integrity": "sha512-lVJ+EBozhAXA2nSQG+xAgcD0P5K3uejnIIvM09uoQfS8AALkQ+HhHcEUvKovXi0EIpIZWjm0y8X7ULjaJpgY9w==", "license": "MIT" }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.10" } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "license": "MIT", "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "license": "MIT", "dependencies": { - "is-descriptor": "^1.0.0" + "mimic-response": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "license": "MIT", "dependencies": { - "is-extendable": "^0.1.0" + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/decompress-tar/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" }, "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "node": ">=4" } }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "node_modules/falafel": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", - "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "license": "MIT", "dependencies": { - "acorn": "^7.1.1", - "isarray": "^2.0.1" + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=4" } }, - "node_modules/falafel/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/decompress-targz/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=4" } }, - "node_modules/falafel/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "node_modules/decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" }, "engines": { - "node": ">=8.6.0" + "node": ">=4" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "license": "MIT" - }, - "node_modules/fastestsmallesttextencoderdecoder": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", - "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==", - "license": "CC0-1.0" - }, - "node_modules/fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", - "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "license": "Apache-2.0", + "node_modules/decompress-unzip/node_modules/get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "license": "MIT", "dependencies": { - "websocket-driver": ">=0.5.1" + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, - "node_modules/fb-watchman": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.4.tgz", - "integrity": "sha512-tGQtaoYisPDriJBN0mT5yZSyNETnJGA1gTYxaVRAE5KUO3LI9kPUc9WIu8JXcxaIci+faIKlzXqXyPgrmubtBQ==", - "dev": true, + "node_modules/decompress-unzip/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "license": "MIT", - "dependencies": { - "bser": "2.1.2" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/decompress/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "license": "MIT", "dependencies": { - "pend": "~1.2.0" + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, + "node_modules/decompress/node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4" } }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "node_modules/decompress/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-equal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", "dev": true, "license": "MIT", "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.5.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/file-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT" + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "execa": "^1.0.0", + "ip-regex": "^2.1.0" }, "engines": { - "node": ">=8.9.0" + "node": ">=6" } }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/default-gateway/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/file-type": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", - "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=4.8" } }, - "node_modules/file-uri-to-path": { + "node_modules/default-gateway/node_modules/execa": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT", - "optional": true - }, - "node_modules/filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/filenamify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", - "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, "license": "MIT", "dependencies": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" + "path-key": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/default-gateway/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "node_modules/default-gateway/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/default-gateway/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "statuses": "~2.0.2", - "unpipe": "~1.0.0" + "shebang-regex": "^1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/default-gateway/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/default-gateway/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "license": "MIT", + "license": "ISC", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" + "isexe": "^2.0.0" }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "bin": { + "which": "bin/which" } }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true, - "license": "MIT" - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/findup": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", - "integrity": "sha512-Udxo3C9A6alt2GZ2MNsgnIvX7De0V3VGxeP/x98NSVgSlizcDHdmJza61LI7zJy4OEtSiJyE72s0/+tBl5/ZxA==", + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "license": "MIT", "dependencies": { - "colors": "~0.6.0-1", - "commander": "~2.1.0" - }, - "bin": { - "findup": "bin/findup.js" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "engines": { - "node": ">=0.6" + "node": ">=0.10.0" } }, - "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "license": "MIT", "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" }, "engines": { - "node": ">= 0.10" + "node": ">=6" } }, - "node_modules/findup-sync/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, "license": "MIT", "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "array-uniq": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", "dev": true, "license": "MIT", "dependencies": { - "is-extendable": "^0.1.0" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/findup-sync/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/del/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "license": "MIT", "dependencies": { - "is-extendable": "^0.1.0" - }, + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/findup-sync/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/diff": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-match-patch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz", + "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==", + "license": "Apache-2.0" + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "node_modules/findup-sync/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", + "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "license": "MIT", "dependencies": { - "kind-of": "^3.0.2" + "path-type": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "license": "MIT", "dependencies": { - "is-buffer": "^1.1.5" + "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/findup-sync/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", "dev": true, "license": "MIT", "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "buffer-indexof": "^1.0.0" } }, - "node_modules/findup-sync/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "esutils": "^2.0.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup/node_modules/commander": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ==", - "engines": { - "node": ">= 0.6.x" + "node": ">=6.0.0" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "utila": "~0.4" } }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", + "node_modules/dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@babel/runtime": "^7.1.2" } }, - "node_modules/flatted": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", - "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", - "dev": true, - "license": "ISC" + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "engines": { + "node": ">=0.4", + "npm": ">=1.2" } }, - "node_modules/follow-redirects": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.1.tgz", - "integrity": "sha512-FNvFGzoMLWmE6Yj9spb/zjd7yiNCHiAW9/Tg9CXrQ8wuu32HtlJOwWO11OJafl5FfY3DxTdQ0vj42zU1kvv5jg==", + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "type": "github", + "url": "https://github.com/sponsors/fb55" } ], + "license": "BSD-2-Clause" + }, + "node_modules/dompurify": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.17.tgz", + "integrity": "sha512-B/pSlYVHQ58kqISD/yDjuJ1yfzI34m1gF4lAod2bwSRhiN4K5Cl3H8Af7hqB2PmTL911tdEudnnXn5FnhRoz0w==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "node_modules/download": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", + "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", "license": "MIT", "dependencies": { - "is-callable": "^1.2.7" + "archive-type": "^4.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.2.1", + "ext-name": "^5.0.0", + "file-type": "^11.1.0", + "filenamify": "^3.0.0", + "get-stream": "^4.1.0", + "got": "^8.3.1", + "make-dir": "^2.1.0", + "p-event": "^2.1.0", + "pify": "^4.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "license": "Apache-2.0", - "engines": { - "node": "*" + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" } }, - "node_modules/form-data": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", - "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "license": "BSD-3-Clause" + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.4", - "mime-types": "^2.1.35" - }, - "engines": { - "node": ">= 6" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "node_modules/format-message": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/format-message/-/format-message-6.2.1.tgz", - "integrity": "sha512-6gBXI+MOE9pu9QNeZf95V87GKYiLCdUvhisjts75xonaPAshtBu20NTZt2l8kbYcoMtxNyH9E9af+aieIRfVmw==", + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "license": "MIT", "dependencies": { - "format-message-formats": "^6.2.0", - "format-message-interpret": "^6.2.0", - "format-message-parse": "^6.2.0", - "lookup-closest-locale": "^6.2.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/format-message-formats": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/format-message-formats/-/format-message-formats-6.2.4.tgz", - "integrity": "sha512-smT/fAqBLqusWfWCKRAx6QBDAAbmYznWsIyTyk66COmvwt2Byiqd7SJe2ma9a5oV0kwRaOJpN/F4lr4YK/n6qQ==", + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, "license": "MIT" }, - "node_modules/format-message-interpret": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/format-message-interpret/-/format-message-interpret-6.2.4.tgz", - "integrity": "sha512-dRvz9mXhITApyOtfuFEb/XqvCe1u6RMkQW49UJHXS8w2S8cAHCqq5LNDFK+QK6XVzcofROycLb/k1uybTAKt2w==", + "node_modules/electron-to-chromium": { + "version": "1.5.464", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.464.tgz", + "integrity": "sha512-nRa65aFge40viPAKxMKULIY8tcXKwKboJWNn4RoKwyWXJ6SP7BnrDGKUTzc64818jIciH0PK7LSF8QzZes19GA==", + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "license": "MIT", "dependencies": { - "format-message-formats": "^6.2.4", - "lookup-closest-locale": "^6.2.0" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/format-message-parse": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/format-message-parse/-/format-message-parse-6.2.4.tgz", - "integrity": "sha512-k7WqXkEzgXkW4wkHdS6Cv2Ou0rIFtiDelZjgoe1saW4p7FT7zS8OeAUpAekhormqzpeecR97e4vBft1zMsfFOQ==", + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.5", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.5.tgz", + "integrity": "sha512-3aRg6/JxfffFD+OlOjOFR3Vo79l39ooBTFucxx+MT3dhCtzn3EmiUPQo+6/OZuI2jbXi3YKgmiTFBgChQMwIRQ==", "license": "MIT" }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/email-addresses": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", + "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "license": "MIT" }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "license": "MIT", - "dependencies": { - "map-cache": "^0.2.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "once": "^1.4.0" } }, - "node_modules/from2-array": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/from2-array/-/from2-array-0.0.4.tgz", - "integrity": "sha512-0G0cAp7sYLobH7ALsr835x98PU/YeVF7wlwxdWbCUaea7wsa7lJfKZUAo6p2YZGZ8F94luCuqHZS3JtFER6uPg==", - "license": "MIT", + "node_modules/enhanced-resolve": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", + "integrity": "sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==", + "dev": true, "dependencies": { - "from2": "^2.0.3" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.2.0", + "tapable": "^0.1.8" + }, + "engines": { + "node": ">=0.6" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "prr": "~1.0.1" }, - "engines": { - "node": ">=6 <7 || >=8" + "bin": { + "errno": "cli.js" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" + "is-arrayish": "^0.2.1" } }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "license": "MIT" - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "deprecated": "This package is no longer supported.", + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract-get": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz", + "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.2", + "is-callable": "^1.2.7", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs.realpath": { + "node_modules/es-array-method-boxes-properly": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true, + "license": "MIT" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">= 0.4" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, - "node_modules/function.prototype.name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz", - "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==", + "node_modules/es-iterator-helpers": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz", + "integrity": "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", - "es-define-property": "^1.0.1", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "hasown": "^2.0.4", - "is-callable": "^1.2.7", - "is-document.all": "^1.0.0" + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/generator-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, "engines": { "node": ">= 0.4" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">= 0.4" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/es-to-primitive": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz", + "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==", "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-float-time-domain-data": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-float-time-domain-data/-/get-float-time-domain-data-0.1.0.tgz", - "integrity": "sha512-6lWdVMny7vJ+xWxGUmVdSW7rd4L2byptiVkjH3QEBsxcHSa8UbC/HsZmixHK/ZQ1EYsOaQjaeRgR+NAsIerEJQ==", - "license": "MIT" - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", + "es-abstract-get": "^1.0.0", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "is-callable": "^1.2.7", + "is-date-object": "^1.1.0", + "is-symbol": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -10234,288 +6250,428 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">=0.8.0" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/escodegen": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "license": "MIT", "dependencies": { - "pump": "^3.0.0" + "prelude-ls": "~1.1.2" }, "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "node_modules/eslint": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "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.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-user-media-promise": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/get-user-media-promise/-/get-user-media-promise-1.1.4.tgz", - "integrity": "sha512-k49YuV2z0d3gKHLPTFKYfzEA9kduuQk7YBf8ev2dxrKk+DhMyuzfQnK9ZSxkEhE/jv3BZY62M0eICWa7lak9nw==", - "license": "Apache-2.0" - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "url": "https://opencollective.com/eslint" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" + "node_modules/eslint-config-scratch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-scratch/-/eslint-config-scratch-9.0.3.tgz", + "integrity": "sha512-BSMx4Y6V7IjDW/thMXLAYTxKvjeI4M8RtHmbpUbx3N70CZV4armoA9zJ7RmER1hjV5KQebCVQy45A2xMj2Ng8w==", + "dev": true, + "license": "BSD-3-Clause", + "optionalDependencies": { + "eslint-plugin-react": ">=7.27.0" + }, + "peerDependencies": { + "@babel/eslint-parser": "^7.11.0", + "eslint": "^8.0.0" } }, - "node_modules/gh-pages": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz", - "integrity": "sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", "dev": true, "license": "MIT", "dependencies": { - "async": "^2.6.1", - "commander": "^2.18.0", - "email-addresses": "^3.0.1", - "filenamify": "^4.3.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "^8.1.0", - "globby": "^6.1.0" - }, - "bin": { - "gh-pages": "bin/gh-pages.js", - "gh-pages-clean": "bin/gh-pages-clean.js" - }, - "engines": { - "node": ">=10" + "debug": "^3.2.7", + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.6" } }, - "node_modules/gh-pages/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "ms": "^2.1.1" } }, - "node_modules/gh-pages/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/gh-pages/node_modules/filenamify": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", - "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "2.0.0-next.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", + "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", "dev": true, "license": "MIT", "dependencies": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" + "es-errors": "^1.3.0", + "is-core-module": "^2.16.2", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gh-pages/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "node_modules/eslint-import-resolver-webpack": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.11.1.tgz", + "integrity": "sha512-eK3zR7xVQR/MaoBWwGuD+CULYVuqe5QFlDukman71aI6IboCGzggDUohHNfu1ZeBnbHcUHJc0ywWoXUBNB6qdg==", "dev": true, "license": "MIT", "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "array-find": "^1.0.0", + "debug": "^2.6.8", + "enhanced-resolve": "~0.9.0", + "find-root": "^1.1.0", + "has": "^1.0.1", + "interpret": "^1.0.0", + "lodash": "^4.17.4", + "node-libs-browser": "^1.0.0 || ^2.0.0", + "resolve": "^1.10.0", + "semver": "^5.3.0" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "eslint-plugin-import": ">=1.4.0", + "webpack": ">=1.11.0" } }, - "node_modules/gh-pages/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/eslint-import-resolver-webpack/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "node_modules/eslint-import-resolver-webpack/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-import-resolver-webpack/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "semver": "bin/semver" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", + "node_modules/eslint-module-utils": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.14.0.tgz", + "integrity": "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==", + "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "debug": "^3.2.7" }, "engines": { - "node": ">= 6" + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha512-/4AybdwIDU4HkCUbJkZdWpe4P6vuw/CUtu+0I1YlLIPe7OlUO7KNJ+q/rO70CW2/NW6Jc6I62++Hzsf5Alu6rQ==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "license": "MIT", "dependencies": { - "min-document": "^2.19.0", - "process": "~0.5.1" + "ms": "^2.1.1" } }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "license": "MIT", "dependencies": { - "global-prefix": "^3.0.0" + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "engines": { - "node": ">=6" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" + "ms": "^2.1.1" } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "isexe": "^2.0.0" + "esutils": "^2.0.2" }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/global/node_modules/process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha512-oNpcutj+nYX2FjdEW7PGltWhXulAnFlM0My/k48L90hARCOJtvBbQXc/6itV2jDvU5xAAtonP+r6wmQgCcbAUA==", "engines": { - "node": ">= 0.6.0" + "node": ">=0.10.0" } }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" }, "engines": { - "node": ">=8" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz", + "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "es-errors": "^1.3.0", + "is-core-module": "^2.16.2", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "engines": { "node": ">= 0.4" @@ -10524,1435 +6680,1420 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "license": "MIT", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/got/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/got/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/grapheme-breaker": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz", - "integrity": "sha512-mB6rwkw1Z7z4z2RkFFTd/+q6Ug1gnCgjKAervAKgBeNI1mSr8E5EUWoYzFNOZsLHFArLfpk+O8X8qXC7uvuawQ==", - "license": "MIT", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "brfs": "^1.2.0", - "unicode-trie": "^0.3.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "MIT" - }, - "node_modules/growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">=4.x" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT" - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 0.4.0" + "node": ">=8" } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "license": "MIT", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "ansi-regex": "^2.0.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", + "node_modules/esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "es-define-property": "^1.0.0" + "estraverse": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10" } }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", "dependencies": { - "dunder-proto": "^1.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" } }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "node_modules/eventsource": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", + "dev": true, "license": "MIT", "engines": { - "node": "*" + "node": ">=12.0.0" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "node_modules/exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==", + "license": "BSD-3-Clause" + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", "license": "MIT", "dependencies": { - "has-symbol-support-x": "^1.4.1" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ms": "2.0.0" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "license": "MIT", "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "license": "MIT", "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.8.tgz", + "integrity": "sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ==", "license": "MIT", "dependencies": { - "kind-of": "^3.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, "license": "MIT", "dependencies": { - "is-buffer": "^1.1.5" + "homedir-polyfill": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "node_modules/exports-loader": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.7.0.tgz", + "integrity": "sha512-RKwCrO4A6IiKm0pG3c9V46JxIHcDplwwGJn6+JJ1RcVnh/WSGJa0xkmk5cRVtgOPzCAtTMGj2F7nluh9L0vpSA==", "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" + "loader-utils": "^1.1.0", + "source-map": "0.5.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 4" } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "node_modules/exports-loader/node_modules/source-map": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.0.tgz", + "integrity": "sha512-gjGnxNN0K+/Pr4Mi4fs/pOtda10dKB6Wn9QvjOrH6v5TWsI7ghHuJUHoIgyM6DkUL5kr2GtPFGererzKpMBWfA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/hasown": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", - "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "node_modules/express": { + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.3.tgz", + "integrity": "sha512-Bdcs4+3qlpVlx2NRn6fgX2Ue2/gGRaPeawebgclM0ERSCqDpA+owF1fdPwjJUTAJWMTuAaxjDf+hzb0/4eKvvw==", + "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.5", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.13", + "proxy-addr": "~2.0.7", + "qs": "~6.16.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "license": "MIT", - "bin": { - "he": "bin/he" + "engines": { + "node": ">= 0.6" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "license": "MIT", "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "ms": "2.0.0" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/qs": { + "version": "6.16.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.1.tgz", + "integrity": "sha512-5Px6J7rfHBAGUhNQ3es4YzcOdBBw0SDcVtThJml4RdnKw4tKs2epA0kPZ+K8X+WiHktT93RHVcQ/3ym5aTCgtg==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { - "react-is": "^16.7.0" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", "license": "MIT", "dependencies": { - "parse-passwd": "^1.0.0" + "mime-db": "^1.28.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "license": "ISC" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/html-element-map": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.4.1.tgz", - "integrity": "sha512-D+8Bp441S8PgDebxxF9jNZ9odEtaX13Mu1vgTvTe8yWRrCFEhyn5m8wzB0uF7u0KOwIRAn66+Zx3wXDYqjL1yw==", - "dev": true, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "license": "MIT", "dependencies": { - "array.prototype.filter": "^1.0.4", - "es-errors": "^1.3.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "license": "MIT", "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", - "dev": true, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "license": "MIT", "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=6.9" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "node": ">=0.10.0" } }, - "node_modules/html-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/htmlparser2": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", - "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" ], + "license": "MIT" + }, + "node_modules/falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "entities": "^7.0.1" + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" + "node_modules/falafel/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "license": "BSD-2-Clause" + "node_modules/falafel/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=8.6.0" } }, - "node_modules/http-parser-js": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", - "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", - "dev": true, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT" + }, + "node_modules/fastestsmallesttextencoderdecoder": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz", + "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==", + "license": "CC0-1.0" + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "license": "MIT" }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/fastq": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", + "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.8.0" } }, - "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "license": "MIT", "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" + "pend": "~1.2.0" } }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "license": "MIT", "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=0.10.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "dev": true, "license": "MIT", "dependencies": { - "is-extendable": "^0.1.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/file-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "license": "MIT", "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.9.0" } }, - "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "license": "MIT", "dependencies": { - "is-extendable": "^0.1.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/http-proxy-middleware/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, + "node_modules/file-type": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT", + "optional": true + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, + "node_modules/filenamify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", + "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", "license": "MIT", "dependencies": { - "is-buffer": "^1.1.5" + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/http-proxy-middleware/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "dev": true, "license": "MIT", "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "ms": "2.0.0" } }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, "license": "MIT" }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { - "node": ">= 6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, "engines": { - "node": ">=10.17.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hyphenate-style-name": { + "node_modules/find-root": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", - "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true, + "license": "MIT" }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", - "license": "ISC" - }, - "node_modules/icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha512-bsVoyn/1V4R1kYYjLcWLedozAM4FClZUdjE9nIr8uWY7xs78y9DATgwz2wGU7M+7z55KenmmTkN2DVJ7bqzjAA==", - "license": "ISC", - "dependencies": { - "postcss": "^6.0.1" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/icss-utils/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", + "node_modules/findup": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", + "integrity": "sha512-Udxo3C9A6alt2GZ2MNsgnIvX7De0V3VGxeP/x98NSVgSlizcDHdmJza61LI7zJy4OEtSiJyE72s0/+tBl5/ZxA==", "dependencies": { - "color-convert": "^1.9.0" + "colors": "~0.6.0-1", + "commander": "~2.1.0" + }, + "bin": { + "findup": "bin/findup.js" }, "engines": { - "node": ">=4" + "node": ">=0.6" } }, - "node_modules/icss-utils/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/icss-utils/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/findup-sync/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, "license": "MIT", "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/icss-utils/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/icss-utils/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/icss-utils/node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, "license": "MIT", "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "node_modules/icss-utils/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/findup-sync/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", + "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT" - }, - "node_modules/ify-loader": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ify-loader/-/ify-loader-1.0.4.tgz", - "integrity": "sha512-fzWOWwsTZH3c2GPNJy1dndN5lk+oyXGPbg9YrHv/UwC/SmlxNEUAst6evF1H9ySGbezgBA42YGLSr1WzAwgx9w==", "license": "MIT", "dependencies": { - "bl": "^1.0.0", - "findup": "^0.1.5", - "from2-array": "0.0.4", - "map-limit": "0.0.1", - "multipipe": "^0.3.0", - "read-package-json": "^2.0.2", - "resolve": "^1.1.6" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", + "is-extendable": "^0.1.0" + }, "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "license": "MIT" - }, - "node_modules/import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", + "node_modules/findup-sync/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, "license": "MIT", - "dependencies": { - "import-from": "^2.1.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "node_modules/findup-sync/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "kind-of": "^3.0.2" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", + "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, "license": "MIT", "dependencies": { - "resolve-from": "^3.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=4" - } - }, - "node_modules/import-from/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "license": "MIT", - "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "node_modules/findup-sync/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/imports-loader": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.8.0.tgz", - "integrity": "sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ==", + "node_modules/findup-sync/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, "license": "MIT", "dependencies": { - "loader-utils": "^1.0.2", - "source-map": "^0.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", + "node_modules/findup/node_modules/commander": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ==", "engines": { - "node": ">=0.8.19" + "node": ">= 0.6.x" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=8" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "license": "ISC" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, "license": "ISC", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "node_modules/flatted": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", "dev": true, "license": "ISC" }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "license": "MIT", "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "node_modules/follow-redirects": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.1.tgz", + "integrity": "sha512-FNvFGzoMLWmE6Yj9spb/zjd7yiNCHiAW9/Tg9CXrQ8wuu32HtlJOwWO11OJafl5FfY3DxTdQ0vj42zU1kvv5jg==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "license": "MIT", "engines": { - "node": ">= 0.10" - } - }, - "node_modules/intl": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz", - "integrity": "sha512-rK0KcPHeBFBcqsErKSpvZnrOmWOj+EmDkyJ57e90YWaQNqbcivcqmKDlHEeNprDWOsKzPsh1BfSpPQdDvclHVw==", - "license": "MIT" - }, - "node_modules/intl-format-cache": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/intl-format-cache/-/intl-format-cache-2.2.9.tgz", - "integrity": "sha512-Zv/u8wRpekckv0cLkwpVdABYST4hZNTDaX7reFetrYTJwxExR2VyTqQm+l0WmL0Qo8Mjb9Tf33qnfj0T7pjxdQ==", - "license": "BSD-3-Clause" - }, - "node_modules/intl-messageformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz", - "integrity": "sha512-I+tSvHnXqJYjDfNmY95tpFMj30yoakC6OXAo+wu/wTMy6tA/4Fd4mvV7Uzs4cqK/Ap29sHhwjcY+78a8eifcXw==", - "license": "BSD-3-Clause", - "dependencies": { - "intl-messageformat-parser": "1.4.0" - } - }, - "node_modules/intl-messageformat-parser": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.8.1.tgz", - "integrity": "sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg==", - "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser", - "license": "BSD-3-Clause" - }, - "node_modules/intl-messageformat/node_modules/intl-messageformat-parser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz", - "integrity": "sha512-/XkqFHKezO6UcF4Av2/Lzfrez18R0jyw7kRFhSeB/YRakdrgSc9QfFZUwNJI9swMwMoNPygK1ArC5wdFSjPw+A==", - "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser", - "license": "BSD-3-Clause" - }, - "node_modules/intl-relativeformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/intl-relativeformat/-/intl-relativeformat-2.2.0.tgz", - "integrity": "sha512-4bV/7kSKaPEmu6ArxXf9xjv1ny74Zkwuey8Pm01NH4zggPP7JHwg2STk8Y3JdspCKRDriwIyLRfEXnj2ZLr4Bw==", - "deprecated": "This package has been deprecated, please see migration guide at 'https://github.com/formatjs/formatjs/tree/master/packages/intl-relativeformat#migration-guide'", - "license": "BSD-3-Clause", - "dependencies": { - "intl-messageformat": "^2.0.0" + "node": ">=0.10.0" } }, - "node_modules/into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", - "license": "MIT", - "dependencies": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "node_modules/format-message": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/format-message/-/format-message-6.2.1.tgz", + "integrity": "sha512-6gBXI+MOE9pu9QNeZf95V87GKYiLCdUvhisjts75xonaPAshtBu20NTZt2l8kbYcoMtxNyH9E9af+aieIRfVmw==", "license": "MIT", "dependencies": { - "loose-envify": "^1.0.0" + "format-message-formats": "^6.2.0", + "format-message-interpret": "^6.2.0", + "format-message-parse": "^6.2.0", + "lookup-closest-locale": "^6.2.0" } }, - "node_modules/ip": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", - "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==", - "dev": true, + "node_modules/format-message-formats": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/format-message-formats/-/format-message-formats-6.2.4.tgz", + "integrity": "sha512-smT/fAqBLqusWfWCKRAx6QBDAAbmYznWsIyTyk66COmvwt2Byiqd7SJe2ma9a5oV0kwRaOJpN/F4lr4YK/n6qQ==", "license": "MIT" }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "dev": true, + "node_modules/format-message-interpret": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/format-message-interpret/-/format-message-interpret-6.2.4.tgz", + "integrity": "sha512-dRvz9mXhITApyOtfuFEb/XqvCe1u6RMkQW49UJHXS8w2S8cAHCqq5LNDFK+QK6XVzcofROycLb/k1uybTAKt2w==", "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "format-message-formats": "^6.2.4", + "lookup-closest-locale": "^6.2.0" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } + "node_modules/format-message-parse": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/format-message-parse/-/format-message-parse-6.2.4.tgz", + "integrity": "sha512-k7WqXkEzgXkW4wkHdS6Cv2Ou0rIFtiDelZjgoe1saW4p7FT7zS8OeAUpAekhormqzpeecR97e4vBft1zMsfFOQ==", + "license": "MIT" }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.2.tgz", - "integrity": "sha512-AIbwAcazqP3R65dGvqk1V+a+vE5Fg1yu/ZKMOiBWSUIXXiwQkYmXQcVa2O0nh0tSDKDFKxG2mY7dB1Sr4hEP1g==", + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", "license": "MIT", "dependencies": { - "hasown": "^2.0.3" + "map-cache": "^0.2.2" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, + "node_modules/from2-array": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/from2-array/-/from2-array-0.0.4.tgz", + "integrity": "sha512-0G0cAp7sYLobH7ALsr835x98PU/YeVF7wlwxdWbCUaea7wsa7lJfKZUAo6p2YZGZ8F94luCuqHZS3JtFER6uPg==", "license": "MIT", "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "from2": "^2.0.3" } }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "license": "MIT", "dependencies": { - "has-bigints": "^1.0.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6 <7 || >=8" } }, - "node_modules/is-binary-path": { + "node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "optional": true, + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", "dependencies": { - "binary-extensions": "^2.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "license": "MIT" + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "deprecated": "This package is no longer supported.", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "license": "MIT" + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/is-core-module": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.17.0.tgz", - "integrity": "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", - "dependencies": { - "hasown": "^2.0.4" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "node_modules/function.prototype.name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz", + "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2", + "hasown": "^2.0.4", + "is-callable": "^1.2.7", + "is-document.all": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11961,53 +8102,67 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-descriptor": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.4.tgz", - "integrity": "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww==", + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.2", - "is-data-descriptor": "^1.0.1" - }, "engines": { "node": ">= 0.4" } }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/is-document.all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz", - "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-float-time-domain-data": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-float-time-domain-data/-/get-float-time-domain-data-0.1.0.tgz", + "integrity": "sha512-6lWdVMny7vJ+xWxGUmVdSW7rd4L2byptiVkjH3QEBsxcHSa8UbC/HsZmixHK/ZQ1EYsOaQjaeRgR+NAsIerEJQ==", + "license": "MIT" + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.4" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -12016,35 +8171,41 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-extendable": { + "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { - "is-plain-object": "^2.0.4" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -12053,215 +8214,235 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, + "node_modules/get-user-media-promise": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/get-user-media-promise/-/get-user-media-promise-1.1.4.tgz", + "integrity": "sha512-k49YuV2z0d3gKHLPTFKYfzEA9kduuQk7YBf8ev2dxrKk+DhMyuzfQnK9ZSxkEhE/jv3BZY62M0eICWa7lak9nw==", + "license": "Apache-2.0" + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "license": "MIT" - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "assert-plus": "^1.0.0" } }, - "node_modules/is-generator-function": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "node_modules/gh-pages": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz", + "integrity": "sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" + "async": "^2.6.1", + "commander": "^2.18.0", + "email-addresses": "^3.0.1", + "filenamify": "^4.3.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "^8.1.0", + "globby": "^6.1.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "gh-pages": "bin/gh-pages.js", + "gh-pages-clean": "bin/gh-pages-clean.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/gh-pages/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "array-uniq": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==", + "node_modules/gh-pages/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, "license": "MIT" }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "node_modules/gh-pages/node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", "dev": true, "license": "MIT", + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", - "license": "MIT" - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "node_modules/gh-pages/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/gh-pages/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">=0.10.0" } }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true, + "node_modules/global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha512-/4AybdwIDU4HkCUbJkZdWpe4P6vuw/CUtu+0I1YlLIPe7OlUO7KNJ+q/rO70CW2/NW6Jc6I62++Hzsf5Alu6rQ==", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "min-document": "^2.19.0", + "process": "~0.5.1" } }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "license": "MIT", "dependencies": { - "is-path-inside": "^2.1.0" + "global-prefix": "^3.0.0" }, "engines": { "node": ">=6" } }, - "node_modules/is-path-in-cwd/node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, "license": "MIT", "dependencies": { - "path-is-inside": "^1.0.2" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { "node": ">=6" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "license": "MIT", + "node_modules/global/node_modules/process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha512-oNpcutj+nYX2FjdEW7PGltWhXulAnFlM0My/k48L90hARCOJtvBbQXc/6itV2jDvU5xAAtonP+r6wmQgCcbAUA==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6.0" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "license": "MIT", "dependencies": { - "isobject": "^3.0.1" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -12270,20 +8451,39 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, + "node_modules/globby/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -12292,140 +8492,141 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, + "node_modules/got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "node_modules/got/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, + "node_modules/got/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/grapheme-breaker": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz", + "integrity": "sha512-mB6rwkw1Z7z4z2RkFFTd/+q6Ug1gnCgjKAervAKgBeNI1mSr8E5EUWoYzFNOZsLHFArLfpk+O8X8qXC7uvuawQ==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, + "brfs": "^1.2.0", + "unicode-trie": "^0.3.1" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.x" } }, - "node_modules/is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==", + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true, "license": "MIT" }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.16" + "ajv": "^6.12.3", + "har-schema": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.4.0" } }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, "engines": { "node": ">= 0.4" }, @@ -12433,1905 +8634,1660 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/is2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.1.tgz", - "integrity": "sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==", - "dev": true, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { - "deep-is": "^0.1.3", - "ip-regex": "^2.1.0", - "is-url": "^1.2.2" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">=v0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "license": "MIT" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "dunder-proto": "^1.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": ">= 0.4" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "license": "MIT", "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "has-symbol-support-x": "^1.4.1" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "license": "MIT", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/isurl": { + "node_modules/has-values": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", "license": "MIT", "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "license": "MIT", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" + "is-buffer": "^1.1.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", "license": "MIT", "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/hash-base": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.10" } }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-circus/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "bin": { + "he": "bin/he" } }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "license": "MIT", + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "react-is": "^16.7.0" } }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "parse-passwd": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "license": "ISC" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=6" } }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "node_modules/html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/html-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=8.0.0" } }, - "node_modules/jest-config/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dev": true, "license": "MIT", + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/http-proxy-middleware/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/http-proxy-middleware/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/http-proxy-middleware/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "kind-of": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "license": "MIT", "dependencies": { - "detect-newline": "^3.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/http-proxy-middleware/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "license": "MIT" + }, + "node_modules/hyphenate-style-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", + "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==", + "license": "BSD-3-Clause" + }, + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", + "license": "ISC" + }, + "node_modules/icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha512-bsVoyn/1V4R1kYYjLcWLedozAM4FClZUdjE9nIr8uWY7xs78y9DATgwz2wGU7M+7z55KenmmTkN2DVJ7bqzjAA==", + "license": "ISC", + "dependencies": { + "postcss": "^6.0.1" } }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/icss-utils/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" } }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/icss-utils/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, + "node_modules/icss-utils/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "color-name": "1.1.3" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "node_modules/icss-utils/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, + "node_modules/icss-utils/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": ">=4" } }, - "node_modules/jest-junit": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-7.0.0.tgz", - "integrity": "sha512-ljUdO0hLyu0A92xk7R2Wet3kj99fmazTo+ZFYQP6b7AGOBxJUj8ZkJWzJ632ajpXko2Y5oNoGR2kvOwiDdu6hg==", - "dev": true, - "license": "Apache-2.0", + "node_modules/icss-utils/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "license": "MIT", "dependencies": { - "jest-validate": "^24.0.0", - "mkdirp": "^0.5.1", - "strip-ansi": "^4.0.0", - "xml": "^1.0.1" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=4.0.0" } }, - "node_modules/jest-junit/node_modules/@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, + "node_modules/icss-utils/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "license": "MIT", "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/jest-junit/node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, - "node_modules/jest-junit/node_modules/@types/yargs": { - "version": "13.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", - "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", "dev": true, + "license": "MIT" + }, + "node_modules/ify-loader": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ify-loader/-/ify-loader-1.0.4.tgz", + "integrity": "sha512-fzWOWwsTZH3c2GPNJy1dndN5lk+oyXGPbg9YrHv/UwC/SmlxNEUAst6evF1H9ySGbezgBA42YGLSr1WzAwgx9w==", "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "bl": "^1.0.0", + "findup": "^0.1.5", + "from2-array": "0.0.4", + "map-limit": "0.0.1", + "multipipe": "^0.3.0", + "read-package-json": "^2.0.2", + "resolve": "^1.1.6" } }, - "node_modules/jest-junit/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 4" } }, - "node_modules/jest-junit/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "import-from": "^2.1.0" }, "engines": { "node": ">=4" } }, - "node_modules/jest-junit/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-junit/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "node_modules/import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/jest-junit/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-junit/node_modules/has-flag": { + "node_modules/import-from/node_modules/resolve-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/jest-junit/node_modules/jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "dev": true, + "node_modules/imports-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.8.0.tgz", + "integrity": "sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ==", "license": "MIT", + "dependencies": { + "loader-utils": "^1.0.2", + "source-map": "^0.6.1" + }, "engines": { - "node": ">= 6" + "node": ">= 4" } }, - "node_modules/jest-junit/node_modules/jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "dev": true, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "license": "MIT", - "dependencies": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - }, "engines": { - "node": ">= 6" + "node": ">=0.8.19" } }, - "node_modules/jest-junit/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/jest-junit/node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" }, "engines": { - "node": ">= 6" + "node": ">=6" } }, - "node_modules/jest-junit/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^3.0.0" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/jest-junit/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/jest-junit/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", + "node_modules/intl": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz", + "integrity": "sha512-rK0KcPHeBFBcqsErKSpvZnrOmWOj+EmDkyJ57e90YWaQNqbcivcqmKDlHEeNprDWOsKzPsh1BfSpPQdDvclHVw==", + "license": "MIT" + }, + "node_modules/intl-format-cache": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/intl-format-cache/-/intl-format-cache-2.2.9.tgz", + "integrity": "sha512-Zv/u8wRpekckv0cLkwpVdABYST4hZNTDaX7reFetrYTJwxExR2VyTqQm+l0WmL0Qo8Mjb9Tf33qnfj0T7pjxdQ==", + "license": "BSD-3-Clause" + }, + "node_modules/intl-messageformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz", + "integrity": "sha512-I+tSvHnXqJYjDfNmY95tpFMj30yoakC6OXAo+wu/wTMy6tA/4Fd4mvV7Uzs4cqK/Ap29sHhwjcY+78a8eifcXw==", + "license": "BSD-3-Clause", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "intl-messageformat-parser": "1.4.0" } }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "license": "MIT", + "node_modules/intl-messageformat-parser": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.8.1.tgz", + "integrity": "sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg==", + "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser", + "license": "BSD-3-Clause" + }, + "node_modules/intl-messageformat/node_modules/intl-messageformat-parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz", + "integrity": "sha512-/XkqFHKezO6UcF4Av2/Lzfrez18R0jyw7kRFhSeB/YRakdrgSc9QfFZUwNJI9swMwMoNPygK1ArC5wdFSjPw+A==", + "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser", + "license": "BSD-3-Clause" + }, + "node_modules/intl-relativeformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/intl-relativeformat/-/intl-relativeformat-2.2.0.tgz", + "integrity": "sha512-4bV/7kSKaPEmu6ArxXf9xjv1ny74Zkwuey8Pm01NH4zggPP7JHwg2STk8Y3JdspCKRDriwIyLRfEXnj2ZLr4Bw==", + "deprecated": "This package has been deprecated, please see migration guide at 'https://github.com/formatjs/formatjs/tree/master/packages/intl-relativeformat#migration-guide'", + "license": "BSD-3-Clause", "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "intl-messageformat": "^2.0.0" } }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, + "node_modules/into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "loose-envify": "^1.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/ip": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", + "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.10" } }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, + "node_modules/is-accessor-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.2.tgz", + "integrity": "sha512-AIbwAcazqP3R65dGvqk1V+a+vE5Fg1yu/ZKMOiBWSUIXXiwQkYmXQcVa2O0nh0tSDKDFKxG2mY7dB1Sr4hEP1g==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "hasown": "^2.0.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "has-bigints": "^1.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "license": "MIT", + "optional": true, "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/is-core-module": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.17.0.tgz", + "integrity": "sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "hasown": "^2.0.4" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "hasown": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/is-descriptor": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.4.tgz", + "integrity": "sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "is-accessor-descriptor": "^1.0.2", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-document.all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz", + "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "call-bound": "^1.0.4" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "is-plain-object": "^2.0.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "license": "MIT" + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/is-in-browser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", + "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==", + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", + "license": "MIT" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.12.0" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=6" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "is-path-inside": "^2.1.0" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/is-path-in-cwd/node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "path-is-inside": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "isobject": "^3.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "which-typed-array": "^1.1.16" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 4" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">= 0.4" } }, "node_modules/js-base64": { @@ -14489,19 +10445,6 @@ "node": ">=4.0" } }, - "node_modules/jszip": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.2.tgz", - "integrity": "sha512-3l+rb15IOWtUhU0H5MFqES/T6Kh7abYwjosBey/vD6hDt8zoEffkSC5Ws5SGtgVw3gBx2NEbhTeSW1+kWkpyTQ==", - "dev": true, - "license": "(MIT OR GPL-3.0-or-later)", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, "node_modules/keymirror": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/keymirror/-/keymirror-0.1.1.tgz", @@ -14533,26 +10476,6 @@ "node": ">=0.10.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -14596,13 +10519,6 @@ "node": ">= 0.4" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, "node_modules/loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -14690,35 +10606,6 @@ "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", "license": "MIT" }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -14742,13 +10629,6 @@ "lodash.debounce": "^4.0.0" } }, - "node_modules/lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg==", - "dev": true, - "license": "MIT" - }, "node_modules/loglevel": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", @@ -14840,16 +10720,6 @@ "semver": "bin/semver" } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -15069,16 +10939,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -15389,13 +11249,6 @@ "node": ">=4" } }, - "node_modules/moo": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.3.tgz", - "integrity": "sha512-m2fmM2dDm7GZQsY7KK2cme8agi+AAljILjQnof7p1ZMDe6dQ4bdnSMx0cPppudoeNv5hEFQirN6u+O4fDE0IWA==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -15497,36 +11350,6 @@ "dev": true, "license": "MIT" }, - "node_modules/nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - }, - "bin": { - "nearley-railroad": "bin/nearley-railroad.js", - "nearley-test": "bin/nearley-test.js", - "nearley-unparse": "bin/nearley-unparse.js", - "nearleyc": "bin/nearleyc.js" - }, - "funding": { - "type": "individual", - "url": "https://nearley.js.org/#give-to-nearley" - } - }, - "node_modules/nearley/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, "node_modules/negotiator": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", @@ -15610,13 +11433,6 @@ "node": ">= 6.0.0" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "license": "MIT" - }, "node_modules/node-libs-browser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", @@ -15716,19 +11532,6 @@ "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "license": "ISC" }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -16057,22 +11860,6 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/opn": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", @@ -16110,16 +11897,6 @@ "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "license": "MIT" }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/own-keys": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz", @@ -16337,86 +12114,14 @@ "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==", "license": "MIT" }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-parser-stream": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", - "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=0.10.0" } }, "node_modules/parseurl": { @@ -16597,16 +12302,6 @@ "node": ">=0.10.0" } }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -17188,41 +12883,6 @@ "renderkid": "^2.0.4" } }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -17244,20 +12904,6 @@ "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "license": "ISC" }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -17269,34 +12915,6 @@ "react-is": "^16.13.1" } }, - "node_modules/prop-types-exact": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.7.tgz", - "integrity": "sha512-A4RaV6mg3jocQqBYmqi2ojJ2VnV4AKTEHhl3xHsud08/u87gcVJc8DUOtgnPegoOCQv/shUqEk4eZGYibjnHzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "isarray": "^2.0.5", - "object.assign": "^4.1.7", - "own-keys": "^1.0.0" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/prop-types-exact/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, "node_modules/proxy-addr": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz", @@ -17315,13 +12933,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "license": "MIT" - }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -17415,23 +13026,6 @@ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "license": "MIT" }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, "node_modules/qs": { "version": "6.5.5", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.5.tgz", @@ -17504,37 +13098,6 @@ "quote-stream": "bin/cmd.js" } }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, - "license": "MIT", - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -17841,22 +13404,6 @@ "react": "^0.14.9 || ^15.3.0 || ^16.0.0" } }, - "node_modules/react-test-renderer": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz", - "integrity": "sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "react-is": "^16.8.6", - "scheduler": "^0.19.1" - }, - "peerDependencies": { - "react": "^16.14.0" - } - }, "node_modules/react-tooltip": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-3.8.0.tgz", @@ -17966,16 +13513,6 @@ "symbol-observable": "^1.0.3" } }, - "node_modules/redux-mock-store": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/redux-mock-store/-/redux-mock-store-1.5.3.tgz", - "integrity": "sha512-ryhkkb/4D4CUGpAV2ln1GOY/uh51aczjcRz9k2L2bPx/Xja3c5pSGJJPyR25GNVRXtKIExScdAgFdiXp68GmJA==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash.isplainobject": "^4.0.6" - } - }, "node_modules/redux-throttle": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/redux-throttle/-/redux-throttle-0.1.1.tgz", @@ -18349,29 +13886,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", @@ -18448,16 +13962,6 @@ "deprecated": "https://github.com/lydell/resolve-url#deprecated", "license": "MIT" }, - "node_modules/resolve.exports": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.4.tgz", - "integrity": "sha512-zepuGL0ulf+nt+XaFrlKeaiTJeyPFPLLY62+ncq1/VTHBdt3HsfXOH60priZ6tnXQozdGcDeIF5JVTanvIcYWQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", @@ -18538,17 +14042,6 @@ "node": ">= 0.8" } }, - "node_modules/rst-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "lodash.flattendeep": "^4.4.0", - "nearley": "^2.7.10" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -18686,16 +14179,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, - "node_modules/sax": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", - "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=11.0.0" - } - }, "node_modules/scheduler": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", @@ -19067,22 +14550,6 @@ "dev": true, "license": "MIT" }, - "node_modules/selenium-webdriver": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", - "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jszip": "^3.1.3", - "rimraf": "^2.5.4", - "tmp": "0.0.30", - "xml2js": "^0.4.17" - }, - "engines": { - "node": ">= 6.9.0" - } - }, "node_modules/selfsigned": { "version": "1.10.14", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", @@ -19532,13 +14999,6 @@ "dev": true, "license": "ISC" }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, "node_modules/slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", @@ -19946,29 +15406,6 @@ "node": ">= 8" } }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/static-eval": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", @@ -20125,121 +15562,46 @@ "dev": true, "license": "MIT", "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "license": "MIT", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", "dev": true, + "license": "MIT" + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" + "safe-buffer": "~5.2.0" } }, "node_modules/string.prototype.matchall": { @@ -20342,16 +15704,6 @@ "node": ">=0.10.0" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-dirs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", @@ -20371,16 +15723,6 @@ "node": ">=0.10.0" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -20524,42 +15866,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "license": "ISC" }, - "node_modules/tcp-port-used": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.3.tgz", - "integrity": "sha512-4CEQ3qRJYo+mtEbJ+OoQu3dF4TDkwaO3RDVC4UzP5cpAOIUWwuwPjD7sdxDFFqsMUjsXVVYBMlg/boAaloThMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4.3.1", - "is2": "2.0.1" - } - }, - "node_modules/tcp-port-used/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/tcp-port-used/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "license": "MIT" - }, "node_modules/terser": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", @@ -20690,21 +15996,6 @@ "dev": true, "license": "MIT" }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/text-encoding": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", @@ -20769,26 +16060,6 @@ "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", "license": "MIT" }, - "node_modules/tmp": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", - "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -21039,16 +16310,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -21501,16 +16762,6 @@ "ieee754": "^1.1.13" } }, - "node_modules/undici": { - "version": "7.30.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.30.1.tgz", - "integrity": "sha512-03KrMbjIFDWQR5RNPrSw3bd1r12JpyFQl9/yxjUbJtqkjmllqC5lFjZh6ujeuJCKr8EOQvRW872Oy/az+nLYxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.18.1" - } - }, "node_modules/undici-types": { "version": "8.9.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", @@ -21950,21 +17201,6 @@ "dev": true, "license": "MIT" }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -22017,16 +17253,6 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "license": "MIT" }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, "node_modules/warning": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", @@ -22343,13 +17569,6 @@ "minimalistic-assert": "^1.0.0" } }, - "node_modules/web-audio-test-api": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/web-audio-test-api/-/web-audio-test-api-0.5.2.tgz", - "integrity": "sha512-RevLfVjp+wwe/dBPe361IpmNpeXXW6JVmlp8dk0YIxLwAh7evn6JpEQQalVgX4PH/jA8tpLpjD/8tFNUYTf88w==", - "dev": true, - "license": "MIT" - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -23872,30 +19091,6 @@ "node": ">=0.8.0" } }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -24072,96 +19267,12 @@ "node": ">= 4" } }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/ws": { "version": "6.2.6", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.6.tgz", @@ -24184,37 +19295,6 @@ "xtend": "^4.0.0" } }, - "node_modules/xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true, - "license": "MIT" - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -24224,51 +19304,12 @@ "node": ">=0.4" } }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, - "node_modules/yargs": { - "version": "17.7.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", - "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", diff --git a/package.json b/package.json index 50d13885029..89fa9e303ea 100644 --- a/package.json +++ b/package.json @@ -19,11 +19,9 @@ "i18n:push": "tx-push-src scratch-editor interface translations/en.json", "i18n:src": "rimraf ./translations/messages/src && babel src > tmp.js && rimraf tmp.js && build-i18n-src ./translations/messages/src ./translations/", "start": "webpack-dev-server", - "test": "npm run test:lint && npm run test:unit && npm run build && npm run test:integration", - "test:integration": "jest --maxWorkers=4 test[\\\\/]integration", + "test": "npm run test:lint && npm run test:unit", "test:lint": "eslint . --ext .js,.jsx", - "test:unit": "jest test[\\\\/]unit[\\\\/]addons", - "test:smoke": "jest --runInBand test[\\\\/]smoke", + "test:unit": "node --import ./test/register-hooks.mjs --disable-warning=MODULE_TYPELESS_PACKAGE_JSON --test \"test/**/*.test.mjs\"", "watch": "webpack --colors --watch" }, "config": { @@ -111,51 +109,25 @@ "@babel/plugin-transform-async-to-generator": "7.14.5", "@babel/preset-env": "7.14.8", "@babel/preset-react": "7.14.5", - "babel-core": "7.0.0-bridge.0", "babel-eslint": "10.1.0", "babel-loader": "8.3.0", - "chromedriver": "117.0.3", - "enzyme": "3.10.0", - "enzyme-adapter-react-16": "1.15.7", "eslint": "8.55.0", "eslint-config-scratch": "9.0.3", "eslint-import-resolver-webpack": "0.11.1", "eslint-plugin-import": "2.29.1", - "eslint-plugin-jest": "22.17.0", "eslint-plugin-react": "7.33.2", "file-loader": "6.2.0", "gh-pages": "3.2.3", "html-webpack-plugin": "^4.2.0", - "jest": "^29.7.0", - "jest-junit": "7.0.0", "mkdirp": "1.0.3", - "raf": "3.4.1", - "react-test-renderer": "16.14.0", - "redux-mock-store": "1.5.3", "rimraf": "2.7.1", - "selenium-webdriver": "3.6.0", "uglifyjs-webpack-plugin": "1.3.0", "url-loader": "4.1.1", - "web-audio-test-api": "0.5.2", "webpack": "4.47.0", "webpack-cli": "3.3.12", "webpack-dev-server": "3.11.2", "yauzl": "2.10.0" }, - "jest": { - "setupFiles": [ - "raf/polyfill", - "/test/helpers/enzyme-setup.js" - ], - "testPathIgnorePatterns": [ - "src/test.js" - ], - "moduleNameMapper": { - "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/test/__mocks__/fileMock.js", - "\\.(css|less)$": "/test/__mocks__/styleMock.js", - "editor-msgs(\\.js)?$": "/test/__mocks__/editor-msgs-mock.js" - } - }, "overrides": { "webpack@4.47.0": { "terser-webpack-plugin": "^4.2.3" diff --git a/test/.eslintrc.js b/test/.eslintrc.js deleted file mode 100644 index be26685849d..00000000000 --- a/test/.eslintrc.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - extends: ['scratch/react', 'scratch/es6', 'plugin:jest/recommended'], - env: { - browser: true, - jest: true - }, - plugins: ['jest'], - rules: { - 'react/prop-types': 0 - } -}; diff --git a/test/__mocks__/audio-buffer-player.js b/test/__mocks__/audio-buffer-player.js deleted file mode 100644 index 560bfb2d2f1..00000000000 --- a/test/__mocks__/audio-buffer-player.js +++ /dev/null @@ -1,15 +0,0 @@ -export default class MockAudioBufferPlayer { - constructor (samples, sampleRate) { - this.samples = samples; - this.sampleRate = sampleRate; - this.buffer = { - getChannelData: jest.fn(() => samples), - sampleRate: sampleRate - }; - this.play = jest.fn((trimStart, trimEnd, onUpdate) => { - this.onUpdate = onUpdate; - }); - this.stop = jest.fn(); - MockAudioBufferPlayer.instance = this; - } -} diff --git a/test/__mocks__/audio-effects.js b/test/__mocks__/audio-effects.js deleted file mode 100644 index 9597eec1be0..00000000000 --- a/test/__mocks__/audio-effects.js +++ /dev/null @@ -1,24 +0,0 @@ -export default class MockAudioEffects { - static get effectTypes () { // @todo can this be imported from the real file? - return { - ROBOT: 'robot', - REVERSE: 'reverse', - LOUDER: 'higher', - SOFTER: 'lower', - FASTER: 'faster', - SLOWER: 'slower', - ECHO: 'echo' - }; - } - constructor (buffer, name) { - this.buffer = buffer; - this.name = name; - this.process = jest.fn(done => { - this._finishProcessing = renderedBuffer => { - done(renderedBuffer, 0, 1); - return new Promise(resolve => setTimeout(resolve)); - }; - }); - MockAudioEffects.instance = this; - } -} diff --git a/test/__mocks__/editor-msgs-mock.js b/test/__mocks__/editor-msgs-mock.js deleted file mode 100644 index 02ae1d6baaf..00000000000 --- a/test/__mocks__/editor-msgs-mock.js +++ /dev/null @@ -1,3 +0,0 @@ -export default { - en: {} -}; diff --git a/test/__mocks__/fileMock.js b/test/__mocks__/fileMock.js deleted file mode 100644 index 59890f6a201..00000000000 --- a/test/__mocks__/fileMock.js +++ /dev/null @@ -1,3 +0,0 @@ -// __mocks__/fileMock.js - -module.exports = 'test-file-stub'; diff --git a/test/__mocks__/styleMock.js b/test/__mocks__/styleMock.js deleted file mode 100644 index d988e23b739..00000000000 --- a/test/__mocks__/styleMock.js +++ /dev/null @@ -1,3 +0,0 @@ -// __mocks__/styleMock.js - -module.exports = {}; diff --git a/test/addons-settings.test.mjs b/test/addons-settings.test.mjs new file mode 100644 index 00000000000..87a31ff1138 --- /dev/null +++ b/test/addons-settings.test.mjs @@ -0,0 +1,707 @@ +import {test, beforeEach, mock} from 'node:test'; +import assert from 'node:assert/strict'; +import SettingStore from '../src/addons/settings-store.js'; +import upstreamMeta from '../src/addons/generated/upstream-meta.json' with {type: 'json'}; + +class LocalStorageShim { + constructor () { + this.storage = Object.create(null); + } + getItem (key) { + return this.storage[key]; + } + setItem (key, value) { + this.storage[key] = value.toString(); + } +} + +beforeEach(() => { + globalThis.localStorage = new LocalStorageShim(); +}); + +const lightTheme = { + isDark: () => false +}; + +const darkTheme = { + isDark: () => true +}; + +test('enabled, event', () => { + const store = new SettingStore(); + const fn = mock.fn(); + store.addEventListener('setting-changed', fn); + assert.equal(store.getAddonEnabled('editor-devtools'), true); + assert.equal('enabled' in store.store['editor-devtools'], false); + store.setAddonEnabled('editor-devtools', false); + assert.equal(store.getAddonEnabled('editor-devtools'), false); + assert.equal('enabled' in store.store['editor-devtools'], true); + store.setAddonEnabled('editor-devtools', true); + store.setAddonEnabled('cat-blocks', true); + assert.equal('enabled' in store.store['cat-blocks'], true); + store.setAddonEnabled('cat-blocks', null); + assert.equal('enabled' in store.store['cat-blocks'], false); + assert.equal(fn.mock.callCount(), 4); + assert.equal(fn.mock.calls[0].arguments[0].detail.addonId, 'editor-devtools'); + assert.equal(fn.mock.calls[0].arguments[0].detail.settingId, 'enabled'); + assert.equal(fn.mock.calls[0].arguments[0].detail.value, false); + assert.equal(fn.mock.calls[1].arguments[0].detail.addonId, 'editor-devtools'); + assert.equal(fn.mock.calls[1].arguments[0].detail.settingId, 'enabled'); + assert.equal(fn.mock.calls[1].arguments[0].detail.value, true); + assert.equal(fn.mock.calls[2].arguments[0].detail.addonId, 'cat-blocks'); + assert.equal(fn.mock.calls[2].arguments[0].detail.settingId, 'enabled'); + assert.equal(fn.mock.calls[2].arguments[0].detail.value, true); + assert.equal(fn.mock.calls[3].arguments[0].detail.addonId, 'cat-blocks'); + assert.equal(fn.mock.calls[3].arguments[0].detail.settingId, 'enabled'); + assert.equal(fn.mock.calls[3].arguments[0].detail.value, false); +}); + +test('settings, event, default values', () => { + const store = new SettingStore(); + const fn = mock.fn(); + assert.equal(store.getAddonSetting('onion-skinning', 'default'), false); + assert.equal('default' in store.store['onion-skinning'], false); + store.addEventListener('setting-changed', fn); + store.setAddonSetting('onion-skinning', 'default', true); + assert.equal(store.getAddonSetting('onion-skinning', 'default'), true); + assert.equal('default' in store.store['onion-skinning'], true); + store.setAddonSetting('onion-skinning', 'default', null); + assert.equal('default' in store.store['onion-skinning'], false); + assert.equal(store.getAddonSetting('onion-skinning', 'default'), false); + assert.equal(fn.mock.callCount(), 2); + assert.equal(fn.mock.calls[0].arguments[0].detail.addonId, 'onion-skinning'); + assert.equal(fn.mock.calls[0].arguments[0].detail.settingId, 'default'); + assert.equal(fn.mock.calls[0].arguments[0].detail.value, true); + assert.equal(fn.mock.calls[1].arguments[0].detail.addonId, 'onion-skinning'); + assert.equal(fn.mock.calls[1].arguments[0].detail.settingId, 'default'); + assert.equal(fn.mock.calls[1].arguments[0].detail.value, false); +}); + +test('no actual change emits no event', () => { + const store = new SettingStore(); + const fn = mock.fn(); + store.addEventListener('setting-changed', fn); + for (let i = 0; i < 5; i++) store.setAddonEnabled('cat-blocks', true); + assert.equal(fn.mock.callCount(), 1); + for (let i = 0; i < 5; i++) store.setAddonEnabled('cat-blocks', false); + assert.equal(fn.mock.callCount(), 2); + for (let i = 0; i < 5; i++) store.setAddonSetting('onion-skinning', 'default', true); + assert.equal(fn.mock.callCount(), 3); + for (let i = 0; i < 5; i++) store.setAddonSetting('onion-skinning', 'default', false); + assert.equal(fn.mock.callCount(), 4); +}); + +test('changing enabled throws on unknown addons', () => { + const store = new SettingStore(); + const fn = mock.fn(); + store.addEventListener('setting-changed', fn); + assert.throws(() => store.setAddonEnabled('egriohergoijergijregojiergdfoijre', true)); + assert.equal(fn.mock.callCount(), 0); +}); + +test('changing settings throws on unknown settings', () => { + const store = new SettingStore(); + const fn = mock.fn(); + store.addEventListener('setting-changed', fn); + assert.throws(() => store.setAddonSetting('onion-skinning', 'sdlkjfslkdjfljksd', true)); + assert.throws(() => store.setAddonSetting('ergfoijgi', 'sdflkjsfdlkj', true)); + assert.equal(fn.mock.callCount(), 0); +}); + +test('changing enabled throws on invalid values', () => { + const store = new SettingStore(); + const fn = mock.fn(); + store.addEventListener('setting-changed', fn); + assert.throws(() => store.setAddonEnabled('cat-blocks', 'sdfjlksdflk')); + assert.throws(() => store.setAddonEnabled('cat-blocks', 0)); + assert.throws(() => store.setAddonEnabled('cat-blocks', [])); + assert.throws(() => store.setAddonEnabled('cat-blocks', {})); + assert.equal(fn.mock.callCount(), 0); +}); + +test('changing settings checks value validity and throws', () => { + const store = new SettingStore(); + const fn = mock.fn(); + store.addEventListener('setting-changed', fn); + // boolean + assert.throws(() => store.setAddonSetting('onion-skinning', 'default', '#abcdef')); + assert.throws(() => store.setAddonSetting('onion-skinning', 'default', [])); + assert.throws(() => store.setAddonSetting('onion-skinning', 'default', {})); + assert.throws(() => store.setAddonSetting('onion-skinning', 'default', '')); + assert.throws(() => store.setAddonSetting('onion-skinning', 'default', 1)); + // integer + assert.throws(() => store.setAddonSetting('onion-skinning', 'next', '#abcdef')); + assert.throws(() => store.setAddonSetting('onion-skinning', 'next', [])); + assert.throws(() => store.setAddonSetting('onion-skinning', 'next', {})); + assert.throws(() => store.setAddonSetting('onion-skinning', 'next', '')); + assert.throws(() => store.setAddonSetting('onion-skinning', 'next', '3')); + assert.throws(() => store.setAddonSetting('onion-skinning', 'next', false)); + // select + assert.throws(() => store.setAddonSetting('onion-skinning', 'mode', '#abcdef')); + assert.throws(() => store.setAddonSetting('onion-skinning', 'mode', [])); + assert.throws(() => store.setAddonSetting('onion-skinning', 'mode', {})); + assert.throws(() => store.setAddonSetting('onion-skinning', 'mode', '')); + assert.throws(() => store.setAddonSetting('onion-skinning', 'mode', false)); + assert.throws(() => store.setAddonSetting('onion-skinning', 'mode', 1)); + assert.doesNotThrow(() => store.setAddonSetting('onion-skinning', 'mode', 'tint')); + assert.doesNotThrow(() => store.setAddonSetting('onion-skinning', 'mode', 'merge')); + // color + assert.doesNotThrow(() => store.setAddonSetting('onion-skinning', 'beforeTint', '#abcdef')); + assert.doesNotThrow(() => store.setAddonSetting('onion-skinning', 'beforeTint', '#abcDE1')); + assert.throws(() => store.setAddonSetting('onion-skinning', 'beforeTint', [])); + assert.throws(() => store.setAddonSetting('onion-skinning', 'beforeTint', {})); + assert.throws(() => store.setAddonSetting('onion-skinning', 'beforeTint', '')); + assert.throws(() => store.setAddonSetting('onion-skinning', 'beforeTint', false)); + assert.throws(() => store.setAddonSetting('onion-skinning', 'beforeTint', 1)); + assert.equal(fn.mock.callCount(), 4); +}); + +test('colors with alpha channel', () => { + const store = new SettingStore(); + store.setAddonSetting('onion-skinning', 'beforeTint', '#123456'); + assert.equal(store.getAddonSetting('onion-skinning', 'beforeTint'), '#123456'); + store.setAddonSetting('onion-skinning', 'beforeTint', '#234567ff'); + assert.equal(store.getAddonSetting('onion-skinning', 'beforeTint'), '#234567'); + store.setAddonSetting('onion-skinning', 'beforeTint', '#abc67800'); + assert.equal(store.getAddonSetting('onion-skinning', 'beforeTint'), '#abc678'); + store.import({ + addons: { + 'onion-skinning': { + settings: { + beforeTint: '#56789aff' + } + } + } + }); + assert.equal(store.getAddonSetting('onion-skinning', 'beforeTint'), '#56789a'); +}); + +test('reset does not change enabled', () => { + const store = new SettingStore(); + store.setAddonEnabled('cat-blocks', true); + store.resetAddon('cat-blocks'); + assert.equal(store.getAddonEnabled('cat-blocks'), true); +}); + +test('reset settings, event', () => { + const store = new SettingStore(); + store.setAddonSetting('onion-skinning', 'default', true); + store.setAddonSetting('onion-skinning', 'next', 3); + const fn = mock.fn(); + store.addEventListener('setting-changed', fn); + store.resetAddon('onion-skinning'); + assert.equal(store.getAddonSetting('onion-skinning', 'default'), false); + assert.equal(store.getAddonSetting('onion-skinning', 'next'), 0); + assert.equal(fn.mock.callCount(), 2); + assert.equal(fn.mock.calls[0].arguments[0].detail.addonId, 'onion-skinning'); + assert.equal(fn.mock.calls[0].arguments[0].detail.settingId, 'default'); + assert.equal(fn.mock.calls[0].arguments[0].detail.value, false); + assert.equal(fn.mock.calls[1].arguments[0].detail.addonId, 'onion-skinning'); + assert.equal(fn.mock.calls[1].arguments[0].detail.settingId, 'next'); + assert.equal(fn.mock.calls[1].arguments[0].detail.value, 0); +}); + +test('reset all addons', () => { + const store = new SettingStore(); + store.setAddonEnabled('cat-blocks', true); + store.setAddonSetting('onion-skinning', 'default', true); + const fn = mock.fn(); + store.addEventListener('setting-changed', fn); + store.resetAllAddons(); + assert.equal(fn.mock.callCount(), 2); + assert.equal(fn.mock.calls[0].arguments[0].detail.addonId, 'cat-blocks'); + assert.equal(fn.mock.calls[0].arguments[0].detail.settingId, 'enabled'); + assert.equal(fn.mock.calls[0].arguments[0].detail.value, false); + assert.equal(fn.mock.calls[1].arguments[0].detail.addonId, 'onion-skinning'); + assert.equal(fn.mock.calls[1].arguments[0].detail.settingId, 'default'); + assert.equal(fn.mock.calls[1].arguments[0].detail.value, false); +}); + +test('apply preset', () => { + const store = new SettingStore(); + const fn = mock.fn(); + store.addEventListener('setting-changed', fn); + store.setAddonSetting('editor-theme3', 'motion-color', '#abcdef'); + store.applyAddonPreset('editor-theme3', 'original'); + assert.ok(fn.mock.callCount() > 5); + assert.equal(store.getAddonSetting('editor-theme3', 'motion-color'), '#4a6cd4'); + // TODO: test that settings not specified in the preset don't change +}); + +test('unknown preset throws', () => { + const store = new SettingStore(); + const fn = mock.fn(); + store.addEventListener('setting-changed', fn); + assert.throws(() => store.applyAddonPreset('alksdfjlksdf', 'jksdflkjsdf')); + assert.throws(() => store.applyAddonPreset('editor-theme3', 'jksdflkjsdf')); + assert.equal(fn.mock.callCount(), 0); +}); + +test('export core', () => { + const store = new SettingStore(); + const exported = store.export({theme: lightTheme}); + assert.match(exported.core.version, /tw/); + assert.equal(exported.core.lightTheme, true); + const dark = store.export({theme: darkTheme}); + assert.equal(dark.core.lightTheme, false); +}); + +test('export settings', () => { + const store = new SettingStore(); + let exported = store.export({theme: lightTheme}); + assert.equal(exported.addons['remove-sprite-confirm'].enabled, false); + assert.deepEqual(exported.addons['remove-sprite-confirm'].settings, {}); + assert.equal(exported.addons['onion-skinning'].enabled, true); + assert.deepEqual(exported.addons['onion-skinning'].settings.default, false); + store.setAddonEnabled('remove-sprite-confirm', true); + store.setAddonSetting('onion-skinning', 'default', true); + exported = store.export({theme: lightTheme}); + assert.equal(exported.addons['remove-sprite-confirm'].enabled, true); + assert.deepEqual(exported.addons['remove-sprite-confirm'].settings, {}); + assert.equal(exported.addons['onion-skinning'].enabled, true); + assert.deepEqual(exported.addons['onion-skinning'].settings.default, true); +}); + +test('export theme', () => { + const store = new SettingStore(); + const exported = store.export({theme: lightTheme}); + assert.equal(exported.core.lightTheme, true); + const exported2 = store.export({theme: darkTheme}); + assert.equal(exported2.core.lightTheme, false); +}); + +test('import, event', () => { + const store = new SettingStore(); + store.setAddonEnabled('onion-skinning', false); + store.setAddonSetting('onion-skinning', 'next', 5); + const newStore = new SettingStore(); + newStore.setAddonSetting('onion-skinning', 'next', 10); + const fn = mock.fn(); + newStore.addEventListener('setting-changed', fn); + newStore.import(store.export({theme: lightTheme})); + assert.equal(newStore.getAddonEnabled('onion-skinning'), false); + assert.equal(newStore.getAddonSetting('onion-skinning', 'next'), 5); + assert.equal(fn.mock.callCount(), 2); + assert.equal(fn.mock.calls[0].arguments[0].detail.addonId, 'onion-skinning'); + assert.equal(fn.mock.calls[0].arguments[0].detail.settingId, 'enabled'); + assert.equal(fn.mock.calls[0].arguments[0].detail.value, false); + assert.equal(fn.mock.calls[1].arguments[0].detail.addonId, 'onion-skinning'); + assert.equal(fn.mock.calls[1].arguments[0].detail.settingId, 'next'); + assert.equal(fn.mock.calls[1].arguments[0].detail.value, 5); +}); + +test('export is identical after import', () => { + const store = new SettingStore(); + const fn = mock.fn(); + const exported = store.export({theme: lightTheme}); + store.import(exported); + assert.equal(fn.mock.callCount(), 0); + assert.deepEqual(store.export({theme: lightTheme}), exported); +}); + +test('import format', () => { + const store = new SettingStore(); + store.setAddonEnabled('cat-blocks', true); + store.import({ + core: { + version: 'lksd', + lightTheme: false + }, + addons: { + 'onion-skinning': { + enabled: false, + settings: { + next: 7 + } + } + } + }); + assert.equal(store.getAddonEnabled('onion-skinning'), false); + assert.equal(store.getAddonSetting('onion-skinning', 'next'), 7); + assert.equal(store.getAddonEnabled('cat-blocks'), true); +}); + +test('invalid imports', () => { + const store = new SettingStore(); + assert.doesNotThrow(() => store.import({ + addons: {} + })); + assert.doesNotThrow(() => store.import({ + addons: { + 'onion-skinning': { + enabled: false, + settings: { + dsjfokosdfj: 5 + } + } + } + })); + assert.doesNotThrow(() => store.import({ + addons: { + grfdjiklk: { + enabled: true, + settings: {} + } + } + })); + assert.doesNotThrow(() => store.import({ + addons: { + 'onion-skinning': { + enabled: '4', + settings: { + default: '3' + } + } + } + })); + assert.equal(store.getAddonEnabled('onion-skinning'), false); + assert.equal(store.getAddonSetting('onion-skinning', 'default'), false); +}); + +test('local storage', () => { + const store = new SettingStore(); + store.setAddonEnabled('cat-blocks', true); + store.setAddonSetting('onion-skinning', 'default', true); + const newStore = new SettingStore(); + newStore.readLocalStorage(); + assert.deepEqual(newStore.store, store.store); +}); + +test('local storage is resistent to errors', () => { + globalThis.localStorage = new LocalStorageShim(); + const store = new SettingStore(); + localStorage.getItem = () => { + throw new Error(':('); + }; + store.readLocalStorage(); + localStorage.getItem = () => 'eoiru4jtg)(R('; + store.readLocalStorage(); + localStorage.setItem = () => { + throw new Error(':('); + }; + store.setAddonEnabled('cat-blocks', true); + // eslint-disable-next-line no-undefined + globalThis.localStorage = undefined; + store.readLocalStorage(); + store.setAddonEnabled('cat-blocks', false); +}); + +test('setStore diffing', () => { + const settingsStore = new SettingStore(); + const pageStore = new SettingStore(); + settingsStore.setAddonEnabled('editor-devtools', false); + pageStore.setAddonEnabled('editor-devtools', false); + const fn = mock.fn(); + pageStore.addEventListener('addon-changed', fn); + pageStore.setStore(settingsStore.store); + assert.equal(fn.mock.callCount(), 0); + settingsStore.setAddonEnabled('editor-devtools', true); + settingsStore.setAddonSetting('onion-skinning', 'next', 10); + pageStore.setStore(settingsStore.store); + assert.equal(fn.mock.callCount(), 2); + assert.equal(fn.mock.calls[0].arguments[0].detail.addonId, 'editor-devtools'); + assert.equal(fn.mock.calls[1].arguments[0].detail.addonId, 'onion-skinning'); +}); + +test('setStore dynamic enable/disable', () => { + const settingsStore = new SettingStore(); + const pageStore = new SettingStore(); + settingsStore.setAddonEnabled('block-palette-icons', false); + pageStore.setStore(settingsStore.store); + const fn = mock.fn(); + pageStore.addEventListener('addon-changed', fn); + settingsStore.setAddonEnabled('block-palette-icons', true); + pageStore.setStore(settingsStore.store); + assert.equal(fn.mock.calls[0].arguments[0].detail.addonId, 'block-palette-icons'); + assert.equal(fn.mock.calls[0].arguments[0].detail.dynamicEnable, true); + assert.equal(fn.mock.calls[0].arguments[0].detail.dynamicDisable, false); + settingsStore.setAddonEnabled('block-palette-icons', false); + pageStore.setStore(settingsStore.store); + assert.equal(fn.mock.calls[1].arguments[0].detail.addonId, 'block-palette-icons'); + assert.equal(fn.mock.calls[1].arguments[0].detail.dynamicEnable, false); + assert.equal(fn.mock.calls[1].arguments[0].detail.dynamicDisable, true); +}); + +test('setStore weird values', () => { + const settingsStore = new SettingStore(); + assert.equal(settingsStore.getAddonEnabled('pause'), true); + settingsStore.setAddonEnabled('pause', false); + settingsStore.setAddonEnabled('clones', true); + settingsStore.setStore({ + invalid0: {}, + invalid1: null, + pause: null + }); + assert.equal(settingsStore.getAddonEnabled('pause'), false); +}); + +test('resetting an addon through setStore', () => { + const store = new SettingStore(); + assert.equal(store.getAddonSetting('custom-block-shape', 'paddingSize'), 100); + store.setAddonSetting('custom-block-shape', 'paddingSize', 50); + assert.equal(store.getAddonSetting('custom-block-shape', 'paddingSize'), 50); + const store2 = new SettingStore(); + store.setStore(store2.store); + assert.equal(store.getAddonSetting('custom-block-shape', 'paddingSize'), 100); +}); + +test('setStoreWithVersionCheck', () => { + const store = new SettingStore(); + store.setStore = mock.fn(); + store.setStoreWithVersionCheck({ + store: '1234', + version: upstreamMeta.commit + }); + assert.equal(store.setStore.mock.callCount(), 1); + assert.deepEqual(store.setStore.mock.calls[0].arguments, ['1234']); + store.setStore = mock.fn(); + store.setStoreWithVersionCheck({ + store: '1234', + version: 'something invalid' + }); + assert.equal(store.setStore.mock.callCount(), 0); +}); + +test('parseUrlParameter', () => { + const store = new SettingStore(); + assert.equal(store.getAddonEnabled('pause'), true); + assert.equal(store.getAddonEnabled('mute-project'), true); + assert.equal(store.getAddonEnabled('remove-curved-stage-border'), false); + assert.equal(store.remote, false); + store.parseUrlParameter('pause,remove-curved-stage-border,,invalid addon??43t987(*&$'); + assert.equal(store.getAddonEnabled('pause'), true); + assert.equal(store.getAddonEnabled('mute-project'), false); + assert.equal(store.getAddonEnabled('remove-curved-stage-border'), true); + assert.equal(store.remote, true); +}); + +test('Settings migration 1 -> 2', () => { + const store = new SettingStore(); + + // eslint-disable-next-line max-len + globalThis.localStorage.getItem = () => `{"_":1,"tw-project-info":{"enabled":false},"tw-interface-customization":{"enabled":false,"removeFeedback":true,"removeBackpack":true}}`; + store.readLocalStorage(); + assert.equal(store.getAddonEnabled('block-count'), false); + assert.equal(store.getAddonEnabled('tw-remove-backpack'), false); + assert.equal(store.getAddonEnabled('tw-remove-feedback'), false); + + // eslint-disable-next-line max-len + globalThis.localStorage.getItem = () => `{"_":1,"tw-project-info":{"enabled":true},"tw-interface-customization":{"enabled":true,"removeFeedback":true,"removeBackpack":true}}`; + store.readLocalStorage(); + assert.equal(store.getAddonEnabled('block-count'), true); + assert.equal(store.getAddonEnabled('tw-remove-backpack'), true); + assert.equal(store.getAddonEnabled('tw-remove-feedback'), true); +}); + +test('Settings migration 2 -> 3', () => { + const store = new SettingStore(); + + globalThis.localStorage.getItem = () => JSON.stringify({ + '_': 2, + 'hide-flyout': { + enabled: true + } + }); + store.readLocalStorage(); + assert.equal(store.getAddonSetting('hide-flyout', 'toggle'), 'hover'); +}); + +test('Settings migration 3 -> 4', () => { + const store = new SettingStore(); + + globalThis.localStorage.getItem = () => JSON.stringify({ + _: 3 + }); + store.readLocalStorage(); + assert.equal(store.getAddonEnabled('editor-devtools'), true); + assert.equal(store.getAddonEnabled('find-bar'), true); + assert.equal(store.getAddonEnabled('middle-click-popup'), true); + + globalThis.localStorage.getItem = () => JSON.stringify({ + '_': 3, + 'editor-devtools': { + enabled: false + } + }); + store.readLocalStorage(); + assert.equal(store.getAddonEnabled('editor-devtools'), false); + assert.equal(store.getAddonEnabled('find-bar'), false); + assert.equal(store.getAddonEnabled('middle-click-popup'), false); +}); + +test('if', () => { + const store = new SettingStore(); + store.setAddonEnabled('editor-devtools', true); + store.setAddonEnabled('onion-skinning', false); + store.setAddonSetting('editor-theme3', 'motion-color', '#000000'); + store.setAddonSetting('editor-theme3', 'looks-color', '#FFFFFF'); + + // eslint-disable-next-line no-undefined + assert.equal(store.evaluateCondition('editor-theme3', undefined), true); + assert.equal(store.evaluateCondition('editor-theme3', null), true); + assert.equal(store.evaluateCondition('editor-theme3', {}), true); + + assert.equal(store.evaluateCondition('editor-theme3', { + addonEnabled: ['onion-skinning'] + }), false); + assert.equal(store.evaluateCondition('editor-theme3', { + addonEnabled: 'onion-skinning' + }), false); + assert.equal(store.evaluateCondition('editor-theme3', { + addonEnabled: ['editor-devtools'] + }), true); + assert.equal(store.evaluateCondition('editor-theme3', { + addonEnabled: 'editor-devtools' + }), true); + assert.equal(store.evaluateCondition('editor-theme3', { + addonEnabled: ['editor-devtools', 'onion-skinning'] + }), true); + + assert.equal(store.evaluateCondition('editor-theme3', { + settings: {} + }), true); + assert.equal(store.evaluateCondition('editor-theme3', { + settings: { + 'motion-color': '#000000' + } + }), true); + assert.equal(store.evaluateCondition('editor-theme3', { + settings: { + 'looks-color': '#FFFFFF' + } + }), true); + assert.equal(store.evaluateCondition('editor-theme3', { + settings: { + 'looks-color': '#FFFFFE' + } + }), false); + assert.equal(store.evaluateCondition('editor-theme3', { + settings: { + 'motion-color': '#000000', + 'looks-color': '#FFFFFF' + } + }), true); + assert.equal(store.evaluateCondition('editor-theme3', { + settings: { + 'motion-color': '#000001', + 'looks-color': '#FFFFFF' + } + }), false); + + assert.equal(store.evaluateCondition('editor-theme3', { + settings: { + 'looks-color': ['#FFFFFF'] + } + }), true); + assert.equal(store.evaluateCondition('editor-theme3', { + settings: { + 'looks-color': ['#FFFFFE', '#FFFFFF'] + } + }), true); + assert.equal(store.evaluateCondition('editor-theme3', { + settings: { + 'looks-color': ['#FFFFFF', '#FFFFFE'] + } + }), true); + assert.equal(store.evaluateCondition('editor-theme3', { + settings: { + 'looks-color': ['#FFFFFE'] + } + }), false); + assert.equal(store.evaluateCondition('editor-theme3', { + settings: { + 'looks-color': ['#FFFFFE', '#FFFFFD'] + } + }), false); + assert.equal(store.evaluateCondition('editor-theme3', { + settings: { + 'looks-color': [] + } + }), false); + + assert.equal(store.evaluateCondition('editor-theme3', { + addonEnabled: ['editor-devtools'], + settings: { + 'motion-color': '#000000' + } + }), true); + assert.equal(store.evaluateCondition('editor-theme3', { + addonEnabled: ['onion-skinning'], + settings: { + 'motion-color': '#000000' + } + }), false); + assert.equal(store.evaluateCondition('editor-theme3', { + addonEnabled: ['editor-devtools'], + settings: { + 'motion-color': '#000001' + } + }), false); + assert.equal(store.evaluateCondition('editor-theme3', { + addonEnabled: ['onion-skinning'], + settings: { + 'motion-color': '#000001' + } + }), false); +}); + +test('Settings migration 4 -> 5', () => { + const store = new SettingStore(); + + // implied default settings + globalThis.localStorage.getItem = () => JSON.stringify({ + _: 4 + }); + store.readLocalStorage(); + assert.equal(store.getAddonSetting('fullscreen', 'toolbar'), 'show'); + + // also implied default settings + globalThis.localStorage.getItem = () => JSON.stringify({ + _: 4, + fullscreen: {} + }); + store.readLocalStorage(); + assert.equal(store.getAddonSetting('fullscreen', 'toolbar'), 'show'); + + // explicit default settings + globalThis.localStorage.getItem = () => JSON.stringify({ + '_': 4, + 'fullscreen': { + hideToolbar: false + } + }); + store.readLocalStorage(); + assert.equal(store.getAddonSetting('fullscreen', 'toolbar'), 'show'); + + // explicit hide, implied default hover setting + globalThis.localStorage.getItem = () => JSON.stringify({ + '_': 4, + 'fullscreen': { + hideToolbar: true + } + }); + store.readLocalStorage(); + assert.equal(store.getAddonSetting('fullscreen', 'toolbar'), 'hover'); + + // explicit hide and default hover + globalThis.localStorage.getItem = () => JSON.stringify({ + '_': 4, + 'fullscreen': { + hideToolbar: true, + hoverToolbar: true + } + }); + store.readLocalStorage(); + assert.equal(store.getAddonSetting('fullscreen', 'toolbar'), 'hover'); + + // explicit hide, no hover + globalThis.localStorage.getItem = () => JSON.stringify({ + '_': 4, + 'fullscreen': { + hideToolbar: true, + hoverToolbar: false + } + }); + store.readLocalStorage(); + assert.equal(store.getAddonSetting('fullscreen', 'toolbar'), 'hide'); +}); diff --git a/test/fixtures/100-100.svg b/test/fixtures/100-100.svg deleted file mode 100644 index 108f7aa1bc9..00000000000 --- a/test/fixtures/100-100.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - Artboard - Created with Sketch. - - - - - - - - - - - - - - - diff --git a/test/fixtures/bmpfile.bmp b/test/fixtures/bmpfile.bmp deleted file mode 100644 index e96d271c315233ded54404460b0d79a11cb45ed3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30122 zcmeH}J(49w41@0XsKR@I{xV; z3lFe*sxdrOstkdWVC%XvT3}uWtajE7(HPJcST$1;fpuLOEikVGRy(^5kr{B^QL2D0 zqzbI7E%Z^Qt*7JF&T%o615BS2tjghaEls19%hd8Pth?nyQ4TPDPOvJ6*R?c_mXi(s z=}&jtTqYOOweMP$dW1L;m&zb5Il3Ohu*T*%l*z)X0b8<`irrk-qEz544=dRrnTQ6k z5+hJxVr9TFC$?Z5h~B#y7MKpAt6-`$Qf1)HmIgW(EqDcV9|IW8IG7bcIR(*Wvd9l6 zK4eJ?%`_nzuVQp=j*Amx2*#upH82iTLY(EQGLDYSu33paX)yu~%oHFqFx6a6x}jPg zo23cvLy{J=(7>z!N;hStKhHC9M1cVZ^6>%)fdSA0BrP-sP#SREJ4z-_7Z}|Gk4$G* z-f#>@6I+o%Jiy&=I!j5zd)Lqe^(sH`^r4w{l|*SkTX$d`=km2R@UEv`H7dW#M59J9 z-3ZX!1ax8?q1}P&PmRu%v`ndjUDyq}ykwbGG6DlDS)JFwsY?Y#Jk7bBWSJxx%>b7? z0;g$ob1?PZO6L2-?ybwbczC=<&b;{N+`3+Vnb^H`nGWv@^ac6?eSy9}U!X707w8LI zasmB+>?MI8AVhBh9^VB9{NF$J%!lBOV0tT)9lKZ@F=dX07hOy&>XBib0+UT!gWUC2 zAuE1Y_%1OM>nps3@pL{ej1-WI_)da&+rISrHk0f=UWUk7RuS*hKs}iUhXMajr*+(^o zuUb`;V`kos`n#FRJ{8S@JvDaV_z=X_Q<%y=Xr^CuY;Dan9CK6?yN_qsCmCJQBzD&# zO@Y%`xha^s?jzYJ8Bx(Bc3R{(fWQHjxzfsSZBbyZUpIO$oa{u}qBmvIyY0Kn9ds`p=hIt<8 diff --git a/test/fixtures/corrupt-bmp.sb3 b/test/fixtures/corrupt-bmp.sb3 deleted file mode 100644 index 0753a9491b76e5b7f545cd47997ae8871116cdf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5579 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 J57dOG{{v@VspS9w diff --git a/test/fixtures/corrupt-from-scratch3.svg b/test/fixtures/corrupt-from-scratch3.svg deleted file mode 100644 index 15436df5a69..00000000000 --- a/test/fixtures/corrupt-from-scratch3.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/test/fixtures/corrupt-svg.sb2 b/test/fixtures/corrupt-svg.sb2 deleted file mode 100644 index 3b036a09b7d03f07622472a1970bc8c819f98abb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4534 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 diff --git a/test/fixtures/corrupt-svg.sprite3 b/test/fixtures/corrupt-svg.sprite3 deleted file mode 100644 index 06bb51aec7c1cef90d44cfbd0437b9cacb0e3dd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3320 zcmb_e2{@GN9-oCV$uc1!&WvNoI%FL#*_R<2G)QX97=skX8bwW^4N1zL^%Pk;vQ&<2 zku6*HBugT5$U34+?u>ig)J^y4dHTQ4`@P@yeDCvLfB*OWVa>oSd;q5Sd4wL`c=^vm z5P$&ao%C}?SX2B6-p&YPzd%WSPj7EOFJCEn++j`to4kS<5yO~A7}M|cP5_XF4g>%; z)L}Q&LIKdP)V^k@7GtQzs*rr{u*Zi|CQw0{%c$StQi}$i)`cMz;Ku8@|R%LqrT+mA_xFL{wPO2 zUfyoL&ZrYUo*o;~e0DJ-GIPsJ**EEmv}(3^rT|;Lb)wBO*7hyZSep9y z*E&9EBScuCnMsLW&!|e={b2m44JQ~bpVH$tT@XB!wE-<~mT*CMqlc?@8MPp{!ZYf&<@iu5AevvzTuYzbI`M;9iX;jU>P zefkm{p5lX%xd!xnTjI0EVV+WJh#MmX51gUieKAU(lLKYGZt!Tk@12J+wCi~JuvtoK zA%Z``FWEn!Y?qcq&m95FYK|8W_ z7d=AFrovnZq30;BdH$c>r_vgmp-b(gTlaYJaq1Gvo^9d1qTPKTPun{j=&sAkAG{=; z7Aw&Pyy7oW`!{_l4Mx3)wMAspYlb(7?1!m#x5BE;CCAU z00e*mNCaO33u8|=01ST0=FK^?+ge0ZED1S^$mREe;O6kJ9BU(s+;U>F-xV6y>5eRb zrX@OzO$ouCVqWZoRs))d^a6L|iF<1|#3Mh%tCzeV9OX#SFmUwpFA2))S zBq-($)jgb&8r2}WI;s$SY$$N-oEjy^yi_=6;?U!W+u$p1Hx3oh`yDs{nppgd=N>m3 z3w9)B{z#omX6en-3Cj;%UuEuyQgyeLB4^;sjp*=(d2kawzcmA%t5`cntK!R5m$aO- zQN~!vfLUY*D$1s^xpF$nBL>SMnyB+;d`I?K9aGQa6{b<@^7Ezcl@;x6|8wb&--5Io zESoIdwS(akE1f;m3V125BCorgE-i3DiLM)}BP-9rYdfFXUG$7z>D!$AHV71ixS|@a z{SvK#d^6zchq-$t3_8qJ=3|s8)y(;aR zQ!1un_B)I}?ClF^=4>YSc+v_%F@j3crxotYXo@UCNeh)Dk9(JT@`hkDEkG$=2Y9xa z2|Sng0oZE6YrJe|U|4DL#S#)Sz&kH&3J(=(mVYJAFS-%s0_)PlQem&#WwWfuK80VKKYsB-38XSV{D8;N(NygU zSeU2hn~Ecm_0!fu_0Z5kyV2)Q*1QYRDHe;d9U*-vtLJ^7WhLi8k5d8bJU86)_oQF# zXzVGFqBQXtMHUV`uU6G_@+}@;e4-r}FD^^<9?n!T-)HK#ruJL+Or*&hMPrmhTwKTIXO zF1efASn!~Q$FDu*ex%6x-=<`G)5>ax9y_L+ABo|=a8+z1!_`XSy21gAOW|)ZPsWot zkC!_}lh3LS8yeLmiVMH7M`alqSSPUmG3>nyLxtQ_c@4oCwss;f7+A{9N7Rc)$5$5j zizfo2P@(%IfYi`CB3L&_cvG|}o1Czv#2p8634v7q`A~kKcfft%+ednGg zi=5u0?8A!P3)09)nxq6zOI>as*itC@0cN89Gtnw|GDlj^BE6XBz`i!`=e!t#xo z@da1X!fdSj&V#Caa3qSL-3ynb0XWH7UgDg?S-th4|O5JY;}= xTUUM>%ip;kzIA0Q_Lx1jDaF)J&@F}E)~8?7VOTR(2-7lzF_swBnA*Yo`WLX&yW0Q& diff --git a/test/fixtures/corrupted-svg.sprite2 b/test/fixtures/corrupted-svg.sprite2 deleted file mode 100644 index 0db0dd70b95050ef688cc07821845b01650baad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4352 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 diff --git a/test/fixtures/gh-3582-png.png b/test/fixtures/gh-3582-png.png deleted file mode 100644 index cc1f1464e957dbddf5bc1aa4b8915b988bc97f0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62836 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πqu3lGIAsq*0R*{=RRNDPunUFP+1P53$a8=tP81K(NHdb=i1462js4 z&bcuI+o756)$k!?*n})r;zT0zEh0T~10{oQIxJDAgN3 z3Pncwf%h55+FwycHasM8YKTW^QnyEcg=XFg|4q%}H(}c4zhdw2HVKDZqPI;B#rQ+H>)J0b z4ZLv}a})7=@f~V zk+%#2bG%`W?em4fXr3pPne)S&WY@E^Y18u-1A|c11C3(io6y~P6@b?!23#H}EYnm! zsMWuw#>qmZ^U$j2?W2B`DG?i}xbm8Gb3l4fcRUOKfE(o2X918JvdnaCjSE^(tHj|F z!Fy@>1t(t_o}^XSUcEgy4p;1?OJ?bEf{Mx^>|;ROKa?u!$}~D?lMoKAn$7C3RRgqZkC>xEcets)eQUx`zz~f2s8Vb>@=8kH?8_JMrYLrv}LH z?0*WMfB3_L2Q=7|iPpLGM1ehEhn82?hC_Qg4N2l~j^KTKiNmE*iO;m@9D84HM+qo> z|7aYwm)P3SWltq4jBx1#MTn(TQunZ)S%-vhW>t;OVC9aA-C;%W))x82Z>S5|fj-Cl zyy9!Qz&cSo3*=A~cpcxN>6o=)*PcOFoszt6CIngfde39opt7-VWh!95UA3j1Crd7{ zO4QD5G~?$3d+@5gl6AV-mqn5WM=neha4T6~L|<-W9M(|#1qOlt45Uk|Sn;@M zK21-ZJqiHLS@Tz<2q3MiVU%?Njk7T}lSjdt^ezN6Rb+21_QYfDevc|`{m5^MecCbD|Z(~KUd|Ct6b#Cx(%SG|nmB$4Hy(tJwS^NNE$Rx-Q$xAK#|BxPcjE<^+n|qY18_;Up#CilXx!t9Pl6 zdA2qKQR&{~+U_KcY;`_^8DB0{%_9aK=MZs;_r%$qtxkw-(Z0}+KLWq;(@BjUgFB&{ z@@*?AyH?y<>e?h6iM94QA-@gfZNy@kBd>-Jj;~ljT%ISl6OO(11qx{u0<~@l!=GTd z@0@6qQ1HjDX7bjS=R<_gfi=bj8_VNh`SdQ4b>^pNGybOV9B{Lf z=RzsH$%^&*U=>r#gMkfuaM3PC?IhFN$U~FS>eG+o>f9?mK~fK2X(&$}`P% z6N|@h1A&cB?qHeDd6{|{?`IEJ?I$tk^#D)h({*s^z>GR?+ouIRK!Lj-+o$m+b3@m| z`T&pcFtj@NBs^Wj;ptho3wg}&2{fqs>g)7T3Pz3VAphhyp28NZ+qkK2q-->p@p0_Y z+qT_23h5UwI&w(_Cr{DwSuE2T2BJTZS~>xVpoZsnmFCqo{c8Ut5OoXjNXVAfT{2$1 z4V;xV==NuNYkSZ$#cCP^BuL>;MY1k3G?wJ0H+^VV*?x*CZv-+d& z^X!yOF*ANRHH3lq>QhYblb9#ZKC3-_z+6W}34v+EfUeDqhKO8UObAwY*0eRo zf4=Z&Mp$Nn(zyCJ$xoR1xip!_Ktj=8NqgHwT0>eBRJ?rrCIPJvSF5u_f*i|q{1yQh zb?KR{)yuf?p0!)Ad{W_xa2Lv}&$Evx81>14O0wYhDHoOkK;@ijsTEYo1L~q@VfJlG z|BqADsLrS@gyDy~a(qb}xD_F$o1N*cdW522$(d6v0kqfXU3}Wh=kI2pZY|mDSf1Y; zELI#qL5(UrfXPA%-;%yqs-`r+Zl9C;dJIS}fr>ZW0u$LAUaViJJo}7N4T~cpg1+Gf z^_}KCMDu$M&!@L3Jr_iy7JDh3^f5b#Z-d}ik=@4MBI@=)apXW6L75LJFf3`eyX0UN z{=`=c8Jq3Kw3m4DASNKT{zCra_3L%Vf_+LWQ%*>Ii02#dZoQ3UQnqwwmIdXjbuBjY zCevOVHGOQ5sc00-$6JPV9sffdzu5*3zs1zN7O^2))Ize{t^L})bRRFu;4X_q*O%xz zmnLf2(j=%)Z*kbYiTjBoKF=KMF8Mmk#l4k;y|_eV8Te~zE-LJLeHgJ4l4bi?prf@j z$-_LJ^hh4m2wMLT%~v&sgtL@2=WN22E4#6F2a94YbBlXu%K8t*^RIUm9$150Ww9Ws z`mxsXGLICrl@@6}EMwfDAAd{K_4QCbcq+|)+#2$M_SySea}rdz%9HV+yJT@zVrDaG z<$^%gGH|=U;rH2;-8w9MEnv>yWN~u0;DHAvqh%~87TFusECt4FJO#UYyGMcrC`XCr z<6r&A=;YOwe!EWj5b4O*XBDmibB4uOQ~AS!ZXKyb*kYZzEK!)V+s;Y<=)#;cbz7Ly|pa7U7(w)0Yre;-d`k?e2lZS-5zH@KKwlJrkv5?zm6i1IJMtLlb%|8Ct z5@i2A&gTeRc8Ex}=`MK{Of)h>=-NS+XBqgxWA2X|oc@quu9?06PaMO~q3+Do%x|qh z+cN|QThf3dL8rT9Jeab4hETr)T45RZ?oQw73peonh4UZcj~imnp6wwYF8%VJqXub8 z?;ot2z9~#nLF(p5aS6i#qgCS$D?(_6)R6o>)!!wtVqBdIj7=4@#rR zZakg0RXu}T4^PiuVw5i)j%;YTVR}42>N&C|JT?cqoI@0}yXx`xo;6T*aLrh(;J?{+9+P0~c`QT#KILp+U81=Aw@qT5YV#qQz%^hpW0dO{7p?LNs zt7s+ilUa>vq&D1Nm9bw38r8xOW{rwn~ugunT5NEsm680gg+rcE>{uq4W^fNy~Or3j@ zaVY(zeMaGKB10tX$_MDu27W+)=A!&lqINXFn{VJ2Y^n9GH_s+4RVLx(!xaJQQ_x%Yaj^c>?T;H+X&~2y~Py%nxx3@O#krwDhsPih9-PDP?&A!YO=yAPgR+_s5 z+#R7aoF9n!_2IsQetar;ck!-$n$Pm^u1o@W$Nt$WYM-|6scFN$$yCa_j=dX}^=o0a zo7W6{2FwaQ=C)@xa!8r=A`*-WFu?>aXK!9MNsKEhb2%0cZyUE{fe&!N!{fxrCZ+vH z?>o$Z$G~fV;eq|1^!|MVQ<6FU{WMz9&${n6KUbFxT*ZldvXL!RpnH~KRV!G8GG+L+ zCQ!VuW2*O7XFr!#ROi*~0(nNq70=$rv|V&*Sb6_l14vrcN~>&#n8MNqEN4M{=@#m< zH`B`|WXGiBc8Kxe7+ofhn7ZgW{ZZlC9rm0m<8^BRyBzwG3us0s6OfZK7Ou9eXQ(Y| zu0muxbt&K=L&l#iAacB*jqpewIWURX4pBcGrE}tGFtCNOLCS1KTbVcvE?k8`uo*!)FZwRbb;7NYMzq^B_ z%-*2iB&RbUyd!-#)AEy-aL*art2f2fgZQnxcK`+q1N*edjICf9id=w`sY-9^TKG>z z`f644M4~r1f^-Zm`?TOpzF;|uJeh}{St4G|IrQL|+MJ-}W$;fqayX8hHFKQWELPl)V z3#wALF0oRHb~%Tc5fKBG4z~%cz`iAog}zqRED7>uiMG}GaoI&NmJ@uGQH3HO=cX3W zn;5ZsPHFg-qk0(i;$)=W_FeUbKydOQ4_WQXP>J3!=?^K{2U2bgXONJ~$Wvvh?YEK! zf0!n@&ePI_y8?NK0#R*7S)&`ii4#(^$r~7DMa`7 z;_aJWo9#4tllW-T*$&>(q=~1!c1_-HE+u4}mMmxh@d(&JD;y2o;q*`Y0c;>72t*}* zBOzyLxf!j&M?Wzv)arbWdF_QIpBWQuMv)V9UhqF3FKT`QGkhmtwHB9i*>$dtcJ`E2 zL4AQ;HWZnc6GJ=V4sPeAjBZ1Og9fY~A-3N_$fBtHId@P}ijCOkeTq+76h#9@ejMRf z*dZ7NCL$_yL#9fJ%O9J0C+9K02-B4cO(8-ZZ9@!#1_FDexAU0qoI}|-cakg=Yv)P& z6mPcZ)(4JIZ775JINUsg^*Qvj#7^2xMWOA~QE+AfbHtofkD{1vd(DXm2%m}hx-2je zg&B?JM93$)HQDjaLwa?^=qFw%wmSbboBVEmI&)F|RI@e<`;6<-uTh0T@eMH`ySYbl zJC7poH@=4i8|sN7W;dmWg`mYV}`m4)o0J2vCK5z5~cUMvs6M)Ofi{b-^5zIOf49?i5#cn z^a<0XKhAoK>cu+JxetC~eR$-{miLS4j`-u16lUIUH&TW!TAZ6%BC6)r;(mhfs@{tG z9-CS{4bFnRyj%T@i$o%hC}9Vy*iH{|r}OM}&}tD^Pc{7dzMn3&n+3H;W+ypM-D_?r zi7*1u61%@Cb-y#Xaq(3S<{1~XDPGprFJ-Bw{W7wAsNPmY5IZX9zZs=y%X=kElf;=Y z9qL#rUrGl_fP3~btNDxTSQ}=}cZ%viWs%yGvXh&qn@qQ;XKVsx=fM2oE3;_}!(&ln zsof;P9;!LYQ0;&bG{wX_P;-7(PpF!|vbc3DY9@6<3(uKUg!n`0ZS%DFpANuUyo#Uf z)}rmc{Zf3ZIwQ;N&Btlc(>-W3{6H2BX7jEjpXD)k+O}K@3Vxn!>vq%$TJG>>*p>qIUd?K9xnT2dw8+aD4@h$0SEq`u~YL+jsCfg=$Nf`0g|d2{b+Y!B48j?-5(R2LP+^;w9?3I&A9Ow~!CN56 zNSSnXhrg2xYW{yG4_@-U*BM!oZ6SvLDzl%MMr|s9j3-HxHhW?rTxcu)LXP_ge8-B% zQhp_48nybLNpTii@uza!hmC1Y)$?4Ft{GJ5Mo<=Q%pS!TJ+{#q+ej4b9Y`US%@ zV(11SFVw6EZY|X?Tj&y^ zvbXiNmV#4hwRw#xS}ZxC4C9_we)l~Qn&dil_DvmT#c&T1C+gdB+}n*=i`DZ&lgLDR zBb!#|%n~(`Et_uE9~4@PpIg}AiWN*oSk$2JT%D|yxAv+5gXW|7@_VlRG?3r{r0n)v zX5qHdn-$l&Ce^Sn>Rr$1L;GG z3XXi?cN9ud6af}7 zS%DdHFw>$L-}^?o(i65mTW{McI7^ylw{>aL8g{*4klxy_s0bmG&R7L9OuNLyeAFWO zxj4<=nQvf5`hR9rFc}pWcb(uhmG*uX$dkjwoGXm~D5}b?cCS&qW~*K8Ltkjs5*;!0 zTr}w~?%7S+ExRp>7uGpG1>@q@--?S6lIgCGfE(yTz=HVTOyj2YwE}P_h2U3}0L6sc zKOi1I2>x1($*m}&xe8CM44bb?W1Hpq;vtz~37(u%ljOj!E^0!CY+RkfmyEwRo5B^V zbu(W54=;UEZ-lO&HDSS$dli9WwXV^BW~f6HtJ_6G66R~4OZSeO5OtWDq9158{Wbg{ zeRhaqip7I&bwBG*4*{?6u~|0be`ZbZu&fo#5^L0Pzdpowv~Ed_7^xP0`8NbF+rk?^ znn@TabG8Yu85K9%#v9M_@Ozm5m^oZL`>J@+Qgn?2RHxA7d^|9bPbdvpIIOE z9r~+Xt55FJ$6M!IJ0t&P-EuEtAOn1jAe*TmR=qe-0kf^Be_ofy`=)rldB9`~pXUiE zjxt+qm{5_%#X$R)sXetMQs=3ZmVO~u%8aaLh7+>7AiKlyW>6<-LLUz;}AZ^doU^D9tyV}3reV@$LI>!yi=vP^Z z&H%>ymzj~*hM}mzbz6hP=2|^TvB4tiZ7t50JMXR7p=ZyyNtO{=j3%NffZ1xy5(1ec42{(JHvZjv?6!K`=c6x;?b zr%0()OZ4ID5Nm#1;KoZ2)?eKUdaLi`Dn)CwHPKquoI`CiA8cBR3y_@uo}}nQ3=)I? zrJ^>CNwIn=6qG4c;sKbhOVgR%#+k$WLkAA^iq6c&>-1TbGPXCHE zl^rDfw^-G^&)_1t?4A3ye_5^lYIo7GAZB08>xhni3G`jWWtS(>Si~RB2>UrBEkni+ zMgAgUGaHCq|Ao^E<${w)h{^de6*A0QElU0ZcU&gRY>4UhxPN~Fx6%DM%QYsOR8M1h z(TMFoBP)QtJ=;x8aOKYFG(;uWK~3*YflI92S+7V+Lv^HWOHH@?H_$*W=(bQ*uT-4A z1vDnQI@YoS7f(*p&!xBjjA2DCm@bl2h1-P;+DlQkE6D(b0s|A=H|E@b)b^LnNy!cN zd7DMVe%kYhH_rZb)(RNZyVXw1DDKCpDP%b=tHqrZkz*eJWfg>gIzVO{}tLfW}LEv_o0?0$!UM;us>VMu42p#12G6!j`;%|bBo5D z3w1pw&*l3Ye`+`R0U%D_R_R)=Pm_*$F%jQy_zlTXff=ThYMR0JiG}ZB8-0)#CZuD? z@FS6n+oy_e;#P%a6W2rqSHU$Va3wuUN5fk7DQ<`T+GvjB581J`JjK&B*=^&<_T(8> zvtjTdSJ>5jDs7EB%vZ_5309GjEyo`!KxNeBCcaJ1Uq4Gi){04r9bLT9CCZkZNXGk4 z)6IxNN_Xh*~Dv@7_6X5KCneSI{!UVi5- zmBCFlSU{Si?bUmsI%;e}>l`|RPU zpe9Wkvyv}!+(*QJY-eMiSuM1F+WJh!QU`-HpgqsuEZ?X_x6Zt;9>=%tDNA54OXtC8 zjLbD ze_Ql6>s666xnI4`#02+~80O*=-|RQ8y?yg4z5&koP-qoDAlWKKosFDRZl0=}nRLli&-)IdWi*EMsC#a$7+2KDqo+;mB*UtUsRjZU;@<3ljPgi}PX`hb!^@HmFL)3c*QvJUF z;~``xn^4JK$4c3!arMK5uuxy* zZkjakfv%B!efrY}O5E#6Prv6S`fOH`_f)um4@?b5eAxVnJV`w#1U04cyEOJ4W|u-j zat)Jz>QUujt&=SSw%Sa9mmV07fG5GbARGF@xpCLTgzgJV{S-#uIkq6&czjqGYQDW` zRa-vj>oZb$8XW;Y$;A<;tf~+cl<3klwjJgRO{!C#ul;J)2g$9sNcDo?ejU!3u-C8v-#^SR3A8SdnBshk)yr3%_=vv$i~w|N-{B{GM~5b8S7ER z)0?`r2uMl$op(_CO#|HLNAvCYH<9^|23;IYM|>NIWGfC{pYf?-b@Cfi=S7~V+3G%i zc|XGDSdSnLKh!3ShVzyT7&@|9szR`;HV;|#8Ww8J$b`B{e1%K26v$s~O5#3i&RgIt z$h<o)6c&2hZJM-K}D*PQX6#)&u@Gs$~Bun)HBlts& zv@yyPZ3R}GJVKjOq|r zm`l=FeluTaQAKaPdYV5~LlOFxzQ($?lnrOpKvXVus1w1`1?ML3azWD!4U3JgED)hx zdS3`7p@H2suYWA7R<(qBV7dlt#V`)Q)z`2PG8aSLgs0TMzVWX6Q?-F1pbX8Y@+5k_ z$I&<;W|)Y zo03OdFL?_Z)E#2lr8_Ea7{=JD11`>1r!X~{xGgEs#JfOFH~c3T^rhi_;NuUK3TysV z*77c@IexN*qZ-t1iSU6bOGEt;KUQyMPm-ZEr;%pJP3^9(Fc_qyfxvKKJ_=nz((L6lfVg0HPi-uwxLqKczwmRqN}>q)-^ye z{fJi{Hzu<_J%aboe2r>>pX$%#9L!!IH-V=7li&O&-w6%lZM8QFXqrZX#Ta+&NKhR9 z^b=dzwHT$k=oLcG@GA87Ejl3u;j6%J|9^g4m-%0qYv695zBj?JKIMdC13F2c>{2Uh zj`lfHUxlhk(Fw_)$zKfkC%;(Mf^2o=3V0WbJT>U&UB?OH1plf0Jg)4Tk5(Q1!Ic`2 zxv%Wr-xv2IK7twlI`i1H<1Q+MtD7b{G4ZM3@5CcMUS*`JGnKU(-VUeoKA-MIz>pXa6zUhI=K5Jm5Ovb%w0OBpM%UI}JW zGQhLGF@`!A-tITLa-dRXeSIYqx@F{r1vs|DH*{gig1@95{^%>iD>e|hOCRmLz#@s!~YZww~W2^Cbv0X`*vs(KGfE9$pZiGuu?jJtIz z`g-DO9_iP^yM${}hefAIc`}BZms7(YPP(DTVnYZ`U;@b0ABkhJ$w%OsuEjH;bf2!= zSuODH?~4Wz`^UwhFEfwzsYdrE^K?`tKUFT$%GBSKJ)17E*Epe;hBrV1PXB9w)O7-4 z;iA$nh|+VJ5wnP8ip#aPp zos$wUF&Z$lVa{Xqr)QhWn$%wkyNJk37_40Vx!(0|uZ9N2r>z7xPrk$nH8&JV+qx{h zb9Y4A`%mzgt+}V-PdEs_B;VRwb4QPzpgI>;e&jh4&QBS;y~erfxSvocnFCD`Au(ab zgu~qI#MBEik$)`utW&8Bl!%Mpwzv+Ju5I5=9ma1$^-x=IUil?!w#0YgPI|5|buwzb zp~xWuLVKx*)A9U#hE-AMh4G+OuDq5UJoCcZOL!NzZrM#?>^tAlhLR>Eg2b19S#3Vl z)M!VY4%DL805_Mw1TSv)cc5dpb&YrniEWTW z?ef>g*xsu!hU4yGE(1J_W{lBbUL!;;q=XXNKn(qm&|%C4_ng7{Gk*!Me`S97-tI3m zV*+`F*L6jE{5a2a9 znz)B=k&m^}AxmSGlIt4UN`bDp6(z6U%0+rD$!mo{omLCebdfC`r!xgkNV)OMeh)y6wGhXwGJhm zi?@IM0=aG8K<*t~*$$Dp`WA z%XF_o6$|&ZPXaD)8U3*0WB82PMTI|D<-nQw-O3ty2zIe3CP7-%U<7|$u}v|dfF29a zewE$Ss4M*YBFxWhDXGz7>s=*7`{364X28t+Y-RpJr5#gK2s5mfQrH#^Di#Ohyc{s7p_+ebk;1~NE^SD-pV=Ou z1$5QIOs~3SZc46`1tR zt57u*M98T=Z>!1VRvCx~Fg)fk z&)KB{ZM{qm+RDTns^4Lf?x<|=JrI2QN^)XBTA_oM)Dq|Ypg?&^ItD2JIBNvWJ}!Kh z18QjK&HPk7TOW4B7+leqjuY)83a^jgQ<3@V_l7fbA}SV>Kj)W%Ed!>O&p*6C3gr&r6UuZ|@2r3R6ao7Q2@{8$uInSM`fq)>bJ& zzZDk`BUd6J!J0p6=#L%XV
    &H&6K{$;s^_Fvm~|B`lnr(l^TwFn4ghQb7$PCUQw zX7qW#u9V-vam=42{cE5d^IkY4`1X$)y5klp1>{}xC!Rb_04KtJ&_4b;7AcQCy-mX6 z>v!gF4$g(SN-64Jf3h_xT^Y`U{gvZpvq;0uWm9gZ49;il-opMpn8bQX)y8J%0JUfT zn)wnmlc+5?R``q}EiH|$>ER298sxKGuL6GfSaRSnNx=7f+taI{U(J}mAV$ZI7D>#y zxZfWXG5S!Bu;bUypiz%NY^xGAvkv7qo zFy@CUf>_Tj)aN@!vOAREYkl>qzVH?0qp!3gVJ0(@AA|l3Y0&rZonAOLfO%rN3d5;m zoC!KT%Qb?_H_nEgT>QjTRuQaTrNwWNOX}zYuC!BA+c0xFYn~dqV*9pVlcGPXy zYEr00*o$zyAy*Tikg#6{fjI6jLR5VX6^@uPznFSwq*18hdwZ!|2Axx2gOU zRn~d?vJcz4gr-G9x8uf0zXfOE{`PvKIPVk%EQBK&L}V31QvGz5`i z>F)@#w|U=k;m8>V#W()$#Yw6zO?InTU1l*#T1pE8*SoaIiis3qnk3{2xbdZToq*ht=g}!z8{pVMHEWmm^_wKH#b)yS`%LN}l?^y1-V-G!?30 z&0PG~$+JGsf_d%$5Jf0;$|TmDKiK<;Ot-sSell5UCgc3|*3$zn<1gWbue=c+8HicW zwPcb&;<($)9ynm<#Y_XNq~~@?cZwBPlQjFF$f+!NB;xd=4hV#SHDA&-1nq9+Kt+xu@y&Je-%tp86Mouc#);FIU4X>^9hoMaq1Q zH^N1ko^8i@cNJ+-T*p&N+Kx%mcub$Oa{ev4v)nyu$@Rt%0=EG3<=c*S8&9?`y)uDP z_us}>^iXw5bTJb#x3%_4t+)%9h68LuBbV$*A}l}Lpf0g#27OOir4XA!Wa4KQ5-qc& z(Q69bO!3YyG!ii+BwyVaY+R*`P;}_0CJpv;XV&d`>Mo6?JJu_Nt$rEPgWe_^(sh~2 zR!H7jfc`O({T%l&UoJ-3x~f(Ge&y9#+YIe2+RPe#2f`*HfZy_hyF!$sRoo?Na8f9J z!>nOxrjIY+>Ogd=>AY^j@b{EGTw9k^%*c8^8BokvR+QCqA6ohC=Aq_Ubv=U*SR({`J7fL$kBakGbq1#4L8&KJp9 zkM}Mj;z*zK`$p7D2p#x47jgL;KuXymsd5;3%pS6h>2GUYB07m{Ov~5p6A5cPO5{ANaRbB$!2F!Fl1N+ul1Mr zss#z8Z}@$~3nhen=OJnWGmY2+ZR*m^@XFPwNlLyNTg+jK<1_Vd!~|*TwDhx$9QwP> zKIUGnYlcQL^YAwSH(>gbFt+xU4yr?@t2dOIEg|$&AEGTV(_8@zQT*wyoc^)a=Onu! zfGkpTzxx|DLH@j2Sm4w7V?QbMot}@}nK%Vb%cCT}`3ujPg(QS;Q3t8zVo4evMdp5B z)_v4H%q^RZiwS9Q?s3{*_Y*26LGknJs51!pDBHcgSLe@mJD!<#{>uZ*;zE6AdXUDk zauKXW^D23Q-cWLo1kzjCzVKdM;Iw)&bJDyG2CF8!$kg`K-q;Y)cDAFDXjQY(z7cNT zl19Fae9tu;#2qsltextStV?a2k;XBlg!m{I^_nlu_!+82} ze}lC#Zm4d=?yKFxbjq|=M=5iGnI2b!Hno5!0MxL{&dapNUuw@?dHNh8 zmD|s|6x$q_I(E>je^xG#^S>=lzOJX6aGRdFb-}jtUTq?qS~4wrr%46aBo3d)1Z!IV zi8ZHY&P-$Sy^QqiK*eR*a2@L;(`I&>xPmD*9w3Q}@Cd$b_9x!%Op4LuGSVZYH|@PW z-v^zS%t_XnxLNLwgSeDAHWafEMEGh#YhfFXF={2HYJ*$L5E5pKadncNWx{)T8XF;c zi=PVpNSMX&vdj6qIW7vlB4J{8>^RWMQ7+^-)R8ku%S@vse+Zk!Gfl3fY;JIxNZXw6 ztDLTOuGeY&$td(rE&gs9v=dR=bZ&1Yg?p33!4MLu^Ah(A-7ogbWEd~;#Wr=VFA8c9 z!TI`9L4XdrDc$DRT-`hFqI=Xa+aD{ZL)U6_p8kL#-z8joU61hg6mk{s`|{r2;)51g zHhPOz>KAIaDCcqEtV$Pg%t$F=%JqYkLX6>XuA*PF8TxJybEg!xiOC$xNEaYPEdqUH zNMXFm&0n>gspP-m{!S<@^42qZj4Q7!hOBMNhS^x_&0WC#$qSn_Px;|9Nc4-B=77Wj z5XWX@bCB8=cS-`aaTZ#3$d^K^3dOGKzu}b%dgS%dK;<<3S{bG60*6qUTGrjoBFB8_ zlz9Tx)4>D3xJ$z9D8NSAtfQlh*c?^YCttre6w#K8C~snxSxc$fWMDCbByJ4{xu=8% zsZHiaXH%oI(kM!THQ=torC+$YzHzPFcSAb4>hs2cP^3q8;nJuEjGS6uH~J^JLsbdj z;n;BT6iSV>RgxMB>I{{(8mKf#unJP^%8f6lHqK6?Y*H+&Y+^22i*etioq|D90N%zu z;eL=>OKw7WxsV+Ai^&E$-j02~w!*UD2F37F`~m3Ku_Tr3!l_Yh6LJy#q3HE0(DegK zZMJ5?x7}&kKLYZ~8=7qT4G3K2hi_#fwS_+Bod}TfCn*kMhFL0(xFYX>h5MiJ0j{a-bp2lIkR-s_TBgL zq_Itmc&7wj-fHsjUI7KeF z(3F_KJPiemJ=I~ZbOV!gA7;sh3V{IdfduauIqE{!#DbI;W-4z%lr~Y5x%5{bgx3qP ze@@lK?A5_*JjZV^?VAJ(Rjc*fjfb|A^H=$@!}yxzRLkwUABM_)3JUd7uo|p1h$;nW zQ%+4U6XUmFSS+9u=J8kM?5rn?M5tGGUsHgcWbAoLR^hws|3oNCETH4&@xs1+0|GiQ z+RR~t;UGdxXcnT#T+5eSYUQZyN zj^MYX%C+6xJeak5oI@QkST@pVADl%zPb2#*_5@&4Sl#jSDk9HCz&^O(=hDh;U2B=R<0=H{9)j z`6nQH3G2H5>3lL;Nkk0lYe=0|1wZ8yz{HK{CuXxla>3GrXSI}8=W0r&t`JfLHwev$ zbR4%M>&$#3u)p*d>{XKE*ZudQ)M*d2=Fh$(8eRCJtxNLELM1Xja_0oh8Gq-OisnL8 zE|rDb#VfFSZNgZl1>b?Zpo?AiGY}t!6_x$SO_xTYWeN)fZq7t1V5T!4+C=#j3Q*9l z0Y=?U^{}~dm3XKFONn4pa*()?eMst8a=)AWE`>H~V-PHkylp9E|B~QwdNmd{)lc*w4-Vnzh6f z7G@YFG!Z#F#mfGO#Uhu+1O_Qt&BB>Sq_h@UUn;_gP(xkl`OTs4XV1T;b@LN2Mukf$ z0~{{3Y(L%RD^8RtEW*$g2`vhB9j;Fp8I7)Ihm@Y_r-Zf^z+V;3is(XJXmD_7^X!E_ zS~q{5Gkrn~yau%v!xhA@JXBRkQIZbLCD*DLfsBeAC^8J$b-xV-+lQfSA6@P%-erme zs0(Ei9NI8@k*vyYa1tRwy|S+e*tl&MubKadQTa{sPlWsp99lPfiK)u&a|1$xf_5EX zrNuP_=e`JpAQseEboCKpl<10P)V+!s+;yQOlGk`Z(wX>$QeO71q|i-hj3JrOP^8@y zhTVnbTOQdPDI3Es2aGG#?DrU+-;^wr>re%5emJyzmdC!zZpjECOOdn=fZO6~OmknZ zDi{0`0RkN4x7O;g<~JkQUNWkITl~Tq zQn;ZerAt|KE|$7@^FMPYsRh2qpTZv#;^8%8LPW;oanW^pTYfMEF7(>P-sTtCWo^mQMq?I)f(wn)3PO=-4mEr&XB(7Kq>} znfwxjxYu;+MyuUc&Onk#CI-N>@!`E)1)^=*zat{kMsIILh)f;K{ODe2NurXoc^GC| z--)VSO&-R-h8^(*75bogkavEIJ>^9jx~I@p&m6}{At;itV7u(l`I_n+{|ELAyxP3} z5{kIL}9l4#K&S66g8Lx#~{<-y_{Yiyih`|3gkl?WybtKAnQo^ARThc@Xb7 zjoEGT$hNfm>b$1LND;edS3_kJ2~{(H1*G0k&~9|m!54p8Zv^u75wC;)m>o}qjjssZ z`%Sxl6$!1P!*@%r)^nEI6-j3nmtm`g1Fu--KUX z`A`0)Sa;b4i~4nH4HuIz9eX-zY@1!`%8BJF?D<9!>&!HeQ;?6tR-Qb z)FGNo4_O>;7AlnVjlW=7{(7bUDPw3oeHS?gp!Tx3bg&WZ%B}_EL9kaIbd}HidmFNk zaaou9AY5x6vG=@!$Hagqw16oIiBAvR4FMM ze~nPeQI8Cb4L*slF?)3Aa`Nn;z|F(v8&}_DPDp)5;4nUYg&mA2Z;~|cI7x;!e~J+F zx6S@_pAlzde%hok-#Ty_#WWE+NE|#@@Mm*s9c#@FT3wdi%=4$68fZEtNtN zi4@(-u!4!6HC<@#DxZRC*7Xg_xh=X*V=c$9NH=4BSc$4Njx$mBr)H$h!Qa{r$zMjP%n(-ytw zfqF*J5WX*FCUS6xrH`nVb`-a6rY@BtWC*Am1dt<>FEW`le{-IACwyDRhoeK6k z7H+;#`&-A!}f`w41_Apzv>9 zVg%Qasz)3xOH@p5?x^aPsNXU+j*@;s7`C(cYe#~u&^9BgCc*nMtOSrj=tHyLT@hE0 z4oy9t+fIw5A?y6`JV=8_3WcG#(ZNldPofcAw_2&nzp<#4#xQ~}f-dsuTJx=YX=dqC z7T!{K$U|uJ$BkKgwTxqvhVk~$ z1;n`0~XHn z&VkE6)$>!zh1Ze6ryfw>obqaKJ(92#fcUYrWBm(-wMRO|ronTBGt~Q^) zb${f5G))8eKto?Bp7bGP<51^uDiXv`3Fx59pE74Nr!CvMX#UCBx7`{MeC~Fd)HxSXaVOe=oA%X2he(JVS zucm{Im+6+pxT8#gP{$_L(??vJe`?p0tKxZ?ejb|!h8uSnyPK-Ok zlw9siINHJ6S6s|3QlHMvpN3tQ+&;MEF(&^Q%%ZT|K}8ozv|Ql=j%|H6CNe!mtsydd z&N5l2fp{J;X_s|ie#1{M9sq=kKl(t(wO@VBlX-=XT%0@HgB$ibxMJsysesvZZ*S?$ zM7M{0xbR-cC6z}ZWZ*`8Gf>AprCwW^l91fnUQ}2@7_UZL_cvV{uT&-BJL?4u6vK4j zISCA7kSwSHJu~)BS+YzYhPF9v zx>ypZqpufS)>9NUfHl-T~i&asmO;-+AKAZq5?HwdWuDlb67T*}NMYaQ^$d=7Z#qPvSIr-WPcOzQsxUG`gv5fqw@HJmApx{AYVnc}d84 zGvczp@!reY;VKD!3ye%t*Dh!7Tw`+A48u`z0%29ZDPraeqhj?Np;5&l^I5iJnjtS$ zIo`XU=hh7$O!N84)Q$<-S8k-^MxqIQVpW3OAJ)x$6?NQNOp6q@kgksnWdFpu%<0p8 zl<4iOj`mfylOa2PCLJ^6dCGusG<^MyRcY;lQk_kg_4ZEY!2m&EW;h`i!v-p&wwPtA zQY_^3H)49#I$SAn{Vqnvuz3vsx-XBA*Yjs_rxVY~MRfpQL_FIPa(isBFCjEAkB+`B zDN{jXYhp0-xmzMXA!64aefknNI4qhcXVcmt^$ymsu+=WG%gxs&<2m-)Tz&T&wyIA_!B5 zLf@%|tY+y5G`e1r#n-d`Pm?Dlov(Vq z1ra*NKds{K-j)%>bSGHVzKl>-Vel!oaS7YB)b&0l8JnZ_CxmmKhWi9`C%Q`Apm(bZ z)u1zg9!}g}`_A~LmC0M$cc$UI>3(Dgt=mpu=Cv*z!mCPErH!vUsW;ebO*V|e90V)MC!1HHEc zG7HvWHXlTqjV%yuf}lROr#o>9b5!swxsAZTm*Hb4GuPHtAB9BLhGl?BLF&db19gwu z%|mRLD1RB?8+sxb?J!ZhIuHMR`G!<&m!NF`Sd*-uC1~Xt?rc{*nVz3mXg#GlHm=K= zrJhn&{{iS%Uh1U%xF7d9&2}uO;T3$t)+X4XcVp)Ix~gMHLTy++s6}vtaYoNQ7Sys^ zvN`^dFX4&gdB@(`)s75e6LGH6=?SPK{~5g|&v`2wKH#v=8JRIxINO=~g9Wi#sT$-8-l2PIYGBYZAT zB#Rx@Qv|wc!cy>9NAQH?sZi1C&?9jgx0i)-VV+?Indo?M%IceXTtzuL#@{_Yj*!4+ z6&4Osk)8rr4t5JILS*F_GidScjXNmJV+QmgGfL7uF_Z@uaeP&Qrnk|(9cv9+)Wyh% zgT23omHbNT%?->F9!zz7qi&TEY1t-QTHYI!%3*eqFa z`j3<~j-5XDrp7MpC;&E4vgRO~%V;IcQ-=*rRNiArP~DWIdqO%7Ed2PY3faq9A*}tu0$Wg|S=ufo6m%f>^To14CK#5Z*P6;?2GSY1De6E_|<&L}-rp9pR z8=}Dz*^$fm?usJ-YtaQvssc1WxANtp0vkuqpNY{+;w#(b6+3(CUu|!MxZ;k8-JFU8 zw|f@Wt{DF%%T}8`U!`2Q>!(u~iB#tDG}=xNvz-*VvHyfN#=VG`Qwg9)WL5!mp|{u% zGD8+0UjCl{z~SA4N2tyh4&VoNFYRxHk=4G}i z$QInG{KRT=DDAH>Cv8-nFgvwRU}k>b_}SUe?WAub{}e(^V62iLBoToYy?W=u#STDz z7{O){NhqHgj*_Ckk&0ie@BH4>j51|=+szZuYgj3-Xlhi)q`>or80VM~sujBk^&7lm zxAk!m5Jh(DiTC-LY%JGhl9TfV%UC>OuW7z|5Y)}F5#=N{n6PKZ&GG>u16@yD^Z%{W zcobKtNP8<-gMv58$+Z2;Z8tL;!Bo^0q0E_YUqw0sx~giwMHtP{7{H_C1p7%vZm0R5s2*@g#sZ2;#Vm3n9*m*in&ixb*gL?F88+cs==nO1c zZnd|AQ+nwi-|{`2<~_6lg*yQyi#P&QdGab73CD}{~)T0+HI+sxaLlw)-${? zQ4K@6hV{zl*M4KTnH&NbCb!q=ev;?cJ<3f`3Al~bTPzy$M7BmTwi{jF!?Y>}oQSv? zqa-}AKCY7l@}gj)DsARtLO9u1E`wuM8s~G8`}CiuKCS%`eA=}y$4Q8ZRJ{CKQA^1) z4qy}a6*i1e0v=d<`$;@G(=&@rqHh{^Soh1z;grPa=a-XWPvf7jKa)LTq6ps?Hz&jd zDe{n?bz06*oPTpD^-m_SmXAS>+0@IpZpJu{fj$+|rnRjF&^+l0Bi(js#hI z!ZZqUlcPh`-*%y<^PWsv*DA9Fw=}gRKg@Zi_G|Ns4u8H%*b~yd9}!8jo5MKZ=cSD=Uhv&3;#Y`@Iyws+NRA{Y52mC&dCV zMuMvgTgPd_-z(xei;K`lbXVI!fC`tby@;Q?&mMux-ICGg_)a>Gd{8RN$n{c9D-+Ky ziFIXbY3VpoCX;c(@F|f_4#Rr;8A)g@cQd)$?8-`xe2~ILFU3z8xKBjyQ;Mx)evf)m zRiH8;MdAqIFMjS!;L@$U75$g;nU}?eE-KyKv)Q+(fb4H`MiP8cXO=f{zO1$MK#JTE zB3!JsM&P2ZyjzSHRav|oOzP(r>=VK@a`{5b{I6krq@K%ANVybL?*1gY#P zH*QK~BBXyRx0auUt2rvGI{AL}o#y#sfU$b)`BvH1LZljG)akiQ5wkDYcAB#5GQ%jP zYNOE|y7|4yp(s(*&RsRWq4WC_N3W!_Kvh?e!VVH!aFq~2>?&%NNZma5p(!>aG?~6S zu916r6hHRZQ#^Gh705l0hs3_W8ZvOMwWt|H(4Na_ipp?IKB)TGpzJV)SDjdJp?A|p z$?^9=Gf^8aRBTD-VCK^UR^e5%eR}V-w@iz_=IuIxDc8{xZv`TKz4WQ1*c_!)iVrhM zn2a%R>X>Za9c<5)j<>MfZLW|2D=}i>JG2JG7`K+DvD59bU!72-ji92&w#`u18hi*? zA7A^L!2Hcj5`JnnYu#4-HL{z(1Qn1u$o_Igib6oB0x%(WOKdLHsTWy`UUPFIJPPRv z>_GjtqN}KBE$z>|=n2s+zBL>{RsQdsarZc2ZFFra;b_*v3~v48k*8O8MlWEm6PD8M z4^CqG%@So3S>JZO`JCJM{n9Fq5bAnY&kl!>p1KayRcngR)vcxIOvZeOVX;$EB-PM* zw&JQxmn9t_^JP_bww-O8zomV@ZyNZM=PjXEE7>J5xbl^lb?GpNSeqJ zjUl#yLGL?`Uit$z_}0=ncBZh3A|NT-T2x&fGZi)R^>YVrk({~>H)6U{@@9AH&E34Z zi3Hc76!khyZpn%Bdp421fJRuw&hxO)Smmw#;aUS!Mmt?0S1cO7tq1h+ZcwMW2!I;uokjRgZND?IS#=vD`ubY zkusLyb{|uwK>m#o8yjO<<~^%KDb`Y04JvLb#Dtiu7Zet!9vEL6x1$26=D0XYr_0BK8MF%L|w2 zyHLyWp>W(Iu7J!^9!qmSh3L~-In2;H^P4bCVXvP?x zM29FY;w-PUVm7BAVjB?Nvzsu+_EV?rJVifQd4*2pc8ui=N3IE@(x5a}=kiIa5XiXP z0Mds0#_UMhH4gva(%TXBO{LliUtedyez0Zm(>5^C9PJs#Q(itD5UPhia|ly1n70j2 zVwV8-tEi(a{J@LM!nUBkb&r|wj`8~uwYRe2rwP~AXiKVzklWh#GQbtN_sM;Novsq1 zy{&h`;{ox{S}}=~&&>uRo$l3l@8zJ_^@|#h`UC#P)kq9(p@j$f$%ZO;E3ql4tyBpS z_R&EQaZ_;R(hrnqHF<)irCm}|rexTUZ=%~8zH#b1arpJ~iEZ}3DG?FWF?&11_%0Y5 zprzs6hG{ib7!1GU5*Q{uu^|sdEw-J0b(xUA zZ^B*gz9e`YZ&f$L6q6&0k6H|5-x@4WRhxdBx$j5_LVx-ckd=Dmf|#2UkNHHW;dm>w zg`&$?GLtn`sCMJQ$oWK-+na0@dv}NNo-oP5pI^bPeL|2~*ZR#Yo8ihn&*|?OAQ<>3 zBTG7`UX~3i7Ma`oNF^SADkI{gqvXsV`Vh9g4(Ar~AI<_v1Hi=iBn9Dt*~Hhqpuz-S z2#Wsn>{3IhQQG)e>pb8(M|_`>*B+vKy`ng0&mCIP&dy$W`H}$p!B-_9abC^(AjSR%46nGET z{$=sENVFDZD;;3c72{n9i}dA*@w1W5@2}iqG2uoATAs6CPVs60B>kMKW~{U+f@u#V z+K-tNm1r%yAE_k57lq5)3fFzfY10)cM$=pOTuvU2*n2A#^h^I3dH3L_7cx|P4?c{) z55urH)acpN--CGjb&~;Jdl%NCB@VfCiW+4UDTA?V-lu1r4V^}4U&Mwli*NHih>u@? z6i9UILO*#XMp||m4?n}d&3QsIk&E{f2TwsZws9!PL8iv3!RPy?V;N__y* z)u{;Vf#(nj*f*A`nhM*G_oPCB03Q&b*oicFFgEV2to@(B91E`Iv+a!o?3uR9+G6(wSe$rMeEHoguyCcSxEiC}S@YFUbM`!q&`@2I+ zhvMNv^k`pj`_E+q!`$ zon*4aJfZHCKYM%vmYB3&%Q4~{LsEtI)l~145<;t+UJs}H3$@s955wF4#1~3X3+$B* zk)Y`L>$Ltv|o36eG-4v z-LBKK8N1rv)3BJwKczKueIDmI!V-C@JcSj~uvxeOyC^Z*wAh{3c zln8b6AEB05C~AN- zW1v?3a&tm4sp!@{F=hKOiihLjWgzij0e@N?ye1cV91$qdF{qZ^_ho`Pn5ngxF>2LW zsY4unM-=qgVa(4Okh5Hew&d2ZxCuD!%7OesAmKuD%(XKN+j^H>nqHWV*od9qr()~4 z9iQ`gGgpTCE2r-}M|5A#AP(4M4<5CFq#FGuBlhPv6P*Ar$zwqPY+v|79w96t-uonb z@WKZXKihtjkY4s#$}wlw=XMxZLD}1=3mL3-N*z7SA9yffeGY_VSfi8&SmjF!z`Rt{ zkTj-!^7xiES~00!)OK0^A;vJN2+(a0z(fHM@V4stn3hIrjdk(Tui)&VSnbLmGXa)W zQf9p#8;@}KB3t$~NLxu$rje)Ac+jAW;E|fOoovQVvzzfkX7PP^p6!>-{gpuj@9x4N%Zv+>DzTn-Xka(V2E6%z^2NOflB$6c1!2b-Qrb=s$hmiv z(#T#SVHovw@67Su2W%2w=zxc`&5kPTo*)$W!eRWw>yJ0qcw>Z<` zGlcA0?}w0Xwh|K%reXh{#W6(3<)hg>2RVsNnABLh-K87hZ1}huT~U}CS*f?oFg^vH zR+IVB<>5+^U1?Rfni7@dj$o%ml{OV!<`7_wQ#3T{w7Xp4_0=HZeeafujD8dDi9K@zzKQtUopcyTe<4|BD>y@MEHBU zKkr$)(mOS;(ytq9MDX9&zx+)a+fBKC@)( zHZs$<3{qZV4b>-e^wt~3d!S!X`hWr)GBbb!@~*@h1|y64e+7J?0FPu3-n7%yvp|$n z4F4+4#LXkGT1&Z2wGqb>eoS)?G&Hh^h(ccH*kSyON}r+Lnk-59m?m`#K(c*VD06Qv z%h_CSK~-*PM=NF4y39?bB)|e#W9lWA5kBt*NcrB2JBCQQe2f||AF$j`+)6Rb0C#H z$mOk56Qy=Fyyk)}(cP@+J1N`(<=LCQ?;Ln*7u=d^+V?8e=2TiQ9<7@#+w}A({XI`-lTQ(5a z>B}O_U0EhuVU8heptoPX8wfN#w%N|cvH9Pj(=3UwofB#3q9|WGuIw(Mv=H-tfz^qyaw!2&jI)5DqESOC)aLt_k&qnWeJHG!GE45 z9AU}2FWm2`G>|m3@BjE;N#t3{@%|E#Px}eIV@S~dIgr_-O)%LEJ;9N%Fx{kTQ0ce> z8Y){h!`5W#acXAw-AvqX;KR#z9F8HUnLUm`D+G@t+MIK;#k^xHBhk)t z%)}AwFL2@5nht+YA4mPoiGk-^6;rSW22EjB0v-n2T*$$hHSPVL{uZ^96ARC`)Te{& z?GIIM@fyukb|G^ax)ykn7Bz?Q8!j%!NlIWjJsxDgu`cPdI9cP*D-{Y-P&ZVR!K8L& z`zp71{(qf&i}(K189vkb0CccGr?1AJvQM6+LFGd>CyR_h4d*xRF;~iA+ahB2fpW+n zE2&@~DeUWt0uskOE4gOHylHy&en*1bX3!CC#pVFy{uVR?S-O-uT%^{OYxJe!M)0n) zxb63WsI?J*|4u<)I4g7WUk?nl$+5e{h0AEf{_ydE1T_Gwd~&4!SK~dq2I8v&rDuQW z1UwZSL%ikWME+lm2brKo{>{LHIWF1-@P7Xbw3}A>%&Jn&rc^>QUT=11`@LM|2dXUG z`>8MIGz=uozvbSP7;`lm238aNl!86zRy?#FLp6rtL1eQ&|gE@BE`C_1Z zC%OB}WFp2-Fy%AZH|C{G4$In45qj&BpTBxO=Zeb8c>~YqY7m3$?-w?Wl&vmDxW|cG zhD%j@Ttt0yQa&W-lNWDLksB~Wp@ESb@A5Jzn@O6zl?UGM@+JPA^lO!5e;=5IE0byw zDb3H5Yq{n1kY~nVrf(5~e!~H855)LbK)je_utxTe$Q=<@vMsl8-AZ+mbs=1~^`fG^ znX2wF-y$P&vf%lgOCpd9xWe}%Wt1!NRfD7M$vf527nZ6T@;*cc=41nbA`uAS^!lGb zZ|UZ9#+pYL?2Cv7jv+3?W!-ns4gViqZygZj*0m2GMMPSpq!mOOLd3wy#T0j1bmTJE%Za03GPKA@Tl*VTgSpLq$n zKfanJac##>tM5#*drSe13%fcfr${;Z5mIo)Q@t^Uz1fDZkz<-3bBOxtSeAZ!u43>T zk~kfgftjfmXZ*twWEhz1XIAV}{d`X;eurEKY!{>AHmQC!!qoZzCzwOzjjhdG&Gplx zIb<-{&jxlbv8O(kzZ)KMoY8&Ua$5oxo*~6yEuT30UQC}-dz-wjmW`Iz|B;fAv~ijT zcZn$Xb!7v+W#u4k;w9dhzEOneDU6HmJy!1>!Xcbnl`~BR6%zqO6T~H=T&+roZv$y$ z<@b9n8j`u-@`u5jwEjzV^tXnt(>v#6Et&EMBlF|-ow3!Coa8gNlB zONNxZwLCQvc!8he8MgT;fZSQ~(Jy1;o%d{Fv+4}37ViM?_G1`D1{MI;sLnKH6z+kA zsWGRIOg`Sd63ifS*yWVmx+g{>ONdkK=gcCn-^0V+qD-?qrrDMr&JWte^X)-BX<3D^M?o=f8%tt|-nXqC9!`gljdM9E34Yw<6 zW@P60WV};OgRg}_4_G)G*>WVjf&Ixxi9qKVT*t|>)aA4urj@MzNtiTEh7dp@g$=&o zW~JRjg&?P9tQMc%C#*oF$OcdLQkUC$D1dTw!#mQktTvugYtB5q(A;FN8(`P7gMa=` z5wLJYqpr&q{`JTgiC5PbBQhy}#5?6R_)Zm#3%I4dsaYXWPMIg_g2{oZXCNpy zXmSL-Z%`FpFrz$g70>od7%n&t*6vX9#AzD4>8U?MESAm@WjTd>Z#?z{MTscK%EJdy zkA{D>w!kns?Sp-LXK)3!dWlV z#upq46Hd8$HGEIGvDlDd10@%x(4x4qnha{i693SG3pnUGklW z_V*${*a6bE)7`&TE18s+B1={NQ8o9rAz*132)>@Bo4N@7{v9d}G=h5yZCfzSv>%uX z8IG7q$Xv%!Bkr+&UIT*UuQ|gb+7rk-Nkk=x*DpNN8C!u3nYkkMFKiybY9OLF3Tv3$ z;>cGk7$EjHQw407*(R?haze(v1SSYeMA=v$Dt)Q4aMYheu;zo+Z*cqbkY*>%Sc>?E z9uQJ+rJ|(`z&@G42UwhkN}2z``eumCmF#Ku(k!Pi-0a23ck|VLA6YwZjP-n6FK%B; zISlr2ShwWl7MD6SgMoeR3Y`Ot@kcn_INdCD#U7^hU!nU~n6w|faRn`0Lf|@F_1(Jl zbN7;lXzRjUEVm(Cbq6V**Y8?(-?Qn@T%S=&wk^giDI+#@f1zshS<+#2qpsznn$GgI zpoFyAIj*z*2TM@+8C&$%P28Hh(%@Q8mxk!l!~KB4L_`PK^9jzl zeHrB-7|yVK^Te$Jbtt1q3{NALyI}~waiHU~$5@wXB#k4k zaty847dB2ZK1DWV-4LCq*&L9Aez9^b$nmi>7AHq*pEabG5i;f#|M8PnGO^n2Ecujm z-LE!)0ukF^>CSjg<*C9a+EFf(l0&%PZ2it%4Fk9{i>!ZC~fue#5lm z=PeOsWPP9%n@u@Q3NF@SA=MMHT`opm|G+&?A_Ky8t-fNuePq@cchTD1)LmB9;4`Nh zZyj5W-pmX78mE~7-y)(rCf^t%0NE=Zwr#My)_yX)sct})x#6)^wz-?i$|_*sJxZWc z#fQ3jEu>6bRYT{5SigS$TU}#+!oDCb=Itz5-w}S_16-X>uX0-3g&icp2i|eKS2PuS zOm!Y@TJF9evo(S7`z*?yux!=W?kZ084H?uc~BL2ryZT{oXzhd}GY-X~`U z`VP|T^br|&PV-kZ9vLV;o_bA{?l6PCasJxU9xsT}-lEBf*|U92^A{;c^0Sy2vEywg z1Qqm!9HfD1@*hS>M@8pyh^Ys-ATLY6*(=9a8NYr%&D`>W$@R=T9@u_;Q77Um&gsG$RH=9RbQ)1EQL&9qTBb(b8{`%JG^$Y^>d>7;0}MvS_V9_Ar#3~>H7 z^3X>UGsZnGpWct-lBC10X*aQ5=PZSne``8#;8Xh<=JC|nI|zN;=29`K!btAuHghf9 zOEuJXjua!7GJ1|tyFn6mV}P*T(iTdlA3vwc*V181=vpFrmz7H?lobiyZ(v~S6;Z6I zN!(b*N_Rw*g4>0!m=!akb^;kmTvQ5k|AGoCQXXEMFFA()-qBzSmDa1 zXJjwk3q}xiFzEsQ0Bc()T#*)vQ$1^Jhvr0RLY^hT7h?#!!eRTFu(kQs$C#GmbhHvZ8kkZ)I|bre@}7M(LnetLF@QTxf!dafed7kM&Cr zB;#9Pp#k^vp1Fio2+plAlzG}v=V}#*D?7qokeu|N`fVk^NVRiyrMn|GCFj5=`!k#V@s; zY$=?FvR&ab{5qT!TLHRaIDdejZ=vn2mhRrKM1*@q4H!N<#E+ejKKAkk>AeHzR0;qW zK%)UWw9CUhm`^f%+qbAV%Om#Cb>5GOv%P~1y>`+Vbe;3l*O2mGPeoL2s=W*#sgJLx zL~eLP^W&SRauxj(a7pICS>L8-vhp?0xK>isd2_zqA(IC^zKOq!l-u(DFf{OSX%hEx>;o@!J zLpz-96(oL%hi^&pbc#zhDR*W)(SoNzSYJ~Sh#vtXc~*0d5r6kFDSOg7G#4BkoZPFHZvw0o1x#yeVzibM> zTFofoF4~Hky7Q@`&4=W*7gN+&&P2F0R;q(zqv;2iiZb&4#ylj^`HWW(QY&3TRbzFD zxqelC^X7^jve(Zx3)34yS0YM*!>Qy4_KSdH6zG;Hr61Kk$*ni!nrKQP!a6aFXVaJQBrHKA|ZobPZGf#91oM6xtYy~>DD^tCRIhcwQV6xbC9j+j7S@K zzxSKLO%M?#@kY$fttMoE7w-DJJ4WmfJ^|kc3zsJqVg?x6h(E@3vdSNm>RlRhud(@U z%uBvc`hcaZKsWJC#sjF&ET9)FCzF_AvNQHMK{?Cur0S7Fo zJZR#t_m{?S7Sxsfz%2kII?^x=usH@D$M=J1&n8~B1rppw9L4Q_RkDV$*07hoYKR77 za08=*w|8CuL=AXWJt9nC-@pt)r0Dw=gvg`_ACo*{CIf_sP=W6Q6bJ47i0HpCYDKsh z`S%*-{&@ED(VZ!}LbLVx$5_GWFsd@6^FdmzWP2BPO7M3WS-yDLdp5){Ho!oreE{Y% zXCxmV%*c|}ILt&GgS!?D6~@x0z+muy{Pp(tUyaP=aMqgpD1(ORM^5X%<8kei^a0kI z22SGAd*#FrTFKZ8Aof9q#MgCX&@-49Vvw=N1G==!=kM1$VY}21;KUDCc~T}pT;M&0!2RLggP(yAxL;(HQ&J5m51kkAXwU8Qd5ar0%UFbok#F4e@lVV)IfHFITNE-H z-&~i3J~ef}AEo^nk1LP^R0Hvp@b8$x-s$?BFz~VB6OsVAb zYAw*lWWN5(7_K44)!2yHg+Hy+CH7f`m|@u4*#{VD5QY*_qD~GaKd@2!8Yg3O7x12n z+VT#HGr-cbiEN=sOZ`8DX!HnI33WRC%72IY@s=*(*trjltY1m)B_U@eD^dq1kz6rb z7OE*xTbUm-1{fXh1dLCJ`IxDCA3lJqJY3!VJbBgRH-<(}>^G+W9WTJ3m}velO#NH} z=tZv=ZyKVzCWWVoCI%#5j7OH9RDy2jt)>T})XnMQcNge0U3wFwH8B{{1=8A)+vkl= z>q6maLxzv$KXxeh3Ynu0Y;voL`BlE$(1)!Crf|=BFcMuHT2g02t7D zp)pvTj0pPQdTx4ap!KNi%-zF?gs=cxE5O!h(>PoHe=r}s$pPk-+{5`l7+mm)KS6p>Yf(@UL)LXe=LH%=f(iu~zx388 zfDf2UlcD+i))Qm`I1?tC-@z4<0(`{Y&ffui*h)lk(R?m98ZICN0cR`)-kW~z4CBc~ zG#$_nFquTK6pRTv?q<1H%cP?_U{m?%5GDcd2R{*pG5tcS4rnOpfAj=sG`;hQcNL#}lg|1vh zFPEJE#YneUqcMS}kXE=1TFHfm_qRAbw`*1b#^UT#~Cz@O;9dLyeu;r2X`VP6!v*LOKV!=l4 z>x;IArtSnJIueX}SgZLJF|=L478-N=1k4YNaH|03I`lW@^Gz-vU%)wR;Tk84n8KqE z!L@gRUl>1TNZ9^^xmDop0O~MoAJ}rCetm~ZNF3P0IBsN7$D3>EKBfkK{jo*23ij^q zLB2nRpnQSvJFZPEfR8EQ17=OPxV%j?bXKph;pn_T>!ERd3iRxY%-&@C4~FD#Om;=) z8l>;BsH2auXX9LT(_QuMS@3jB4JL0adYC!+6(g82s!;hcXcFxG8WxC8>4C2}UhwQt zH#pg$0{)@~M_m`1N0`fED}%=PtYJ2udquzVlJ;|04ptrJZp zBptngtxnfw3SjHEp1*Bjlc_=FE1?On;57`O$Kk*qZEF(P0uxRa^wmq`u8rAOW230P zP)K)heputubo7KY!?_bbY9(IgKCW6} z%++;LsoQZ)V9AC;$qx3i2CV4JnFGvB#I1Q|j92lLjpy)v6r3UVKN!QBYcXzZ`yPe) zU{h{TBwmY&>9rGF^$D)fLPH!g@Y3RO4<>y3mgWvP?d&gHkkcAS$78)kiNborqO-Yc zY<{+2E$J#adV^Q*3Y&+&%|h!-K$?T#;fJ_4Xwv3=kVZI5Vv<(!U%ceZt#Sq(U@N3R zkssKe9psJo%=87YMmEl`0IYp68)3S%hNHRt;*^zYst)Y_oukG`i6;it;eZOk$i3YJ zR=Kd1>|y3LSJi7M#T30_!Bj0BwDY0v00Ym)hpuf`)bVCdyN|CiS3Ty{`wJI*3vW(Y z@DeI70}X~Dy8}Q?(^msf_Y6TC(BuGnTk{uL4UzTu9lgT2gtv1f7?tsaz#K0s3?nzL zk>QT5Y}u5PG#WK`KrT4z-A}Tr9t)tt_LJZm=sk`wI>*@o z<>ZH}*eDJ5ty_?KIK?DJNu3PI%k3?HTzo|`H<8?W3=P&%I0Ig~87qib%sc!blJPEc+j-Gc^-&HD+!r- zMlGRRu9ZgPHmnhipotpAxy<-)7*)R0(GSvJYCd6dM8vhn?_WC!(!|8A4h37bk0x|VaQ((JA+@4;<|o)0_CiB^i<<)T7YCuZx`=R^jp z44(_DlFEz=dYxhB7`z&7tZEEEBRR9tNLTg)zb>J-7BcVo|oWCWVc&1KI_2nxhVd)(tbGM{t=rX6|jBZl>Mpi_b|fCDQre z#-1qQD740nY=z~dxP7LSR9dCC;7N7T_6T$a0XfUJ_vOt*I?m^unTzsQ4SuM78qnol z?Rz32uM7px#FNl7N==@MIQc353mFlfn>qOONc|cG#t{da+-msQuOKZ?92|2mmuf-B zdA}~uZA$6LFQ%4u$78-N6#>bO|JqWFcHTk!*l;8n=9Tby3Vgu<*0UuFe+lJ(iP$Uk zR9DQU*U}a*1RwOo@4s7<*62PaR#JSY`VkpM#i@TSC~3y~`P;hvz7=Pfr4=5?Rf_5s zigdLKTqja=7rg1YsCO6AQq|T-{p0?Q)la!6t(9@W`<1o8KPU_!S-)tMF{dcE` zZtd4%8fn$2XJ++FvgYYFQKeL!)|TyIG6ffp+LoJM1${bjk(l1z>66acEF4{3JD8Ma z8Xz}W_phR&+A$hf73+ReWjkWHl;`nz^rA@j&<@5w;K62()cdt|pd)S8#NRoNZ^F;_ zb2NR_Gj85~F&80TvTM&Db=I(2KU=WyL-yn=B}W;t;EBj+Kj|`+$+}-LP;3DdcfAp` z8=5N`b*>@L_Go%9b~mrCK(C-=+Kx(>xK4S*nz_2@t{7A8d0Jv7j}!-iWk=wb>XbFJ z;6sdaRV04tG`3Y422dN@&oK+s`ey$|M^gV2y%fAWt>0Odf#Tskw#52|652?09Uxaj zlQ`LS1ti*E3EB z>Rmh`7z~UglS2J$89Y;ZcT{4w(0A>J=1ItR^ZMr&^(v#^RnQT^RpUp^V`YqbhBn*J zeMW?f2yEMn4gEMB9^BD*Yn|_LcW-=iV0?3^(naA=Qq48R+_Ifew&3En*>cO1AVZZc zTPcz$VIfY>SBmG7o&2xsmC`0WB1b&FC=B16rBVaF0`@_Gee0_x0f1K!{z2%#-v^E- zPN6v=zB~Q-O!QazbXw{38-Mc;TOq}cPy3N!`cZlpEWHDP-eic(nb}b08fOoKY)SincW)Ls2!{r;BX_TGj8%}FYr@^O-Z|W7& zmOT7>J^Gv}@4BUBe^Ppcnr8yu29)^N0qr1`3^+E_aTtX8x2H3vc5CI&9x_#J@Pmq> z&Qxv!;Rg;(Y<~m}G;1|+2eszU%qC^kKn+8ME9bmv9cVY*SNsL~--#&#M)yJ@0V4%w z%9BfhCS^frZz?j1Sn=Jn*%0DECr1Pm&5Gb8Rp~Tl$icil$~Cl~1YHl_2}LwwthMJ1 ziHwOQuh(#BHv&7Un648R9A)v-NVygqD=U1PA{-ps6c8Wu;mRJzmM{|XP<1(Dg2+Nl z`;nx=lf=>d3f=K-qi!Sd9+9z<51%QFZB$DM&08H$v-ge(ZKD(tOPKi< zS_Vawo#)$ioIHBo=`Qn*P7HIsO+E4W(0bmm94~PQn(1d#%eDfL=f9+|+t?|qz5HEM zcUl807kluN9n6Gf*0c{9&}jfhtu`5XVzY7VjIL?fmj+^ifq1lm%kpEBwV{r`D=G4D zbaXF#j_T#Yuhz|UAP~&X1Q>}Zar4c80RplAWhB_!eWy9;;jD(6SY!FO&i=4zNe$1| zD_Y`*so4OJnkxtR=)dvq%C7U>!Q5}(%ZPQ2SD#){oBGvmlloO`!8Vt{U3rA>So9`q ztKMlDNW|MH+wRmNHm3?U*|vBJlV3MfJbf60q+ClCMd6Wzm?KCTtI~m++QMZ@*PkoqFB`9C3UHm52drnwYPUc*4wqr|I}5`IMj4;yN6y~w;3-D z?+1}Df5L8z{oWOYrl542q0;csFdvs9QZcUDb9ZziFB`~Z+`1P_qVL@{`K41g4up<( zP3`yYDl~Sb1CM0urJmLz1E*v4E<}4@%*RO>X>8f*4~6oSyeAY&$)Zt)yxik^wD&}z zVburNh_(jHaYe*JAM`HxdT;e=k$m*>KS^~=j5l$cz*JigXrhvL!96~DP=8K_rWCz* z+?zgHA5t;|F;%t%jp-7La65N^kAud3yw~+@m&oJLN?JdvG+vL;_iYi8D^SgeR!uz? zNvwDvu@2#}h@0(FEd?E%{R;W=BE#w8N22;H3!YE3IKxTE01@c|Pja)b=st=>c#;Ca zAKEQ@|HyB5E*tG^!ake*F1N?#y7V*<@k||^2+#!r#Aet_?4fI5fV*V0-@PkS&cd;avQ?K#q;AtbLpjPO77WflQgq} zlxW4mQElRSWu)WzVwmS^|~%#NWdg$O1zNzMXaN-a(Dps7F?He>wSJ#~0+v zdf+s(rI1JxPN^XkioW)ogZe)8H%K8PQ_@E89MrVTXeuObPrzsh%sV7k^`6ls8z)ac zJxwjdcW`1Ia`{^(v-L?3gR7UnP?{5Ud|vz+sVSvVdXuC0SjdJ*GM}iot_Sf^P!r#f zdqFvFHDE@jpfdj%0pkDzD_};vOFN?3IXW1ufwX3(qH&{@cO!5;72P3^w#uqEN>R0J z@&NvO4-P?ILk;A>a7lrfZ?B0hZKbI8;UX;qGonY^6nk4*mRmv{(^;0{KWK2HlaRh= zAktW0zCs7+^XiysnHIxd_;iAq!0Vs$_FI*fo30)Ds%05dp}w+;mQA6+01Oy-0}O20 znvrtCA#y-kG5j3R+sCnWyr`L9uaWXt-mRMVh zRedCQ%;R!E?}#EMQHm-{DSv+KrM?s|f{ffdUKfyun1`!-raL9Z)ytB)ZtRaAbGW+- zoE#J3yuQSC!sE5$%}@p!1FPjr5Z=(2>BDp^=PiLpIjSjTV3e*pfjQPD$)Ay6l4Mvd ze`+&C4B;Ti*5q8yP>Ek!m4o(<84zHU*XmT7P++d=&(t@Q5|hT1c%!|NGn%v8a*14| zMkBugWHN-?Gny5(uboZt=~x1_TcWBoRF=U{8?>Opw%bCm_T1%c5vbL|J%P?G_cEWi zz>Z3yiVEmddR~uk6~-oi@k%Y@sNL3NPkI^6#AjdwNG}TW_P#`hftDt@4|(7jE9kgy z!Af!F!b^38&-$9A9IYLplCuM}%e$P7ptVnkOh6a6f2*$^N~v;J;(3V@bljG^WOL9x z&i<*2)Y%lnk*U_hs8?k^*Y^yvZI8}R!>R5Ha=75D@uPK8%UN=k6lQC=&G=F+h(pfy z^Rtsky?Sn}Y$(#P&k?jT{_HmAqh^xgoMe@b*ORzobzCY>l_z7!dXMWG-|RCj?^D^O zQhu@8Tx$hmblNfT(gLAMdyGeyLR)9EtY*zkF4uUz`(UjM{X;%&E(2 zOQ^uSK6p+sF}D6WqwBGVTJUwzNZnOmO883IkbHs0T;R$9bFGKAg6jOY^~4^?t`nMi z#pxT_v3|mAgT1Xcs2nahbLYhO0h!ofy+;mgThF(vqx9-on6jbcs9x*e+@VKm9q8F)z+tlrG#21#;JOyUTuoQeWMo#E!x<)2C@K*J4LQKXI)lV{<&NcUWl z&N^rjJ(V{HMh2R+$V2oVR**Vn9=gjGOh+*cL#$6sxj>7e8cv3Acz%4TcP?|$ouafE zXmyxIqC8Zd;akE}CkDSB&7 z`Wf)lI(!hPv8^NToGRRmO*NOZn8dHG&J(=azti0P=4hT|_t@rGN&$4x*q$*D;aB;; z*$zlFFA<84fbSHm(MJ5UAvV>fY`wx$XkP4|iH3ZK$`|dGN}P_feJ>=HXZ*+%s$L(i z6{$^-MsKRSocRGGun8U^U}P%myyex=s%lAN!7)F9pE)oRD+tFaFR>jkX*LTJQE-)* zJ&C44eh?pq*b134{4v7jne>+LQ0tHL z%X(bM@5C?Wp1QA$&AmIrkP^>BdWk*1D-k%M1z9eh<-ww3s?FRG>7uo4`^u^?89Elg z69)Quv(V1zFW{8hx*5Vm{8GNM87>tWG%XwcAnGvb2>+FekT7J$(VRm}T`*kMdeDj*Tp_A5Qe!s0KbaE;6 z->+-BSt`ccZ5>G@hfh^nHk&5q%(bt_SOHILR6XZDpI&3M+8K28 z6pez@91cdkAgPS^wd3r1U|}imoU&NkC2EPNG*7IoEye{cBxI#8F)I0Uy1d846k&jD z(G^f>a8~{j+fEar#bA+MC;1-NSa&4cZWv-OWJ3HqB?8R#Pvk$IR(t|`R+5nK>*YBl z;g9cHXffp%>sZUi-+6EQsgbqvxRy&xphGG&=Aq)y#pu^eW_t!)Go2WNR%F7~ z)7o&odQzqw=!#&11kSUoyAWkjJBs(~vPqWdJ#)<&~Fqy{LgK_iPQ zw$2c5%T_+>ygB6h2mFe~p1Q2FCYB@cK&7-Jr{22*8_Z}Y9=>p2VUhjOGJtJyx<+{4 zzigRPl}c(XL>}@o#I9UyrG9oepBXK77e`2G_m7w~$pr?9YE)HV#x4iW1A#Kr>Qp52 zSg1TiJH)$OsPm7^-6KX;A*DUE%=nz0s5*oB1tu%2`H!Z7BXeLYvvtH+V~A27WkgJ% z0o`(xIx4T3Adc3DFw{RYk;(>+Y3XUZwYJF$E1z;HDJ!p$#q?^-n|VIq{wD93GIWQk z7}Gxox`UG3e^)a}|7k8^G2kpd()pYB`XWG1+{@}W6O8GG2g#s zA$8RWr)m%Mux&n{6%*HzKybYj);KZPAWsvwNM(ZuTZ~1I3h0M49|-7c?Y)dXi@G9|@{6sv zjqt?`Y!2Y`eipa2v9{jQdtQZUEO)cvNLH8k zcdI}Dv^XjMt2L(;& zvFM8SDy>?-c<>koslJ_{N5n0{p^J#p!J5M3p$N4J-(t^zCU}B=iBsmW!3L8NgGB-x zYp~E*+^B#dV*4bwfK#~pvxw3*um3y~%Xa(q8sqgxT)Cn}#?g)`Yx=3hlEVd>qRJS+J&;vnx1D0fRhA-Zk+q((kkWCux&ebf*z3L!qkPu8u=t{v^sbNgUu z1EHvw`y^F{me#62cG{YsU^74G&1S>Vw?eS5M>(l8`GJ+vzQQ;0>M8aC`VT z&!Hf#_V9M;l20xM>g{yvtprw zx1Df?Lq@u;?_^bjqk3+BFKmXt9$K-A6cZO{3UwV1w|UV`>#FQ*D(fqs2wE&^?)1#G zyFlelwpGiPBowsf@jSZBo_SX&f!KQ5TEJY^V?RwSTq}m>aV-%>&<;CYvDakh;c3T0@0Y0 z!wtBXXE+Yka6ysj_37^8*RKsk>NE3if53MMw^OHXvT=ELYj=9tj%!NpQ@LeJfr?cT z4VR`+2ktb!ht?+N&`D$zlG)Rjm-x_hL`ocE^@!I5@nP+|MPf-S%PFh!R3u{Zz~x5} z|BD40s_oqMHq5NE@Mk|@w@%s z8&Ie41Vc^KFJ6V0P`rADL@SK=o$wII*5|_&DVCiWT_gr6xpwi?xWEXf$Eo#9vx`H@ zxPC@wD*^k@c@zB;(-92}jEQ+RSvb*H`Y6O4A#f_{94hP_J(g5Rh(-IT?nFkm#)KI4 zqz93iTkaTI8bnv`dj6`mQfY1Tg;^11*P-L=D4Iz_1L_d&W%%52nKAU`{2kQeR0c&o zgH$t1@$Ia`9njcfM3C4LW?4{evfh$id~55m@Gc^6tL)&}LM%jTF-PqT>?$+wqpy1w@h!S)E<*+9a;f^HEH zTFDRpwt^&&Q9T{z{Vyz~MT8|sYYpDcZahmlU*^Y~E#QIJV_6yy%a9TzVI`+hu zvN665L0vED@NTG{iIodwnm4SHd%ATvRzf(jiyM8;SIWm{$f-}`^dK_K)D2~y=&vz! zOQl$)z;>L{zlg!>$BuOzbl$RolnWm35j4KR;;9j(x7PbI=ZogS>~@YBor_22ce*c{ zmI&cGfh~jkbUlY_%Mii>X2$y_IeN1dr2a)*#Uf_iEm>w!o;@F1Yrp_`pjyuZ=R%pG zshn&b4wn#$h$%1isaPAanQnK$uy~GMx0<#7AlO@jKQ(-bS|RP#hElpR{D>j(?5Z|g zrb{ivf=|;dkZXVIJ*F6O*IX6x7^T%`-d$oL|H$o4NFW^7rNL9@%GX=Mwh};5ti@$J zMcGy)wqqr+eo(_fc23dh@_CP@_zL2FUWtd7nm(YoBYrU`n(p+&u)OiAX_q>9C0f|W^2s4k1Z*wpL&1v!;_Hvd&ah=&K5u*~#zsiy z6{9JPND(GGyJWVyE7=)|-@onlvqPsY;k>tS6`G`@{G>YyU%M~dBC%ah<_Jek%W3`jMiGT}gRML!|!2+J^ZlO+g|Ur%8|skUoffN0<1&M*v1Jh%#P_rRjK?dsUK;l!%euWK=J zax4z;{t(g&b`#-@sUIaYh_bw`rX@DfJjKw{v-U{b{q?|3#kFo8$(dQ5I>9Z20OeTd zxr_XsCVh2Tg3%}>=Eto_CQM;-Z_{lFBZT6(wKA`81`_!T%X49sG)hpMhwlzb zVx0-K7=GXc`PfGweB0o=NnE`iu`pRjS>EC#X&dl`Z-+e0+NtzCVGya9#YYG2D;QCf zh)j~|awM*P!QnUew=)v1&3wsZ_mQ9$jv8c7Lt)k+EbsL1plycj;q%t z7L4ia&0F}%t6*B*Vo6d+v&*M`T0yRElT7f!M5l-s!O6Mb+16EWrB8i$5~;8IM#vaL z!SXw=je_u}9y6&VVYBYWv+2HPp@?D!3jr5-q4={~CCUws-P-Jjm{+Nt9t0^~XW_OU z`((&Oe!Nw_9*N=Uc{;0BCRaAoLiWkoZE@SJPH1aJz=&Yu+~uwYL6)l(`5(x;IKA+IslJh~nA2)n&#meUyPA)3qz6MUgCJd#e z{hSM)$e0|zI@!-20XjQBS;WzF?px+YtZR2HTdY{3p7*A{Uym!-+;sivO8kcdA zkI4O;6xSF-N>%@!P=huWFCBslh{C*rLQ!IQiFv1ri> zN=yiU2A39lvkAOMK-XgvL$2}}jT_c(Mw)SEw75CuBlpJK%62N)&yiRlZW0opL2)LX zF=XTGwDsiWTIZc$A}K|W&lp7Wm}4yt)QxjBj?ceKVrp|+7}e@Y^GahE zd2v{-9SGNHxxS3?usrSmp-;8nVq8+NuG1O|tiO8fyn{h=<90ziXZ}1M8B>}5TRt3Q z@SC9hDuyZ8_w9#NBTgDkpgql;%qz zq!>*clmQ@4wM<|fijN#HOf%c=SQ#wdvS<#oz8GP?50`h&wpyaE6W;lWjp5fp#?>jA zKS#pXYgzx(Qniq@gl}Xu#2)Ku+jYw~MqkXf8dsX)VVUl3_hQ-rrz`9AdMAY|ATtlF+wsTLAN^2Mx%I$^zNBU^i8l*4q}ZKlysRKI4b z)CJ`AR5u%Vhf(Y}ET6T;5n{)Ru&52_0otBwUMX)j_HTEz6n>;R#%r5GB}0U*+_^avxE%EHfdnzh(_e_JIjA?pH?48JAEjDm%CjJcEh zPN!y;NQek6zjJ5{Mux$q2y1BRpIb5tRrw8SQcs3rk7pS$+_z#MrP(G(54A$7t)U*w zhYD+TFY(m#9}4ic@SuLh=zeM@N2Iw<5k%bMi{#L4hO&oR|Bt7VmKH|kSYQBo*}b$| z$Bz;qZLxD)4h{KaXg@zDV&fk`MAey@KO@Z7io*il z=7*&ycF=iS4vDx5b$)Lx0Vav)%c6938)25zQyv{-f5_4u5wwKnAvM+xcqAVsaV+jS z6W>0L+T(6g7b&c54z>`ko?p0$ZKypqN=n@^w|7|#RNQZjDmMb&-E*`=)EPD>Klr?D zDKOoa(AfUPCk*Pi3ZwDpy)9fbzwlR1+emQ<8zc&`y&m^D1c%RXz_9eZ9WB_}YS>2S z^uwtvadWB1;1^G78_CIjJFVEOzi6j+tOH7o?8e3ys5@J)YyiPq{}N0>?x073s>DsR z9)q7e5p8&7YvERPOB}RQTjl`{^Z3P;T>>#743nVv7%iIokZ!;zG7>LCwIt~~ zc`Rl3DV_0=hPZQGE*Y@Qu0iT!U$5z7+^*HXVf zf>+xN`E2>bB(`5inaq7E?g|n}3fcWTJ_tjaTU(FUka6pu7Rj|5uYp+$&jvQs2;UXb z^^*(Qc57R2YzaaAeNOei4AH*5v+Oxn*mBJ^go7cS0wq17*(GY-v$pLxwt`6PpYvKq zN22UiZ>u?4{{}JKU@n>-@d9{$;i`&Wn4mTCmTeSY2*bOt)D;;Lh#;9 z_+*g)m2hic5u62hZa75j)oQV}sNPLU7rw67$!#^sO+)-mx#|A%G0j}@tF+j(6D7^f zr<6HybM28=u8Z6?t?Bl&ZVcYOJGPZUJv0}(9G?z~=v8OyrK=lGSgyhiHbtQVp~4gf z-x(-C53w(CKd7%GiEAO3EcW?j`tj|^g7&4GFe>LcEO&T30;8Y5{n=sHDtz}9sQP@f zq{A%BlNX^D&>nkq-abAsF)E^!ak}GFJQEdf1n<92 z^O27$*36N*1^nDJOtv|qQGY12{R+F@q6EIq z)vlrLG|zSIh_nAZB|DJ6j0(02nT3N)3r6Gor?q`zkFX;*fBz6O6=Qf`;i^VWfauQy z%~lp`9g#oz(aIfWzy@9(6i@UW%7aIoj@>V5KLZ0IJa2VXNW*cn%p&+?kzN#37U)nn z&i`0D_^ZB)Bu)R0{If?#{6)bZ(<@@pG4Q&KfgC;U4cbk!HmO60>$mrCWa#JaU9iSL zV@Whr{)Zigo?4EFhuxLw}XTmVUoWePjeNK|)Smu9h7+Ib&X$jENE=;%4b4I5o zUq)a1fss)jXQ0y^XSayj3p@+S7L_BW;sDo-UrgwjG?H~AFLNnFn{0A0-D6I~&3y5k z3|dZtpK;j&yeNV)s_xAJc5hG@R_w$?^E);s*avcHDSL7XQH58C`9@YE0V6 zn}jH6A-V5Xeqw6MC3~s|uZ+F|_V--e;*&usNVT{ez5C`<{pB_DSp+euWrI&hDPRZt z*^gDmITFcqbsBwo|0y z{fP3TC@_368(`eGWFKatAbb`UfXtcn-d&~+@f+Y00P~H1SaFSZwH5u8)~|d?4?nI@ z^DCf-wxUsqwKVv*m6~3+km%!k^DscHIy%T!G!GEFoN)bDB21puyRRE zdM_a0N2dfNc|_U%lGu#HqDAh|A7TZQJ|%C!9c7oq{%PeT`lBu1Kdfk?MZ(a&{1%ar zT1L-x^~~y8(e6v50s_uDgA9^k#)GWsbJxKgC_#Ygxi;5Gf0syE&FZ(je< zbrLgSd%q{`7n)bVh2SplC9h(@OWV3R9?fe{wo~%-l9$R;+5k{4c9jH6{lb732RGG` zzG+qK(?41H)a3vPTU6eQvJTX0L5KJN^Mzhwx3I7SCYvoO|ei3-)02@ot9y-B)8`)TRnka!b^2Nt89T0~53Nrq@ zjBqS2l?KV)$Y;DWOdLI5mgeI^^3yu2bd_RX7&G3sqG;U z|Be1%tnLv-f7nI_OMnW#{9V~TS^-|OT&9It&)d- zs)P)L_BZ}D8_?fgcZHbj?-B*S)1IZhX4Ab@6n^$^J-)jh*- zcZ~b&=rTa_lrBh?IAI=_jeTZm{LfZ1cPDlZ?^vo|9SAU-pd;~Bjvh_u??2F*i2kVw z(w+hFK3Cq0rjKWCzm_KNE8Gb z05nP)nsDC#nw{oW;iV1rKWrhLc@X&v=408gdzR0p-(v?wqgja1)63=~-T)K-k0#}} z914Sv;jIIAuTXXH8#Eb$wyz0VQb2?SG~xP-M==E0Na;(mV5FyadG_p4CHa@-I}&Eg zAKpuBfljpOMeH+nP<_uLU7-mCFYIH^+edEz0lpY8G@%3d`Yo5j;1hW70NoK~|ciUXrfRly!#WJ0jV#OhV~aV}=?OCHpeUdT|ZHpl+^Z z8fI+Sm&z_%LX0JqJy~XKm8}?i$R35?Gj8|Z_kHjC^QX@_pYxpOd(QJc&za|$(atDe z!9It+2)qHS9&ipUy65DZbkw!!CYwkr)!TXB9!>Bq-`J&XM~VqKj}^g>@4iyv&Tjs!EC(438;`OfUDu z){u?ls1(ghf_2gu)kMYT6(#?Se%I)K_VLs1{G^gHB^a8r+H#3F*Ca*(S;vR z{u@vY0BD6(7v}>2th9e>RIg|~!%TfIBn4W58>X(!(pB1Yi%rN32{b^Z#tMf&fPF~- zP)C}>h=>WZswGHKvW@&_`QM+V*$wiF?Nf;fxk8W02~y6MoSGS zsGY%n3IpEcl~J?qf$|1r@kOM*T_6kqkPjL?_pgX_kh}LAQp?M*LP(G3+!1%`*c< zawvRTSyIs`hy^(PPk^;?tU_Au8gJuP(-V`11Zvz!0oB zN&|upGsz-3QGB96ga2*?z7JnMPwHR87R%s3O*I(^`(IU6hhG#i=$pF^59b-ngZ)8xG;7aOksb+Od0D$>KBKb&GFpm{xPAS$#K8ATKXUnmAPL#JW*dorg z^@^zu-IgeR4LQHt$P)et&jSIMXC9NW5}n?DXgQUR?KwJWlCAHqDzUTeUNh|aAcC8Pi5f9^4)tA;Wibv!}ymSoc-Eh7CXn& zM6we3EV6l(P_JB@YZ?PnVMUw(U?W_i(sA%zfUyg(!do4JIGE`o8GmWCG&GX`C(v9& z;je~Fk)CMu{#IQzjH>i|oY;-yPhEjV;CGD>X0}L1GM`H}7lhgc{-pXRU;!(PQUk`v zAB$w9@&y15{wozXCh(1{Oc8;>ekWX`()Gxi-E8;ZyFhCZ$p{TRx1q^2Pf2M#n7)gq zh0^ThRne@S{Ou#aRc?hyJFry@rQ0y!rh-y%lRD38W%EN3zUSN(D-!Pb>{Q5YjT-Fq7 zL{b+y(S)-sc+W~MB!oAgZ-bd$q&q*?O~SmPB-R+0ixK#J0dQXa4UG6700NI%!k`<1 z%oC6+_tW3`C!V0(M=1N+z5{{J2|PSRu%UJtlI@mnzEUx8eZy>gJaiyGN)>{#nN1>( z^7w`(s&6<34JN${yIC!6gmgorajg`!^M=w@?cS{nP8zCIu~8ruVdBDU;lRi zd?Jb&B#{#C%XkD88I&a#AIyq!_sCZ0n+v{5sRSNMU!UN#$Z}A%I(iW~Hi5G$7})m+ z?g$()oqq#+f06F?TqhdSFqc?oTzTj`iUAxc8%#u&#ioz=$4F2}1Il+w!0!(pe+7X3 zG!^WWj8@%-qz)XWYQKpe(&OyaM!;aoOom8yp$fc1a36zId1hIV%bS&tU|8bu6DM4< zrc_5HbdaNKZ>(eoS!oBXQwNjkS7OsY`bQn11i4w?#gA*Y^l$<$4`!c8b}=9KWEi`n zgg+Y>pN#jpOiUl(I@&*Rf|50L%1S~T`4M6K(3r+b7BDVZ+R0EyS*_-c!)ov!Mqd8Z z$gnt&7lnc#yVi0woUOEa$9fB$^9zsBvAB6w?1Nd+pKrHOzeFcI$An{^S3E(N+~SpR zLQ_a2UxFJ?w+T6J8HHC_strC$F4s768R>{dzqudgkINv3deOg3Uy<>hykzy3YavWgKnelXl` zxq}qQvVxoMv{A>={WRNWb|EPI>y6@gMFkrWRa93#|{QMzITn z$Nb3rVSQOb`i6f}FQR0)^`chL73I*v-oPVx;A$+wGvTnI$^+g~A7rnY$>Ww2P7_bc zO%H(H5-E%DJ5RSQd1Bc{z%7#~bBSLV(~fv{Yu%Jb0-%kAV4m(9TUVakIZsi-AEG-z~T(#^wem2_J8Od(~rtHc0wgZDU(Xm%Ul++>FAP|J#)fQ&(SqN>x={Nxob(vDl5XF2o-{gI0O+JZ1xJ`*mQP3IGx@+cVKT)EvR6BwR= zabM+f)2?P?fxE+7$7p5qr(Y$_f#DcG&jdZgm52Hz$Cvzn+Y@%Iej;2g>C@`AU)Ir|pOHw$(t^_` z3bUuqJ;3*3QuLqTVK?8VC}P|E0=RyK%mBgtFwX=dLzPFoCC5hn1Np;be`gWE*O;sB zGs<)b!WRx^)~_U`@1rEEI&p-ZWcY)7LVpT<**vuz>;MAJ$dzG3)TIYEwIfjNN!rV> zIN4YGlawbMoZg~~<7FYpsO_3Mu2j0JtI{_k+oTjWpEi>|d;KW;YGhY3lilUq_>Bj>J!&n9FuR zXV{&rlQ#MVy}_3+;Ld@Iuyz{UnjLEpB!F<>A|yOJ>~PIk-5*5`I*d|5L1!L5O@ z8bLgeks&1Wbi0xDSTYFvGZGs@Z31`Gk`KS^sr*`jTD*4^lzq|WIrShhdQOluKK0z?LY=n^57+T~8RRI#&LN8Cg)zlh8V+)GOq`Bh0RYKM@r zj>`p=rS5z;%v6sa))dYQC;EOJbZS{t>vKU9?Pj*#^;A|@pcWD@1A|F}ImohIs{<$6_0E9qB8xKL|X? zCuC5&Jju6I@cvyd+6E$=vJQ!Bw!PQNm1-KXOoaP*&9w)Xq(`S>aGt20 zT94(ZtOKK^1s0h^mF>0nJuik|gGAM#8DOW>wa&s%D%yP*U&XpSIwY+5W>l*HJLXo5 z(rXD?tgTgE9Z%zguU zTU+8?k+?D`UUH~zXaQA^6X1-UE2;|ZbVkbT?&18&;DHLq;Lwp}y_doYJfm)hz;XV^10YN9D z!@R;L49l`6oA&Onsqy#x)*akfcOiuFYDkEY&lTNC?gfwdXio($}rI zv%R*$5_0IS#l^T-{m@VzQWerxHJ>087vFxt?}5z{!c(JMiC<;dO_7{QL*g`X6-2 zZlUn^$=>4|-S%K2YYU_74ZuX+B2-WrzmfY^9KOvhmY*Fu1?IdyIJgc=HQ10()AVjJ#CH4|UyUHKc@G8k#WYbYk0_@P0l|~^+q~}c z0KvT(3bVVM*Y2Duofq6^aD4h*sXZGoZ`t3XEDR#;63qhZcrI%-8*94|@&~8QJGbb} ztBg{q2#%f>lVk%ng&QOgLF2bXv-ZUHr5p~g)c{X&^YOOduB4+)aRLE{6~Ae;jovnPCa0gB_5%jNcZ`+867j$BVHP z<*qp$aBb&I=~VnaL(}(5pRK!?Ez7fTAMu~T)XS{T9@EXuTl2L4tfjnYvNicC-AWP% zTmP`VfXog_v+5U;8YD?d$ zIMPfs!Cb~6Zl!2meSCHZPVDF!STosL2<8WeL7{~_xvy=Nd5?8qiNG+bN6YK*UwYhPsXwD&2p-JkQ0H2$mT>`wDiDx3GrX-)# zg(r&;iB>=p?CyV2@czVJm|JG&we;y-`OE&*QEG415eD50f9LRZi1T{C7<>O%zo*5lKfG}M+{maoftx)g(tMI(6UKj<+9Q4v&w9T+1KPaF zTxTaYPp)8vY`5UM1GiI3kiT!W}2iCsM3vK}gOgX67>Q_JcEFOWPq}^Eb*ynC^IV4yFD!<7LI_ zXo&AuNf{^F*!b?qY=TLoFF}J<9#fa6Y}Prfo(cBj2Gne>ypdy_Z2Pdv%>^uAneS7z zBAir8G=5)rALcAMmsWXfGD#JDYX5mNWEzBrGGU=3UFQ)6EbrZEBPZ;4m}joggD3wG zU^V?O5EeT!bWxjc%O@4ycWc;veQUTJI6@a?v0vk4GOyls0^b>cCBQaMl-Y2i9waR;`)@o|Elg zz|F2kf3W6R#pL_!vG^sW1YD;A=OrNMxs>-JeDm#zvD@LJ0-tTbO#!uLP-PgQ^WqHYAkJMT@iDb7l)n r1(c4UCD|UW-6Df+3_a$~&Nkay>eSXa^~K`9z@Ltm9=hnfb>RO2%MG0! diff --git a/test/fixtures/missing-bmp.sb3 b/test/fixtures/missing-bmp.sb3 deleted file mode 100644 index c7d7fef9f8f16aa76d29cbeac58d51890ca5fd76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2623 zcmWIWW@Zs#0D%)(i$cH*D8a{|z>r>)nwqDZlv|*iURtRi8p6xK?kQZ5l5~YKdd95foXySv$}vZ<3}w8wvX=(1XyL9othT-Oz6{ec+DYf`+-gRP~bB^5X=3@x(X6Lw)7M2_XbR)=}2p|0I zM1+Pq8v}zBMrafil@fA{BRU08kWW}wg&bIZ8) z`8VeMI6LW;G{=WCyW}3tV}6p;aN*{|ITeel&p*#plUr2(dFPrV?;f{Q@0Od@en*>i z^Cqp?KG$7WzuFX#IoH&;yEHm&mB#xW{be;L9vSCwWc6pJury|E_Tf@`v{0UR-sO#3 zv|7F1$NqAEuC}o}W$(r`{r~$GH|p*(U+1`ezWaf?Ej4igJ6=j{na;;%&(!Oi|I^0) z(32%6x^6cfx4r)GlAfDO?N_O`r&aIwB<7yUD>~n$D^dUa=u&5ybFb=bqStNbxB2<{ zZ|mlmbE|@yPibj%X^}ZPFbM;qp^Pb@R?(75i z+R24K&Q-9#uzu_r`mg_E+R^+M){?PLcmGW;uGp~dXN;(@-!yM+tG&OA?p!P3`|9{T z(nnTjdVBb*YjN&J#S*0h`HmSB1g^JjzsDE5K`+Z)GM0he|LXS2e#S?$Uu?YZk`$w= zBzSSIt*VlzaG{x1Nrr%p+Debd)4irn(^_uysZyjP{)YZsLxZ!z2mSOM%AGg-du3Sd z8En$S@Gb4&J!4I~lYfFMPtEID@-9AN|EohL;i-$b%09h1`t;~)PUE{=H;b=mSDzA_ z)wXE;GA+;a&Xnij=e}9YO?5HSc9|G5$<|b*fAisxXPt{?v2OX2eAn#h?z`rojN&iY zaql1#0|O{KV9zK9Kv^SE@;Zv?AOw%rz~yL_q+UV;O-^P@924DU5-Ei9vuNC9x!t z1*qmK12gkp_9EW*qQSB@%Cl7-DXbPNW()loe=Ffg@8-;vlU6+4=zi4k;b*3|Y8TzT z5^M973%C-`xxA9q`pkbaYx&=as=e=KSZ;lB_Yu!rE0=_VvaOYiGH$r0i+erE*;+N} zUSoD!;rzZ6ihmv%)W+Vgd{S>-xYBo<%*yBfJ9?%ucVYiB@yswk zE|tPhkw?=PZ<|~(^T(!)TZ=jS%(BBZ(-y_=ar-KN;uG_!uWQdOl3#6fT=!)D(`9U!m+Fzgl=bbI|94XS?p-eqj9a%r_Ob+rpn@yyRP?PV(0SkQUluay2*gVX$oI&`iP>_O{CocC)T?RFTV6hR|MSNcCJt^dfk}cl`OG;b znJRzJ{Wk5(-LKbw%Kz_Una&~3)x{CYlK2mlXy<=yU1thR51^!pJ<*;5rXtKlo19`~ zXliJZVqj`)n3j^3mSkjPWMGnNkeY0onqpy+s8?K;PAJjl`g-#h(Y6&@dVD*LD*Q2KUrWwx6m%h#zCcNnLW~Y;?PDQqnt)fk)c^kG|zB;qy zW2EBb4GWumPhYlhZ=IHr+2W!3vE-Q@&myhUK{31 z%;!hUGv(y+ca%Q#o6E}PZvKzO&hpW+dd>tN@weZ->%kRX$2kGU$v{toJRac9$Rxsy zy8!@H0tN>hK@>{8O+<45Vm7QnfLzgn8U!$KpwS1&B)540^8v^fP^FDrN`WeE7}(Ot z$B6C&QmSxtdyo?rDEYv^mPT_HbbF{#0;1cG9E+&-zX6uds4+#2#2nzw3N)92ffWd~ LfSKt(JBSAW{;I|G diff --git a/test/fixtures/missing-bmp.sprite3 b/test/fixtures/missing-bmp.sprite3 deleted file mode 100644 index d7c94ca350feefc318a2fdeae068ceb8f9422b30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1898 zcmWIWW@Zs#00GndMIm4Yln`c6U`Q`YP0iCy$}P}MFRfHa&M&Cc4-MgEV4o&kkOae} z72FJrEMFNJ7{CSvfDPne;6O3(4$x3ppn>u6zK+iR!4dj;@t9_#7(EMU1)9;x38KmA z2}ubbe0{<`@P~B-G%!t&U{)89X8fq7!1nRIfdH$Fvs2Rop9y`M4sRNlwFoMnn?Gm% z>gf>y6DF^kK6}O-W|5S{A0bscUxzNKKcyDm&AU#lbIy^Q-FyrI-s~J#(!!EsfDQ#Y z7U2z{E=0K0F)=X6VGoz$f}+flRK2X?{5-HfOuQgLB!%gZ-k{TdhYbY&OwBr zqbE_EN2bO(bR7OQ@q|*R@@-Dt(EoEwn$x1n|ee#Z|$EQS1y&!eYak{sHE@0v0nym z6H{d@u9|!(WB3x+uI~D3SIlx%eU(i;$@4yM)w%vv%X{kyi|KO?_MbogqS(zYJ$?S6 z7QXiMx4G7A$<-^uI7_nDmOqr=)4edi!zJ+m`)jM7@^iZB%x?R5br;;_4$;(pw|jlS z)Sn-18S{_F-F<&VavH0Ch?;Ahap032RimX@y04UyD+_ODZaBQR(|^v2(D+1?md3Qr zI>cM_kX6pQz~-5F6=7y)xT%*$F_OWs~))h6183tG4H^<(%iy4#Uwe&EX_E{+|1Z0$s{EuEj204+{D<-T(3N_3?93|z?j7nyNm`* z=l=$Iy18ip?Fn}bb4|-FQ4jzoDMla^)Mj8%3S(ekVh~_RNi0cZ0jjymz|6dty@>a{ zXt1n}@@$ny3aiD6*+M_Y-%2>ryE${^q!mv$x*v6X_?hXg+C_J-#M*r20)LaRi@jo_^ZQEIPOM z?Rv9e%9-qt7E8{%QWz&4<74FF8HuaTQaQLZ?}q{Ur-4 zmBVb4o=cx=+s|=8^nBpUY>qlr1uG86trpXigW2?7gq_zq^y*O5Mb=lI>{FDkn_jSa zW9p?G#p(V|`bPO_-qUH<@?ULanj~qgRbjA7+eY>aN6P2@4|iPuc5Tglf%j(_HHBm3 zS15bPuNGd<9Q3*1*{=Jy9~i$p^G${Aw(utzFZmX!ll(P|Pd=GG=Y81run@X-1#3{*O>y-11Nn4cr!AIFyk(mfyoIB4mg4+%%YTtVj5xr zte{3N`#=RX3>;_-1TrZqwqbq&Sp_Ogk#i`hFol6FjS`Gl{X#;~if$Kjn1b>=3~Xt< d3k+o};YN)TAi$fI4P+4u5bgzfX*w&22LLU}nbZIP diff --git a/test/fixtures/missing-sprite-svg.sb3 b/test/fixtures/missing-sprite-svg.sb3 deleted file mode 100644 index e0956c36f06c05e56a9de97f38882654b9158ee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3446 zcmb_e2{=@38$L6G83|L?8Zxqu#9(YCp(4iEP3em*-F|LVGW&UI$axz4%X=XvhuzR!DG;bC0D04Hky@U)w| z_}|Z301Xhlf`h&MJkUnIA?|3Cko{;ymmq&1cR!4(y&XRQkB?JunLk6q_y7nO8v+1x z>sigMivSSctvdj&EeozoA`uL?S=#PaRUs{z;=2q-!Aw77aCH`O^>B7^o+OwPCk2U# zR#DJn;xGjy3c^%E^Drl{NN$O3Mlt#3$5Jo`Z=%n|t&(Qs<>ZxS?zTFXejzjaWDZQ& zjr`Fr{KmL_QDmz;=_r4h=;0iC?@bl<8g!ZucNG5gcl z#3PYj5|%*EW-sk+Sh2Le3{%)bFu1&_wR3O6W34LfD$^Q7Qee-d{?;>e4@Fw@?l!Y zyWW=&vl~Zk7h@k7^2ntX#IJKjpD47s*qSXJ>u4#Cxtvd z9XF51*){957TU3t4|_Xw+e_Tl+mW(Vxmv^Pl|Q!?KO#NReyRN)K5)X>yXsVp@&P6}FBSDY0bB zY%o3-$JP^A!#oGdXKNJe8q~wZnfD zRV?ze1yL_UVr|AdHew#bDw{07)Z0u?1a@ z&nuY&sV0IA44Y|&e@8SaNwohg{7%}jLj!!3a)%BDHcx!u;aB21O1|gH!2fM*z0Tvf zvC9W8nr%dvBKLFU7mbaW#B;%YPI?HZhZ6P%(a+e*VN%;a>9szXAqR8{)l6It@46nC zAxut#!^@p=a!)5gyOc*&4QcI%8qM3S=uJYEeCKBaR~y$gGUGcorr?d%%BNpJoYCVu ztyI`D>bH0GsPaieLVZt})*t1ObCPLjt`4n-0su!Ci%SLzKGk1VGCCS$U2Pq0H=L`B z7DdBFTT4UT1?T2Qad)9;<21CiRsJN0ev=Xvl+hwmf?%N!KHHcY8!Lk8b{P_PQ1(&L zNKkeV@L0700M-)$016-hH!_vX1-{b-z+gAwLHrXUwvu`>*|NjvQqf=@dnT#RnVwwX zRgzZxl4jCmI5Y))E8k&aMvm~830Og9Y#)S;gz|YwmS!e zR_!nJ?AhTVX7<9jDm?8;v`<1{UP`m{r(tY_^sAoqUEy-Ln$QH8ndOES+G|2B}SoC zsXCoG)*xJ}t7y$6;!G_zz_^tA>#E-r3zT%!CJol|=&3~Eg&h=Z9Ca@WNsI+HUAlxh zUtNJ}zdU_*UHH~!>sD)@tr1cqGmjoe*GXNque;b)%T^MP(O?_K87Ql+6xzkg>#DfT zuBW!;JP(J4qYrB(Y<;M+N%l5R+6an~P>*O3d0_q82XRmiy$NAhrIR6J%cD95RA}XsbZO(Ql&!WFq^4>SJhAZpJ}|lH!aK4FT|2ClZsp0BKQ~N1xs^; ze<)!neAMH80aO`DT8orQl5`T?!bklw!fGAM7>RrRY+~kPCltYFhD=-4E1=E02D*PX zcRJ(!AiH};>T3#DCPHk*5rjP#`3vWppT~?Z(**gzq3PlTZUtGiJb_)^)YUZAaBf&l z4K<1zh2o;Fu8zgIW8Gaf-Q9F>WR>7hk8cF#Z10N@cpm{T5Q`QbIB=x<8k}B+yH#jv z*)CLR7H8MgP}<(#y(g1EQOoj2bwh|kg;NzqEpkRdTO8s=Vl@3OS3c^>qB0$%(=Qjq z5ZWH;n8aszdd2O;FsZNfR~9O@+4$ZzDQY>Bo%c27N|_I>rkF2knl8R~Y8aNaZk_-2 zkRgj)ZXOfuFI@V%!{;J-oz2DGe!%~u??eU?k`4mE0l^9nfeOQxwu9g+bJ1YP`CED` z|9@_0KF_>8Txhj8_HaHLqIZLrzr!s4m~o+V;aIr&D2kScEZ5o37G+8Q`wx`!EiQB( z978l8MbV}pFTb_8G^W2`j}|t|@iq%T;T&%>AC=L6gSnSZ`72K6$D9jQ$I;e&R7P(E sHQ3 zuRZ+xCJ4v?K1XByEn^e3WPHOT64YIs5dd#bnVHX1&c&T$PqJG{h&cs_YE)~fg zyYN|v+U+Mx7(-ct0M?cl-WTBN>&aOocb)&q;CPhpw`vf106^l0YD7eZhxq%(sD(s_ zhppu>Dk|&qCujY?|CmE*-s7-g4W#)%mmA!(GDC?qGC4xD@0Vqbd5^-otl{ zarUR_Uv{$m^{(B(+?*&K?<^hfS!zw~``Eoh>1^V18|8!!*;cWrsU|)0`Bi3CtB;{W zu-!HbSxDm^4*u5uqu=f^0=i{&=NyGqt?j*7ild1}8qHVz66nZme#a zlC&S9VaA+_GE0*S^)f9ykZCZNd~EO1^T7s&JcXj=KAHPvTT|GZ!P9B?4F=2K+VO@n zJ`|7cKZB`EB1fP|0oh>7PAF5D+!=^dD-PNJ%&8%LO0uXasHTc`>q_nJn2s$fS?_=2 zPp2lUE%%-{G~2CR?{S+RBKEpLcqROWdT^coJMl>j&qE(R!$~o;OjMbFt|?vov21bT z&bQJ>P90J$e*b>vj=`flbuQo;+T|hR!t2>YMM)Pp(|`1>kjj90)+jUX*ue)M1?S|V zVMSl=PkBXjl}CfS8(FR5DfU7|Fm~#JnE}xrk%S3&wAFE=EJ%@K1}S?V<(%9p;|dVF zFyQvZ(2L|4rNj;#qwA6WdDAcK%(=zB-I~XSJ9NF;w|cMG%-ERcfq8Zc2$k=dqCA>K z^qz?us3cbn$7?<wEsmWW5?Va22%rKQ6x`$z;)_s>CPN`@b8SaV>Hhr4b{b?FPE z{?GHhSKQH4)=8GXz>@tWAGUNGjh3ZMOCko1oFDyR6^g~zT1%4L4rrKAg`DlAE0C2UrxoR~y zUqyaUt%lk$@3?PrZQ5L}APsQ$C!Do~g%StD&BWC_;FlN~BxiqsI73JU0OVW&01O}j zKkpcCDCeJN00eS}HwrPg%}Lr&zF1*GhPFK#=CXi)PGFqA5lkgtnY?D%YBIhA{^zb9 zOB?Uw;qnn%yt~X;(#lI)+e0cpokgF1dtR^p&B%m6slFK@BCbB+a?qf8;0~MDN9&2? zQBr6|WLZv|?8ga><6bWlUMK5DQtcX~s7!~(>;lNi;Ij_3>>*D9zz~a{3*Qm!YQIGx za?!mtkkXJBe_`c%&~pl3&fZWrOu%J)vjrQ~wg~B9*K}P*(X`;_!XwUd-c?S41#T=H%WCqo@1y z6zgbS0L{MQ-9;yt^9!Xz@vwUWzBm|Zb0XW;jE60 zya%7%M6+`J|xZl#f@y3C7{nam#bAN#_BA%!#@>VFC z$W;h#DPpSW(``mSJkggvl|`jP`JgzwmL3hn~+ z{><&AWeX>2bvSz9YHxE@G6gqNrIuPmSl~BRQa4xSjKF*}bCNvaLm-T?mm~N%^FQcx zdJHKIp(Kn~yLEy@y4u&Dj*82hgpEs3;q;N*hY2I9#yB~U zl^CF-t*}Q!OGAo42p|LzpyDl^5QRa76zCbymMpQ|K}8Fp_d`(jyBkY0?f60X@?hCr zGDwe1L4!Ke%Plz-V>=NBi!EXE3eS4#BulLG16zW`^_F{CL4#*eacPRwoQ#pNgH;s& z*AZ4UinnFbAmU<${uA%OuI5W8Ub-5r-q@B)IXofZC|pwJio1B|Tt}`mweVbCSs58e zE%bDD$C9rWUMN0)v5I%LUE)IH6q;FCvAu>sOXlrs8=Gb^uXka}`PTYCG{m!Ah;smQ z>$-Wx=b)QaTw`6uZ~b(|69I;})KTNJNzn)%7_7j2BRlWno|X=^NH4atE(7HKC#_Ap9j54ym0H}G?hpf z{;Q3lqpoL!t`Fil{K?>w1~ zaHn+!j^wy8wq}@QEVjmUI*(5I(at|{M5d{+VXH# Q1^_V5u;aA4H*oIT-;vriO8@`> diff --git a/test/fixtures/missing-svg.sprite2 b/test/fixtures/missing-svg.sprite2 deleted file mode 100644 index c8e3732de77bdb45a542cad5dd89cdf623b58100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2635 zcmWIWW@Zs#0D-LHx)3k}N=Ps$FgWFurYg9XRw@J+6lIpAD&%Gs7iZ?B>xYK$GO%+l zbV=d@Vh~+g!Og(P@|BT+0c=_T*i;S%4ir=G08Lf`ni?PP>*(ws9HFllkHZ2K^La7N zPfid`PESZm_~7dk_JKdFBcOq4f&{a=fHdPrEd{oZ?+pZ4Wt^Rw7Who)({y;#xU5A` z@!b45^H)!g2$(Q=)%4jj<}iz-B>o7g+W9(kN&P9c_-@{HVx4o2-0bFK2=Hd-xRMr@ z90PPM$i)c1G#4eqL&$)Mfk75e2pQ;=CzgS|@k~S!98BL9U<4DR0n_=vL7r}I8bH&+ z9m8DHa!V8hfOawhp`bP}w89t|m>2{YQW8rNS%7M;GB7jmWiR4=FB&XsqdZ&Xk-}=R zVz$ta@wXC=^lr{vIcdeyjqXPsAAV+ft9H@dE3r0TxqvJ2oXaa&tag)4ox z$*g?tzoTawb7$s6|8-w)#_%xM1jN737tajy<5DU76nQj#@wUkoGkUzC;Jqo>!ufM-k5qRM{&BplfF@Y zn)h_twft8bnI=gZYgHJm(zcQP!jbZM|HB>Ezg=5%U*P>&Mor-u`4!3@@~ef{GY5Sx zc(&{Q?FYs$&wNv1yDj`l#!J3M>Lh;+{$(MPjzGMWfP9Z^oR}?l z$-n2HPQ9A;yyfMC_dkDJVdCKS5||`-lh2$}lBx3d+;7vq-2Hm}r~LmumgyYgTwNTY zEQ$X>>2v7Eq4U zn+4Bt;SsYUrpySRG;{i?fED=(35glGX(>rbGt*|J$j*tG5;19xU~pneLP~DJtE9wd zFS1r-XS_>VnEfc_(W>mk7db1lGg5Mr(lS$CJbUr%49Lsu94g)nYP~>Df;@^n2$F$; zql_nu7K6()y{zK=Ja|TZ16(ANClXDiCD*_};y`M5rP#e_ThC!B9SdbIKFiMfy6wr(}x z+du!==9>}z=iE&1nLK=Z>|g@J)Q-K%yo%nJTwE;UMHT(S6dz9%VEv@jc_?(#pSH(W zm{u)2vNb#9uCLf~=4%Omb-b9x_?HCiVtTK5tavaiLM##Q-WL$x}3_`U~>HM75`gYv&2nS<*W_adfp~) zflkGyW49LFvsUE$AAE0)5bN}*QEO%6`KxoX8|{+=l8U}-{e1p!S>5g{0gogaI93|U z3#ab2>8;%wo3FgJ{^F+p`I%-?eC!YQ203JII9~T>+da>9j^+DGAM{V}yL94UZt3mW zzKfTZc5**m@Voc(pFiB7C=7J!UmC>7zyOLU>`@4cTs`7aF|ODgdTE)FNrV}9l?)6K zFgV}{qHyJElnNAU1r4zURz)LMc%Uj81`ad=Yal9A*a6-M`#{wwasdXaMqyw}qY@)- zUtyM1Sn?{mRmcSes6>Q;Esckmk-Ua0B#A5^(QQRe+n_=S2DUUFWx?%1T#1-OZ-TN6 j3~XuaU?a+#xa`J~fdaf)fo3u=umRx`VCJ334&ng-hWm`q diff --git a/test/fixtures/missing-svg.sprite3 b/test/fixtures/missing-svg.sprite3 deleted file mode 100644 index 5cc0986898c684baa0d736794cc4f0606e887c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1949 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 Qw^N5R_kDfGoT|M352Jl~y8r+H diff --git a/test/fixtures/project1.sb3 b/test/fixtures/project1.sb3 deleted file mode 100644 index 747ecd37a3a8d4a11b6abd6d6b388fe395a633d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41936 zcmV)BK*PUKO9KQ7000080PmYiPLYFN4CDd;0Kx_U01N;C0B~||YGq?|E^2dcZnacx zZ__Xk{wtCBvPoTLJ5JJ+4}d1##3m#<@gjuaVqZ#V5=XXMR!09jcDm9s5CtK=w0D=g z^K*}%^EGi`X6P)LyuBv1ojRBynK-k+5$T}yHrd2RWC^B*vO%AFO+I{jIKMBx)^G1T zn%_GbUmZVq8K1PPXq)8wk$rbW->pZascksw+MA`(pd{@4M$7q)Ep^*sxBVg)#(3{c zTek>+Xh<0B4Qj9!-Baa}O2t{qgraG}Dpge_=bQ?pC{t8p0p$BkCCIrlx@SJrsuZu> zAC$*-IrI4n96Zvdg;28z8STK;x;yhY(Yz)TF6iy(8!};Ix_&nzRxdhr8~ZqcA|K~U z$TF*vGS3oT3Z*J6t6U^mzQf+@{x*uwu=Js7>jp&Ne6A3TdLS0szQHqptpCbr!uN(g zbZ#7a2h>a54D=5j8(5)vZWNl~J{-2aCX>vY%UYqnG|<@|{I$synWWpWS5iPlbVowX zmAll_9#MWghicsdLqDyJub2kEJO35?@ z|ECHm3$N@7X(=RUNLg0>Gy*?3!l9ObGeY*O5t84mjZ88%rkRojPk3Gym{UXxu7=6#garB_~)V{*|1L$>qiQC~E3CMvqa>^>OqPO#pk!JdS7z zmEZU81!TSc22e`_1PTBE00;o@n@dig@rAB60ssIo0ssIc0000uGhsP5I5%W8V`4UD zGh#P3GcsZ{WMpP#VrDlqGd4FacVTt`Fapp0Qb|TeC;|WgS3y=qW^HsJ5C8xG0RRC2 z5i0-yB31wZ0ss&IWMOn+1Ofm6)c^wny$5m)?-f%WJR_SV;vlOQa|TuMU)o^Ajk9T~ zlBngeN5w(m^8)QA(ML*QeQzUh3SrJf>K!Wc56Nn${gEY&?wC2X=-uKBojOEdaCWtM zqG;GfXBSH3Y_)ol-hpd|ai5OJA^hSneO=#qpSamB5zDW|%# z8_=-!r5<`e$Wh8sYd?J-=lRptfxaKMRlcm%y!9#=f;06&gg`7W3=>!KpVhO&^}lq> zoa1@|dLW55hCk9cIwZpelII)FhQA2F70*%WYY2WNAUX&^wK$d|QwA^SR?jNJ>cU#l z1?ou$lp@zP&^+ulN+VhcNA4TgcgqdSX4Y@&u>z7AGb(s6sw+Gl^ay10zu~yo_SUT5 z5bw0ED&EB5Fd;kUKTwIbpGe^%IcQqgz4b#`S{cV2n$LOk`dVsHwhU6dHbFAmh|2A z*ZCj+js%wo7Yd39RRm%FP)h>@3IG5A2mtS!OHM)Y<(yWF001nK001Na001~MV>32n zI50M3V>vQ2GB;v5Wj8Q1Ibk(6HDfknW@avTVRj6cWn2@E6UIk(jUL-rj}121=9m8X!eUQ~7}MGi7a+ohqADHmaObu~T`VoTYRM z;H!vOJ1>8~dRvwy^^h7$mn8e739{H#NBP#ZDa8k+bt-bT_39_pa@3Qw?r7i8vekT` z&R4#q$d?bSy2?@|zr|;T`FtX83tzU9FFGPySesJ%q&BUkqDR%!)@SM^>bmOO)ZU|Y zP5rU5lH#H4p4dp3x-!b+aV~LcIX;}@Y$W%XAWP~Gc&2_&r$B$gNNxf*jWQlJys!UA z=cZ=98bSH1yhQR=c#D6V^PHu}GGHOtS2;hp6h22Nm(41D)*LmsXX<5f%i^tBo^ie5 zLH#D3J(?KRTE!PBUy#asz!osqF>f;MnU9#?meHK^yc7XN8l{ZX`eksytQdp3H4D4t z7qya1PD7rcRIm@xFW_6j9_C^rN8N07HsHNXOL&rVZ0YBG+mzPClku=gm01VI`{gCx znCRhJrG-zg%6y)07(bhdD!W!S3!d2e<9 znbDFNaeuY*hJTxB%ILOCVh)-yk^KXrV8{?I0!Q8Tvy?wnEQk@f>)PJ^ZV$ zx$77W-t%N=-&6zr9cQn2S@{_-3Vw%h%?ao9(GG^uL~6sYSf2&oF+QM%5JoU!C&GqR z2QK%n>z<%hb?xaBjM&WHXaAP))i0PKP*~!UqoX65;AJz7PC$N#heFbULX|Xu8r^B^ zM88pYL#KMjtBw#_fA90*pVJ=8+r^JGo>?qmnn-%CADtozSlmI36xoWz% z=3Ga<^j@Mp??`L+qF(Pb>zf}Qm|?TpWDvb$&@Fb8&MI!|jyzir+#~E5Muduih8lXW znX+z8ogcc|<4X(f5VxV)?{;?dw~l|M>#pdkBpF*H&pL#e16y z=e32x)APGVp7)-jJ?Q{Y8LhwDK(r47zotT#)mQWNz)-5~HfJTb%jDy>-8MMfDo$au z0kO~6Lvd$m{n*{UN3@&{7PY(Wd|LuFvL|)KYavXaq;b;ny3IC6vMb0DWh=pCW6$C3 z3GZ>IAsL#X{DH~&KKrhdof93()XvsRt@YHBUYp5r)<*!z1c&OkUvnOH$|5kZCv33z zi-iAI7L#K7dQE*%ZJ5+GM}>7h?)*rdZ~N8WM>{^~F+VI$(%TF(Ai$k3I+xnl+6b^6 z__uZ#qB;H$xKxAB{Wp=_!)UK-i>6jm7ur$OQ=Qm8>xrA}ovJaG9=JYoyvrf-e!LPk z7-whu!|t-}3pm=KOY(a@eW0tOxGkcc(jMH-YQuEcbzd9Vv3N$FXM76%mV|drcE%I& zHhDJP_=9#BI~Ll_Ohajci5>yd?Ax5%UQqQrUbp{gU+xI#cb`oZuNwSBp0v+!Ryh43 zzP2IZj@dTbs@cB8JOZ&bM+MU}IlaePjhePLcenl5vC#RHw$wu#J+gdSEfkVN{NS44 z%5r#b(}zLW-X>nPcd`Y;p6Nf3MlcG7w|DBdTx`;5`O>CN{nq)c2RvfMc&b2~r{lDo zt=*iREbM}9j@xpGzV_Sg{vt0KCnx~RsIdmx)#ieR^Nq~rTdh~x*E&rG9A~X08o)fv zU&ll@l1mryGA_uj+~EtUmzanhH?L56!qJ#Y?+IuXH@G!CZ|rIEYK3(;^qrep;~VP` zVZVt>&cUvOEYay9RZs#*O>yH&7srx10OhyLxs_tg(~T zqO3@^uN*}#_Z{C5{t)(%Smf)ZSUYdnHa&Ie1A6$#W!gZ?R3oWDzu{8@wQieC>X41ro!>{( z*>!40ASO24VWVRt*~(!L`GISu+j(aSp~zZCmn^=!kUI3Wlic#GA-I0Ic4HmAL93HA zX2yN4c^IN@t4y|XQYYuwyOK*?sqRiLcL_;Qu2zn~Z?1FDxAR=fuEwA`)7tPlMUz!G zXgWsdrk89@!&{Mu9b-v>4hBvQZli8-P7Qd8Wt?g+H*fk}zh*~A^B&4-OTNy5pX9-KxYpp9fwSZE~iwNB1a%08Ty}gy)bfqt`^!9 z+GROuF6h%8hixHXoHCrtN!kuZPOsgLxc_q^;_WPcDF5XAoz5R{=tys}t1qh>trXVw zw5AR?(LLonqc+5ILX1jkcT0ryDnvn98GEuo3 zh0=wei4bD7AA@$I)d^XoaWc?ln^(2p8Q({4eR!aGfYJjtW%5%Gyrr?`Z`tvpm=bDL zd3)J7gm0qp&w_)}B|IlXok4DgyxIP6e;1EE1i0ltl{}91^v2%fEjl$xrQHRD!qUH9 z&DFy{*km<7iy2g+-DdJ5r%KmTKF5MwgPwVxu~)M)RBPa6&)y#BYEytSxG_m5I8DYv=! zY$IYMi1%L88sv(?+wLHSl4Ct~g)~Gihqw8iwtHgyeXW7@X!>HmxW&K1_4k&X1Nr6u z8r#FB?}~rwnp%0GvT>IQ4devxttuoRKw2FXSv_9w*Atp za_Rm^Us#hGo&kp;;xNOwy=0CrD#Bu8N$6IW80fNwhUnPhi*Z5M&U!}Cqa4E=^P)qI z*GEAsSGDrZw?cIg&rmD4n=Z~F!j1S17yQHQ3XJ;{zC6XeXgHo4SjGE&Jm>1Kh01;1 zmW+RZSl|fQ6rP7fqPy+NJT8WnMYe~ox!#49Y8?~*U22*<-MhU}t!ygqTCQ6$t|@o) zqTjP2_DJbs;LkZOgoz!x0-QgAS9GtYX!0q8rTHlh0|D)oZ_wWv*r$mjCWLyR=Wm$@CLA5Ap!w z2CK7iabF2*+z=M_$@M!dTH93ikWHIG_rWNxe|)n1v;Qm2rUosL0n5NYR)-+kP@uI9 z=D4$U$dSm9bvr!R$Qj+wtB*K`=ClUOo46%^a*VQ#i;|kZOsz?`8c;xOkR@oebsNgm zu_90}B6Hn3uWJ~8!&b#7z8gJgB&#+4?`*Dnc0u9x#)yf{;`4fo79YUHkb~CiQJLhp zK<$XpFiWp}SQp@+Qm^2_B6rle?e1TVywh1>1>}aTaW`?R?jy@n-~vb=)C&!8tPM;G zUk+XMaKaiG*Qu0?elCrUsI`1A0cRIw>@RrL$eGZVsO!NjKU(p@T~KEX%;`eV?{H`+ z#myUi%jlu9mS}46$jI^L@#4K%sTsn8T}?-(-pd{vB!dVLG~^xhHDN44F=!paZSV7UX5jz8uTyb-V&7W$fOVI@-k zBt`J1=GncB>JPb5DeY;4#kySuEEf%tX|83TxvzN$#FcP5pm5XlCTwts{RNA+>bqo% zya#i+U0vmmGe3QkrQiGeq(5!NO4r^J0J1ROV0H_VV{aZ3zeN`1=?}pV8B(xdKM}ZYEe`pE(iq!>klIXi7o@yecCDqSAsM+jp4Y%-C4Rj8nNuBCOIv;{rJT&a z)Kb96Q(H3~wD@ZB#Sm?B2zkYm6FC>P5Ja^1F^f=%k*EpiOX(xe8*+cor{ObB{p%Uj z6JInySza|i28=fhva}$U1siUbMU;9bBSy47OPBci?AY1Y-4m5cxzB#!e%CdR(AQK$ z%y5>8CL)6_pcS&lGiBrU&1u1M;z<*^f-Bg;&1Kk)_%)IKKr;ShDOGw5e-x+bXPFfk zJL@0O=UM(Edq$LPH;U5m#8^A1pA%i>nX>w(kJIk|qh%`6vVMPP3um@!>X~maH!_s! zj2Vug?gY5*$c%Aa|JI&p{6&6urG>MBv32MP<=XGjbVL@aYHjq_>Ioy1Im+mccC_|q zi#%u3Erol6qWyi6tf6XjA)cScnw;uy|5E%lU6|ruK<~K03DnLp76oYQ-Awm=4^6`J`jM ziW8p^Y+`O5QmvcM`}6Zc;cQ10=Zh}K0$`e|DN`I%zG0E)rm-2hU1@!@eWo!_ksuio z8E~1C;MVEFJwMmy8aKw!y){l-95OG}$pA>!2KBK-R5&&Ib)>Fq4=6(=Rbnn_6X-C~ zdheCr$@Keqv&?$zfV{VkP z+{ThXQy(YL~SiGjek@)yEpfhRk4BCq*-fkrwb z>k!3=@kQ%Dt1(cm-cx}6+E%?Qgn@{$nB}OuZjUTF6o!IOK|TK<{aAN+S-_8<>1zKj zkJqZWSRtVnMypDGQm#rWyd>z&j@R3s`+?x^Rl@{^D+gC3%*VrXwVpX&Qy>0r>1+_p z7~8>2EnaJAuP(0MHL4^tHy+=qi2O`mGQKQd<6qZxX%4uVL_#ew; z4S{%GqNhi)uiQ|yt9MJG`?AHwwKi@i=N)H+p3u*!^v?eL<3nl2&|k$@Pz$Wm+jh?%AkVdL96IX?>*O4;yQ6%4_C)4<`KAf3vO4G)q|Q(ofRvn8vV$)9 zsl>e6@iKT1c10^oG{f7+H)P+LT5jzx+>?GWE2aK6BVTU`9tQiU-@dv_*rx1_coqD1 zCwNCzz+N&jxc&n=kNY3a;0`pW;=-cZkU*FO&#F}GK35$qQHpHln2t)N5lT|K^DARk#S zb1NrA@=08}pwfCa=k15wl;3rG*?GnyL_R1+EtMa}8_~=nakig5(iFGilVr{n-DSFS zH;AQz#JRcV;p~QwinJUGpQUVk6ftP&q1wSWU3s8W;dCpu=~!5tyO#j?Z{^ZrJ@=lB zwmQPv+y%(r@pkJ+W|_hKNyC23aYT;JR?!#UOLZ5bAiC*jz@7kKw7FPxjd_jxQwCa{ zTcox+XEeOj`q)|#&2%))L??rr)T4z;B0v2`m)h9ABX44xJ=M(6l13Jke@PM{A}&O> zT+W<+z4h}#MfT!zVN`cIJKqW#N5cW|}%eg>cPa)Sb2a!twD~E%)=lGeRfU-<7}8X~EtpN{#8atY?ou zdDmU!W38UxTA%?MRzeqXGEm+7)ZV}o8)Mn7GQ+u*y5$_fI(eh8c!FJl`-pl%|G1&? zr_>hVLU;q2P*UQo@Dq(E{BjSfpZd0gN)Fam;uG1L|$tW}?y!Ggpqpq7YY>65`K8v?^RU#kefO44r*-7^%A%_u3}O z=(}i|=_8%DhHbcd!sNuWO(fi`@_JSndrs=BK=3d1{g>DCtmH{&*7mUzhMjgxxDN)Y z{P&ByWjByno4=kGp3vJkgRWL8Vx8txNzceHvD&DzpKDL-lDvQ2oZV(dCI(^X+EA{+ z(ocZGjdudvej+F^MY{I{Z#e2|y~GEx ziUj%*NSG9oB~@SiZ+WNKUzW2ROM9B#_ssoSVqU;xq~RdG1(UB|ETVA-l^ty3w;P>- z9EGeu3%8apEm^Q&5~bB0>?hs*d6CawCe3Hf59{cLG7J|n0Q__3wb@h6v_svy)b3#K+rBVItli*klWW3DBdbpMpB&!2 z#dbz@aaqo+7XDc6;2#=UF5B^*_ay0SWLvF*f)?51p{dH>xiO+sW;+9^hcBGgjva9F z(Xn9r((iCSh))RSr_<{2-;qfTZ>Q6yc(tGIt7aO( z*IX!E9urqdfJ@fYU6}>XN|FN#6Bc$^`Z(^i^ESk-uoi>mz1ZaFD`y6dJq<6l=1aWk z0ZR#@DVZj>x6kl*>P0l(2i70M`MiXY5`y z7HZ3b1;Zm>OSZp?e(3n+UZ;)bOZ(r>vC!@EdklBB9`I_Q+HuYEf8ydC9W`Q>r1QnR zt*d+yd1|bp_ub@u$2XyrJ!|o{*6w`tCe?{0&e9*v&F&Qk`p)Yd*yG({n8(puh+}6; znnlvtD-D0YZ+U#=#pAy}xv7ZVZh3ZZb-Or{MHi(F#GzQFa}SQ(4k-d@h(9wPv24W{ z@tK7aEjNDHJ$;?@=U2vDhvgF&FH*0`oN#baMQVq9x#eTR^eM|tA?Q8w^Ypz80iPjS zSSq1q`iPUJJ``xkaNO?v#wta6kCDk&2fc`xJpJUHV*7yIK4mJSd!d~7L}JGY z9%%p5`SRz3qE8jn{pvV-nyWt&r)<3J$~j|r)sJ%I*!ef{pWTk?ssE3m z#w*J{%s;@q4y^5wmf1*L=P;G(-&o(4qqO?mc>9^>D)zhhBm;>&>Ov-)DB%l@X5san zUz;ACd$H$VAm0qR)3p}&MLUYq#5}1skmMJMWyrKm~Uk!%6C`DJ>pFD#HRae8FyxGK^8q8IT1|G^V;WP zMC(u$+u&z=PQb$#Ag@G(g%l=CHV@drFYbPlwV3$nL4T&xtQ73wDRzu8#&Vgn>qRe6 zdC|(}qK@wmD+L`CVCVgpdt^cYhzIC8oVhE}^Px`m=o}21=m~RjHV)yM&z%x&Mm203 zNa#Eo8JY&VFSsx-U=GRvfN`!t*YV8y#QsP7b9d2$VAs7~IK~3)xu52aie1q9(LQHF zk8}llSxQ!_=C`mK&35O~UJpGn^0d3BXwntwSe6lDPY^?XTFSW!NPTd(vj3MUKrvr8EqayA^OM;9z^e z4vSWS58a);xC&J|$wkw&GV`CPKIQygzeI$eb^p(PN*~2>T3C>kVtcmkIbIaM&!^n9 zPxyA( zF_Pjrag!hu@Xp|CbFKA?1ag=-fT-1M;1hX;8gq8vqW;APM0dOUnhRE=d7p(x*4*VR zrhO+hSLMy8w`!#q7ehgNNvCjydY@NP*=b6z(e(ADyMuN_`Gi>SRV@}otxSq*|L<|1 zC*qs_WI4Pw|C&^9BZ^0syG9ZKhIXQHo~1^G?WT>=J$s`i?t|u)^25BRd}~n|S30q) zftPveUH;dIIt~|Um13)lu+nZ6Y6|1EHrVz>$ah6>oF!*py0wN3~FxrG8_u{wu1;#leb{nN{y zl<#dD6ms-$QWY#$^%i&6N{ZfYCv-GmU*8rxmnS9Kgf8RHl7pNTxfg6XWOR=-?nnp?9j{@za)|>I7K{7Ydxr0qkA6MzYEQZ| zO-Txjmj{`fZaBc!}& zDctgn1JKsj=(pILw_Q07`6euUH+1KJeks=Hl?Qp|Tn&+p_`>qX{^-)~Pv2hc%1r26 z(m>m)lg6wf6i^OaqG6uqwKwKj+@bYNwv~D#5;&hC9Fg4QcTItt$8!4LKm0sWUclUF z8D>9fBQV?{+a}ts`ObzP*06)Usm&t-8lm1VlJV69wcJ_ylYx_!l+>;7vVUx9w~z;; z-#D%!FKGT1D#Y~$zsVh&uEvf>Op&TgZzzg+>YNl#+0w4bTb(z`Qqr2fz9?i3m#AMy zUnk64YiN7Q5y}e7B6n_-_0}Ije{h5PhB6CY0jG*}U@o@TvvTAo?aQ%jRjQlx1@xSq z7h+U5Ts|*_(aE5a^bY2Jb!#!8x;hW)|3E^-qwB_%c(#9&ywTv|T1& zLbPeIB&apGxwD7n_NiUd;aCDh_shyIW(5Z<=w;s@^QnvdIryHP?%u|d%^>Va0cd4C z6B$XmP7h?qUw<@)w~6Or0#Q~Hvg#MT*fSh4qhN5XDkS~)2XwAvU{E`c$ackHa<$e8 z6UEbpjZV9_^zG`{U`whu7!*VQ`%w*xL;RO%4+trkAqH-ZV~@lWGNX* z_NyU~$w9#}5282wwOcm;uCcZ(fw>XY(ahvnN-G(XJbrVZuj#M+m*YM|3KYF1F< zlSVBr)aWyN3pRZvz0m{nJQnhn@>UuIhZgU3I~HYqO8kf{n_;9`aoxh)yrG)_ZoE6I z(N^yQ1aU8R?+UpB&sxJW_RX=E?F15z(o}V0RCeWu)wCO}!EyxF!JSG>0j5aD1go0y zcIg}M?}^`P>a1+|f$vDCFb@bJBKt+_F8e>9KM#GPl@>3gngx=-JJ?tR$qD=p#WU-I zpu%04oo#-Pp;r_dtOv}Z6%$DxcY5MPt%tZAo|BZ8$8j=x_U|Sa$#M&{%@tP+9``wZOnSJmv)gh6vO*c4dHbS3KqA% zBCdG*XRj4dgQA?Lx01OkUnBFMjxyP!<^!|MP5tqTHPRL&)l}HIFxpt5Eko2Ab!M-HCI{IAr zClbVDVf76cz&$B=&Hp<8jn-EZn@azdT>4@r!N3GxjelXb3!o+0t9BpO>-~OXZiJJ2 zm-RKx$CAhuKLMS8mEkq`wvLsToO&|%Ih84D15xpzC_ke!$~cut<8-^Yz$+0OgC0BB zSe{WsN$`S6zBy~-h>{gxE$a5H|MWgy9C9v)r1j0ia8W;?8Znjp} z)m3bljEb80<_k$ZK2@^p$<(4>&%3)<_d<9!F4q6FnR0^iycx*xZWuj6?Bi;)6S%0% zS%t15q-q?GvFlAw{?z~6lZC5QqMy=xj4VenO*g7t2L$W3qVPUXBKCzvyI`zQ+B@X2 z;)fzBpGyxLNU1f;pG@QBzHN^aX@SS_uMzL{-mMm{ni_W6M~4%(I)$ncl#RBm{^HLG znk6rVR&+#HLWy~b*4LV1)>NZm0#R)*kV<@XoEc za@%LOcm4j``ok&ZT5-=fOb3U1L};*juku0U4VVH=cw#pvZ*um24eM7|2nqaY;Rn%m zw)$8og_rIA1(Q+LIwOgN?;?$0Z1moU!D5E)4@|tOM+J>SEhLH7=)p4%I^G{ z)Z4j_JJ7NcYqWg?_LY%3z->+6z{V~mq%bNu^cl(DoC9bT*sbhZImK?6`QClBq9b!C z{lVYhsUDqS8&x6`qNZsnZ&k?x9duibXpbE5%0qtCmWe4mV?KwAS^Ped+O)agaN4OX z*JhU$xz)1$U;J*aQ}_^{u%$Ko;v$0W#&&W>=j0!e2*K`uSnmI;xVB{93`NpkkRehH5b?`t|cb&SV2>`3f-E z=Dp2k3k%IA7OC=%IXdlI_3nHtm`oo%gxSX zp2K~C5REcTiMhHxHZVD?#rr%i$`qg$yh@S82vQdJj)b*MmLK`G<=5F7#H6dTuaz!R z7nGrQKoe%jfE&2Z1Z4+yJIUawMhw*-Ye%K~c>iV?J?|Ql$}9?i#iK2A^dp*oz%O8Q zvt=Cvoo%K<>^9Hppmg6Hq6ZkM*QA^xH<##g>ZY(g@r~{OOpByt`#UU{7_Ck#2yBNr zQ~$I9#qv0w;9(cg76*jFXX8@H57G z+B3Q*tV9lRfjuD<_uc4w#_{TdYjx67E8FQ=Lj&!BHJ6J5f6rFz7`!cgVpK_^!WW!G{?B}?9llr_8~JE71HMY5*m)D!uK0%3e?^7+iYy!JXE3UCt6by=SYbrh zzhgRrKIwKbpxyft@g=mu&{+NC8bG+jI5cvrGpWg~%CO{7$)Tpy*{7;~kR)shoNx9B zc*~57GHjv8_+4vR#BBxc6o z^EMEdSg!}JDTE4GjL{1Kl$$WKegH}9rdG9-R+khPls;(VEDCkW=zF%;kTI5>rkky_ zZF-#}ydvFp5}B|?gBx=1Ws^xzKf0SoJKBz~cKFj+Bx?aP+YGhv{}FE?FPhaGZL^rc z^4)}f0bV)|->f(4nn+w0lgFw3+j<^$YqS?vo+{`pde`R2&NpeWvvH6iHO%~ssw@g| zZ#~rmw|Ogw2(XQ2w@`g?U{X3*->cl^*_2e~`|De2LHB0yb}-5TL40P71x^{LSs4*u z`$B`7JiPE#rk9m@yjyhgBxb0;SCv*wVHK~>KU4O)&t|pK8bs>0`vv)8=x*o?IZtZ# zJK*o?T!Fl8cvW$Wud{e~^3_0G_kJqBuDaw%VRDsp*a^@Hzet+4tAPlOju?4Cf#e0h zD}LJ@Q{j*FPp`%Ee=J5$ISo2=FXf>@C7NLt(8kgs4wLvzI$zynB$ZO-{rT|p7v%X)W zrRW_QCJ#7wU7}uZL{@s2>Q#N})fP}pBk{M0=9pHiALeUdq-~j7zL&ze z9f!B%s7VCJ7)K}e_Um?)QkxnU%5}?B>vxPst{Q=Gwwr7Lh$zr*%k}U!;x>;%o(IVo zG|ALarFrEgJ$U?JAEk4pO}XJ;1;5<51vNug(uEA*-SMsPtyWD|$53GMOV4T#2hv?+ zlF=Q-FYev>y`xh-YMm~vbG3?pW>wQ23ygVDdT!`Wj)i!^bYyrG~9QJzYCWL@Zce3^V>sDlY4zi$|CfDFi z&@tmNJ=>@@&G|LVe?!%XZYEPp+YNpN=ZrRn)LXhh%W*GVyS$@Z1-L>GR(pf&2uE$c za@eg)*3M~;tFx$bq3rFq=fvoe5&Lm0R3LQRsu%X&Ho`65tHZGwjW*ZU)RP%-C+53{ zi)oMAjy9RrqN`*L--cHC3tg~$YxLx)9LgpaDO>)$hBnr;4g<~VD zwAR+Yl=D@wmCu^rjFY9!CVgn84FxU&^?}S0TJ}&6iMyBm1sEJSsB&Apoqc1LH$d#T z+;W71t17L;xA;svl(v}^qAP3$;Q>}$s~*HfqPOc|m!o!@tvi4{Y8a^j``+}s-fita zn=dq+ta)E^sU0+hk!hN$pnqV+upn?bqyn|WKF-zAS%!0h&w+7~$GIOJo`gPjbf6k)uoxzZu4&Tp+NO#yWW zDrGgwU4e@yG#*)-;w^FO5F&_=wKIAH;WG(C>_i7yMd|A+E^|aPp@VNavf5l)-q+Vv zLFzQR0ZU<;pJ8Wh#rVCbo7TFpE$Ews9ul88hj9W6^e5Ix|Gy!u2K{Jnsg7+|DaWf2 zwO47KjAYGS@EkjW-B+{{Y|`2iy^oMY0u!guPpqVRHEVx3Nwc$q!L$QZgSJS@$EyBX z=PtX&a7`*KiV#CMiv=M9;C5)TU7dZJ-4g0A$Wx!PR>5J-l7^1aIPKIHdENfXz}mfC z)r$u-0q_F^E25!I8R8I}fKITzX&*(XL2H5c=p)t=*x@tH1BYlrsz%#r{h7+TnhP{8 zf#Dcy? z4B`%nN-nWIiju-Oh&r1e1e9$ZavGGUS1$j{c|W^;=uQ`wR!P0oP*EkRK1BUD-=a=I zJR*lV#S^U2Tv!xh8hg-g8plRxff%|Fxi`mrZe)nrZPsxJTDNuWFfV4|_Q=Ve9NN?N|0ux9^OXs$+h=d8K87ce zUpvRxbFdc?YKSTHf=w%$3H7l^)+8#3qeU5&G_>P*xD3C}f(IU-YO1V%ZV46+sAMor}?Qm{`WxK&s;iO zE|Q}0El6cVGQt+7YIW2cYUHMVN7l&InLjeTqX*KtzU6YQTIG{EkKRcZQJ-Qn?SgSP zbSkzxf(9bU2ya-I)lGAABNa{9+P;-WhRQ^1|Jg1=+mpJK^3tmKj*AO%8aq%O&SZ}l zF2C$Mv3&>4;4pj=|CMd$B+lm|5 zajz{36#&}}%Yj;15=?>(Piv;E`H4uZ^;1v#&1ksh;Oc>Y)iqnY#ujU}R4`v%Dm|V% z#}KsCTavlt)rt4vcU=8|dMVyIyo> zIYJ0r^eNagXfL?d{5kNu!2z8b)s1Tx1m72UgB{ek2IZ<-|KQaL)TP-(B?cs%RP82q zX>e%7ts&Z=3t$z?RO3j)WIecMqS90823E;<6|Jc0Om*qMgo+=`n}Z;(_Em3(Hq^XYPZ*NxPFrsUDHjzwR07ltCE_I3}V=`T89zWNoKAH zm(wJf%~g03qy&^^dJQNs8aH^PHKlx0tXNp-zuJbPfH(J%1RHexpm+y=Qc7`{_)vi>k*B)q{AM)jB=_Dgiq-U;m zF2N3HY>_p`D$ByvbiHvIaJRu3&1%5U72s@0uVGse}xS0nRWhR!V9k@U{( zm}`wgEd~e`SlFBGG)@A(1R5Az)3j9DC@`Fp_p_Hom-s1V&ica(U_`l9X zx1&x|wmkR;(3~0A_@!aIVTwVbc7p0BnSdET=F)B7*3v+&S8m)!y)<%-dqHP2B8&`o zk8&#`5wN)s4~x$xj}12)DD>xbRMZKI8~mY}%>K|0QS+yUtcGK)L%omYE7s5!leWiP zeLcrqb?n1YS>V^^>A-acME%FQr!+n&b%~ja$4CEmCAD=l9;f6s)U`Jb)w51(*}^?Y zRQF#V(N49vORz#qGm~=$K6)o~do@*5Z^=h_*0Z+5@vWvPA{a9xJsHOze(j_C1j-_Y1t4{Ds~z)v&@cNlI# zt2#aMWOxFdt!=g7=@uu9(sa5s->UysVyrHTlvsbJ7lw{@hqs0`kSSBme|y{Ly-E^G zj@__Zk$0G9jAOoymUWBS4gDp}VD&U*KY5V!+seqI`jqofBF(hflTt^~X?Gf7aVgpf za9?tdXRr^&!=k3eoU$jDtAOTw$x8GzM+**!=>>+ zE$o1^p|`1zoBI+GfKs>GXsE35M>#>UL)s!o0_Bk7RIqbOKen(}@Uej2Wa`DJY3O9~>L-1ZO!A@mdoYL$Q zHH+(N>!MqK4=1q)G|pIWcYN!Y8#WU5#5bLE1zBx$0gxnWT501Z@*0IP0#`PS@qDth z$GXLz;@j|mIzQIT8`e4k4{|d0PYl~1y5J=yzJgWix35)*%mmiF2Yj}0)5^dyfex71 z-o34b(y+g2KkdX+pfE}AE-KIEe88iyufbLBEw*joZ0(n;ETQQNoNLQ(5zKL`mrl>G zjcRn=ZGkquZmI3Dm|rLR2kfy)bq5D6h4lv}x-xMRkhhkqTrRR)G35I5f2~#1Md=iPKkXrbVzu$LdGX3tkgDl;_T4Gd1aV zXFd=8>s)U2YaQ><9=*o8s1js(!%pHp6>vA`l6L@k9cH)LceU`<0iiiJke$H|%PQvOP1YVNB(*aC(ZF>>yj)9(1t(eXI!GtdlFW*}% zoDZ5=94+b%>ZDL_(nf~r=#jE{14rZzvbzr?NY6jiO^MJBxvqOy;Ux;^1T({zHI^ST zp3iH|%#K{?9qwG|_}hJSjKZ8(6q^vR-Y&NOkYF#rNtbB69%xK+X|;A`XnFI}f6QY` z3G|qGziFkBSG{wzowS5L!DKB5q8e|(!0}yE{9gvPd)qiEWBI0|YSq%cyvZf^Mdzif z4Eu$;Ig2Ucuyx2yvb+7OEAk$t^1-y*PBtP+<@W1Ty)uq|?iPd}UWO*LHa#4fs z$GAx!o9EAOn^_pWI8fX3y4!S+F+IV}R@q{vj!}2K?X}4lB-WhIuhicSDV_#L2NIqr0p7k|&y(;qv_kJnKF?WjC?+h?l-AmADahT7MkypJ4A& z?}8`8k)AyNeLi)%d8DX6uxDGh-(bZ|6ZfO?ev@#dyZvc*UGHR%H%?evHLH8tEOHUVD7u*(Z&K@1B9Wd&>-d)-MWh#*+mkafgP;LB#Q;CPzo#8Y?u!Hp&98mcw z=CYnI1v1qZwdlJ4W4SA%t5~|G&v^I9aY=9uP6!YPT-@E=-5oCO5CRvs;O_43?jGE7 z+-;8gJKwXuHEVwM>fW_?)vhvQI_-~ZpZkA2@p0w%-bO3m8H*_1mwsDqa^3WQs^?Uy z^|F#R-AGSOP4a(rthCRz53uwyw=kCYYy5V;;Nr(ApHKXW+L}iUFq}qa49gl;Z*+ZU z9dnJl`d? z$Lf8^E?(VPa-;MX{yehNQ{Gj=N!rZjzNT}9rG8jGt3J&y`1)&tTn~n96QFi(w*g( zWi8BM>y4??r^dswBbD7jdg433#wB&Wvl>nPO-r;Nem4E8DHv4X{ZYb1`u3u&#8~B%Qqd~^*8Wr{FZ)E+go^n^>qxf|Q=`Rvx7=6l9W3q4S%!;$Y~RT*r3>J< zn}soZz35S}L0!7c%xY6=FRJsc_NW?f%4eo`6Ia3dhnw&>TxD!K%*{+{UEtTFZ{ z`8@8&c>Or{u*4IlYx}{kr}2 zaDn_wjbAC_HeWt^Kz6s}@G6~Z_09g3b*;*wQsb28VHP5Zo(QfDl=olZ$9P&hRHj{j zYyX)3b?}eT+6j*4(L9i+dRB6O#+!;q%ik}_rO%R1gL!y9QaN=qDNa6%Jr6hX*K=(! zH_~SQ%KvfacieE)MZ`Y=xpHo?XQjuL8ByY1dLv~iaebIe?#F+iZP09FXEGzUDfq%u z#P(6I{?qT5`_B=>RafcQ0BVJ-S~_2BPqBGv&y~5-olHYOkd^Vls1d1+%u0=nYa&g3 z-yBcbpRmMQYL=-DDlO@SgN`N4#!@x(x^4%!&CAgR=g_}Op< z-^uPZT=?7m&wlL-%Qc@NHJN#!pwdSd9b9CsW{dK!^c^#fdXDFzLy%S|hISG4Oyopv z^Y85^jp4tq|HQSIEPH&ZR64U+F*1Ed(V0bxXi((=$q4#1c?}Ps|Dga+!)}QNCa#9d z@J4%vDXFcdWsN?2eo%?7WEINd=_87S(>V24c}+Nne~}aHLFM=KT17L9yjMR~oRfs;snlX(BK8QKhjPg7#Mo#&@WP$2 z);H8F-0=5+zNx)+upDY&4=CHDCyM-+{ziR5K*LI(q`DKsu?1+ZaLSr^8&w8-dd^#W z8KQqP3v&%893{doteg0%szi|iMI}WVXf7-Bq!`P>x1}ChSaMmR_uDQokhB8E-Ffjak?Ybnn+-8uqGHUdX%^kDeb@R9AQq^ z75?p~t!OUmc@%3-O_UzebSk>MXtVUD>MHW4oE1zZ>*4jVy4Y{@zUXQq8ky+t;_{m> z>FO4Swe8HUJieHkY9?)@Ia(xGWM0|<)ks-7I~Lp{w%}th1fPl3K*(f9w4%SZ>#Mo5 zF1zrHHq8t@tzue&mAq7)Pj{y~H7TW2x{O&*EhLU$rLkUE61^*+(Kx!tpYOV1X`=6= z{i{1*-sJfioj|bSUrJNj-t;A!Z_4q~mP{9_m4L-3bSPGcMn#R1i=&19G++2Q7BO=hF~ux4PoLvvd7N%orU3YHPq&_l=?qyVWdLXv}{>jED=cKZiYT>nRZ z+7xi)1W{2A+%09*SXvzor#d71mu(6<60^{9$bO`kz)4G@bo6UL>dkgcH}m?-`fjEY zj`e|7sa2qnw5mFsRy=Kzx|Jf#9f1T{7dwbtMaCo3MU4fuc@pf!|LdG+xoEhf7n|nU z`}!Ltn^8w3w^c;?{GCi$VT83t>@~Pw}-JSY|nGijqMDvm1LdP~mO9tiMeEVrrLqovu!m`tI zC(;p1GI@%BHDl8nYn~{-N$N5=lnj@kLvQn2=a3MC zl%_YzzNvp|#%V&zrm`GX4bI??(UoW%U5Wv$w4jLBB2)akTq7+8gWNF8^xB~eeorli zrDdJeL({fv;woG|hf9ZUVk0&ci(^yp8u(H)BQ-m^-Cx3`H}BS0&@VO4vgZU=qzb`d z=~GoeLuopw4$Jy;h2R|V4XcjfcmRKlcf~4+mdEsgT5iAPyP=1Ew-MU6`p+k2fRip) zoz#@j>{fM=>$nSW7@36+!faRuF@R`-FGF6$-vyg`23fBfn(HHmnzp*Woe2%qNs?4< z*UZ#>RY?>l#l7iaf(Dqe*0`A1K~%&KBDE5WLkm1Nt%nUybcmsd^_RD7d_EE5f{LT+ zhw7WEa*Axp4cbDrAWRsE-^FJV|KPWgor(FOEN`|AF`m>J^m&$d9zNO!Pv_(crFx3G zgUTmgAvwof1bfMs_%XZ)v6k3}???M27lsSH|Jmvrvvrt$jd_Z@XQVndlo>3)rkbUm ztLmpXDtXCF0DVX=o`dW0*~E1GFIqKKKH}#8v!6Du(BME*Y ziZzn0%m5%IJK%k>XIL2f2P=-gNcN88^H=SRaiF%9mNvF=5J6{ZFW4?oDL1LUDF-QV zsfYzoN4~=!U|sRv_-SkqIx{7SuJr8_?z*dOs2ygI*-!cpB#%&~Bw5O{s<85z;-)mn zo`vNo9qz|E;*;=u*j_Z8qN0dj?|5N+rfsVA=~vlOzHq`#juu~4Tu?n$K3DjpFW3jL zCsmbLh(E{Q;3$3#otqjIE#sf-Y-{?a&D56Eud)8-55#*CF?NmoukwoWhN7B`;G*y$ z)rHuPf5PwJ1=w@+O6o+^<JC%QXEdZ7sdRa?e9V>tJgcv+R{JsH~*CCbMu1^M=|* zw7@S4Gap55NY~VmSh3(p&p2xX1E#YH3T$z=j9fy8FmGg)R9jRTs$98Lm<}mCOv;EZ z#5H^i=0YZ8Tc7g3V)V${(m+s#*#&)m2iP-3+HuH;Bzd z1fPNpMvtY|#ySUUd+J*=46SwJ_3bRPJkiJ)>@X9M6)2~vb|^2&+e_r^L0F6$PQ>xn z_;a)?@;SLL`XKPf?Y5wXO1g%6%;Iz}jpU-|X++jj*+_L=8Iu2%^ksukL(L#k_-wp~ zpx&KQGJ%)0M`c2h5^65*3K8_*rZd z+E!E$J0INSIc6;|{Lw+fbW3f|?#N!$NI#NwRc%)1s2Sxx=@<4P%%%PkHevyB0q=zU z74?ai4o&jTv+Xke)!Pkm%K*>4$S$-tb6IvswO6fBpI5Au0xpYoQSHd8w^U^-vZVpm3x`v=#A&<@?nBF=Wa??` zbnt{{j;*_CgF$CJYHQAyjSay6V`s|ms&1*LtG6hZ$!dsi&@`ApSaAlgigiO{scZ4$ zp|9S0_MWDvdX1rhrGmR+cq1~Mej}ZyGO7dWdMYSiC9cWH!Dk|k7=drVa?xL+nTg-w zmcA>F$!64$tKVQ6OsaaWZmGVboFaS6b)c(I-H0)G0(*y+WPXvc_J#{R0GRV6-S+fii zwFa%!RLVJ2@Hx4_CYh!jsQ#v&uliTMLCi8AsO7|ZJb?AVKA;;#B@(vK3GWu0&+t@R zUwg-}&A!P$FnNXQCHbW6uX(Gfs-cyc(psSvonrt0y?bkZ)nda)s zX&dQtty=H>mCO_L7NA2SAbuTuy}X9=HY_lRO%h@M~>93?sCCw13sz*_x^#%IHPZ4q^?FNgTx$m_}rYmJQr=noJ#Z^9r5XgJz%G z6FGquW3BQzYO`jjW~2&{w-eAG32KrP38kPr$FQg<8drq6d7fBC>GKQ4+QY_tr#Ms& z`3@t}3##>+pPJ$7*NQ^PHg+{EN?j1#Ks90(ej9zB%!~ZsOWN-l25L_iW*IPhn%|N* zORg8+R-9C?(fm;FPLknO*K?gR?|h5lJyib3;`;VtBDfAT@dRpni5+RSl}vcKB((ZI7qv~RLiwCGz*D9 zn{%U2P;rGd5-8!sPHGqqC_I3^-Qxm^Km(?a^|%9ezS$5EI;}tSbqaUV*succzyKek_S+;fF9ano1sx9QB#(?Tsb1_x`fFuI89~Mx+sTgefNP zq%NLTG)<-cEDwo$F&HRAP7`*Fh**l1L5wjx*u_=NTt-)=kkeK(MVzV7Bjg|*lJ!v! zNb8rjL%m$FR+13>SVwX(!4hu#HFg{MH}N#I)&s4(^v?>@wO`s;^j^Tswsn~nOp4bz9U$J^{(DS!#k!6E9A8Mz5>HW< z)l^PvqM4y2WfArR+)IY>5qJcce;wSNc@d|i76i*fnm-XgZU+TXXO0^S=R!7TVe^EXhFUwVb zNjoGY$F0i!(m8CJP+4bTTa*$MvNqNu<&3oQZL^Oyp4EOS)EJK2T!J54K%J5-Rdr9R zlg?|tD!)n(v2xgq+<>>lN8{~q1FBEWjJERMa3H29+IfYib;m4u-d?fd#BXk*(xUm9 zRwHe;YNAZV^@5woad^7mP}PEqt10j-=0E7{VmheJ|JzP`$W+cxY{_Q>=X^Y9&L-NJy%4u^nzm?Nv z#RMHbNp`_EVkfYoSPZ$GdK1M0UZ>nVMwpKd+ANdCbt`lWxliAgWvO3jUTf~FI?K0< z_tCqkHiTH1jVLC;d?I_iR;ZUpEO6RZ*jW3^(9E$SFf^41k`h*RNpnH7N8L;@Pg0HH zsfmOITaPWn4x>eoQHgTl-`@Q;sd1XNw6>?Agq`)*Ngkp$NQ$U-YnrAt&>T=+mTqIs zAW96!-(fziFJ?g;$*R$lK8ItC>6NaBc7%S2wJiTTHjB8yy;VR#y|-$Lsusyga1-Hb zaz5S<8-|6@vB-zy(C9$_PUmA&1zr2XyV}y`Zf;p*C%T%6$z*D+rn_ddsKy zE%5RpRsw5^MpAriMR2m)YH{duwCTFtrr|DY=qnPTbL2jD*dG@)a*=4*R)Z(B_Spg;KV7c zvC!#sA@wg!645!nLyo%U3i>uWXdGex?0cU`r&3~*^1CLMHa6|G>Y?mEu0DKD9LIQ} z(?u{VvN;utssbfl8o_&;1Qe~-dVKx(1%ePaRZh`-O`DsRp}r-bEuKezA@lI2f|sZ+ z%+&(XzWBFbrsuTvw_%5Fu>P{8zb6q{hqYm+$aktsq?J$Wpe~`%iwo#lR85@1KBFhm zw&+SxxkSn|XSC|}=!%+4xF&|02q{n|+p6Ny+Nbr>j91Q))@PT1Qp6IB6|nz> zjzIP$S4Z@|e8*_>HN93h({#--Eif`w5s0Nhr6}!QT1rz{HCA?u{RZ|DQ!#)Qq94(H z2$5<@l%;VNFpa2&)j{{8{|b}; zZ>oK4bYPLIhvkYM6S8zQYp%CuY!R+yWr_ppDQRTdKk6!qI>M&tK_0;tqU+EpD1nAj zt>R~cDR*ycBZFIeTQ|TA-J8R1WIJ6=c2u=M^GDM{U0ktDoKLSIlS0;apR4OAyGuPxV^E&hfmOkB1WdXibdrp$ z;vA$G!vq5nnMmHVezdej^3Rv}oA( z%^@+@()+YohH19%{Py@Zq7i472UJ;_#p;<#t@I%40~d+Q7=o3?tSE=Vlqyy^u+CM_ z(niRETl7~g=R6-GwXrXB9hqHuR((_LSALQ`=B~q=iIJM1w+C9@-K`0Ms} zrcwIF`k5xu84Zk0K@bvq6}!}hLeA=-*d`gl=qVQ-L*?zjvl*Z0KIpoe z#yaZ-Z=||`A(BPPXX-r7RP{rJL2`#-!4G^GRv){9t-#8n|D;+)qdwlz*4$4&Rp$}B z)d}C1xS3ePndD{EH8l^_`;|aeh07FnU>`vlkK&Ke3FvRsf3z4q zRiaI>yUb6STXj@(Omj?iSKdkdl+L1R61DJCxDmHtACc99`*wRO+BzEd>oWDr&BtA5 zLw`g)VJ+!vFLG6|)HG1~ImW^E%|2P; zjleUh!l+8qY*LR_mX?v+M|hWPN8G?Oh@wPWyc%MPM}ok!-`dw$QQz5+u)Ohnk8Brm zxK!3t^-zs#{!ulSKNK&Zmr|t#xAPtEEToH>=+>k%0{H>Y?hMs;}|}l3|QV*cDZTHy*?X<8#ppspiqWzL$>a=AZg({XOF|dwqYS#CxJ7 zH&Q-Sm8*WG+N-E8Ez9PES43Bw6L4IJ*TBk%n#HCE8oG8_dKr%E8XEdqEuOcLy=XCd zo>Z^6sCuEw6gEtpZ3XKIJ*$CV!Jpzq@gWG6m>+uTX=A%-9HQT>|6@MmDjG7Tyi{-T z2l*Z45Y9}H=pzp8iFX;CJ-`IG0q6=F> z=2lcvbyilBKNjDo4^ab%BKR=;4sOR~SRz#+X7uB(6_)yje!5zQ%GQ^jO_6l;DZDB1 z%Ev16lsDz0CGVKQ;1AIPABlVLW(0-5MuPF9p&OnBw)e)UZo0mrxuolEuwrT}RZ*NJ zFRomxY^|6gT`e%C0XY>fho8aA5hw8Js4e+3Qrox2QOtZqzf?Ea*vr1mwtrCrh6Tyz|+E&E)Tvwo*B-bm- zDTm2VOFl7czzlL1UWT|z0J16Z0==5djCAKW+Vf45^=e$XrYp>*`jJyfHT4fQf*gd+Ozn*P1j?QW|iPyDU4S&?yS# zN2RT}Wprimnam^alC`L{WDJ`t%8&i_Pj|hv6gQSMv@w0P@ANrir}5E@MRHa?T5&?I zmHy^d(`|uB$hlVtgbWjItSrJME{0lp&Gv8R=Ej!BR~FVC2<}eRpkA?Kr8)8g^82zY z5(oPW-k~az7UDkHojOLg!M}@Cu|fX3&i9t>Mv?KId7-m$ph@Bk5n<{`x5<<8G4fZ^ zjhvs(1%Mh)Qd9x;mr{_sP&P@1@;nAxQ}bbCU2~>G?3)+sg>9zGNJ`89%6G{d$qeFS z%t*L`no8av&r##3A!H^7Q{Tdmz31$$&A$x2jg0lG`*0{t)RwBiWl58=8?q15x8fhn zVR)SSMXn>4QB6Tf>LdO@^dTDZ)pk~~cnuc}rOgeT!~Eg+DO}BTl+2R-kgb>Pml)Z< z5Csj%Br%8FPYt7n5{*!pkcH}aUfaH!Fk@TOJ=+#DP~OwgJ-iMJK?h_?0parCk*H=Z@Vv@q^gp_Zw)K$qinu-|b8~xT(p5tMi=oPh{YbL!W%a=Wro)mXvPs66* zC;2ax23CSi6hXWa<-}U~F_+mg-{obO)Pb&pN5!P9jJ%>eLv~VJioFIEpf9zb zdJU35N7-;78W3&mtKvLr`DwguykL3hS{fXld_nYP-ia4U4buM7&%zrk(F$-yU}q;v zM^&S|cv7T^*9eSrWm@kVmlztGdfE5!$tZ_D1P|E;k}^_8T1|40Jx>n?6{*?eCo+%f zPhBF`qYB}TUQdR-m$|et)5O{Ip8W7|k%F4VW=L4+80k5QLVS_g4QqiW)M=_EI09x< z7w|k$VHEn0IC1ND<9_2POK(?J@OdJGxJS1Zhb6bA?WG0cTo%wzL0zgib%-heS)dg; z5}lcN99-(TYRfX`8IPJ4+gtJR$a_QzJ`1;1mkyF{k?6QJ!bH{u#e`Gi!E%sGHN(ZC zTajwMZ0B=JGgH*q!CK5+C-^MU8?Q$H!}XOkl~k8JL(! z|0meNy~4KBwBML%uID(!pN+mjWMDFTS!|NLmDt3e*xhsn+(C7qHd6z@ARwcRm_6Az zvXH;*IA^(Md}_L3J?t(L8k0Ou459P6qLKnhYl&2Rlz9PrfDB4bt)uQ!KJq+%MwE<& z154avZTC$lj04R>9d7y9W{!2OvR`J)NmXkhS<}< z3-@CiYrbRLYW{0q%^!$-6tUz@x(hc{TvMVGC)f;T2~1JPsV!7}u!t&4_D3y=x#6Vu zqNBg1rD>Vzz4eUyW$;^~8twrO#=?~o{}j*SIJP}~L%_Y4pdu@&`{YLq6E%n>{Fr;3 z(6=h4ka@o23J;=lMM|rJ*`Is# zp+U*BxC5+UFL9ZYzLJCD*4!E9UwQ~ED%|*qqRCU}>Ew|}MSm@~!S>ob#yrHTbT#(l zu@cBgavFV>Z704asUz7W&fp#}`{*ZdB76=0rL_1@(E!2gHuC;-L@c|^xt2`FGH^osgHucpp0UTjS=jR*PdEUpdk^^$7O^FSDI1 zCfOjlDn82fWVLi-p|)?Z3tUa+VAqpHB5iz=T>se`SXNjj*@t-=hV~_TU>(6@<{7tA z(q5{S+!IT=o6KxFjaJh$;Xx`JFCyY%MFK&0q5Y+$v89S_ylaoYf2=pMmRv+z*t_Do z(gxBhl0{r2b~268JlrK{%4fojv`lOY)#TSYA6XOT&z9+qOWxctlWKtf0VG>ed{S~& zDv}Nq|7B6e4VS{z@Ell6Rui`UuSh+AL$}PHZ|P*YWt-*(!IkkbXl?2!U7!0R9xI%> zC$7THWJb~tVP!fACxHXRAmmVdVQ``Mi({qrq@}bCxDvj-(M6(t#8fzf1>)P1?Lx1c zb4Qt0^lSnBudp^;M;<}@C3lC7d~H{ATZW~$RpaRC1>qIR<5+u8n?blw;*}Cka*E4h zXVZo71$4mo@G4aYuP3?_?eEWU7qu%bNpsR##yunOJ9Y;-M1Fy*SuJIO1u#HVg-Rto)PvEmJcSUxw~Tk|1CT;Tb5^gx0NH{lyPBbMK$;pSVm7M{Do0SOH@o9am)XRC^zi&611b_?AJRs+Mq zOCW{CsU)TmosFLLS8)6P$F*(NFRsh}$+1i%om>cCFoU_y;z!&-_A0G`XQ}ssXX*s1 zQN8h8ks4!A?VW94E*{8`}H68K%vV=eWEYC*|~ zJj5689?JEeaO7G>oBEscZS6gLuw>!|+K?(mZ)RiMesL4-2{V~K4xECsr~rBh$+LXPZbO1a#4!`TF$w`w>UB^)d$}O5_D~DxEP9^EXzEEk_~hU)?@`A> z>i`R78|4c7#8G?dCO#cxGa1|vp=T|)Ey6S|hkno(t`v5Fn|Or|NnQ!Z`R~q#wuzRK z)_ab*eA95LWJzowRhgb4YzOAeajVfcZcoc;&Ig2DEbWez=LRf~$`0n#CdLqs+G_ zJUa=of2bk!e72B7#b)*})0aLas7_@;4a|V0hT<(n9b<{W5l_sXYi(l9b|gK8!9MX1 z$RlDQ{J~7*nu|wpE!my)aQH~5tP=bN?o)bvnvk@Ig);d8&Ii`|)=#!h?qB{s(MPFl zJV6=~12)hEs$eeFo&Z9wycE{*HC!WXo2--Vquj6kW1|~WwS_mHrC+c? zF2V)b^UPHGAZ!IQVO7DGM~LBA;6D>-k$i?uC+ETKjF{^soa@2Z zV0XyDV#41JWRZ2ScBwwmC;s>DWA+2q?Y4B+e!f9?U7`;9o=6G4f)q|oX4^8ug-!7j zWWYU8P&;ZA-bVBzb}%^Bo8!D_TVdPeSmbRQd=x`OnRo{(23xTuxVP*!W*MCYkAQig zs=%BsR3>p587nxgroLXTcJ^=9EB4XuOn;L|`D8ZAknQ0B<~bW=2eNe;HQgG}^Dp~^$zeFU0c3@9J>eBV z2yYCCX2*MlV%|ch((bisoDIC*K;_ue)Jcq>mccd5J$8q1?iYO=&VoAx-Jb~wu#cFG z%92$CSCQ#P9S3cUqrkn%zdh10xfd-U?t**tcy>DbkkQk2;jXqY2bO~wpg7qE>zFzj zJrua@Y2ch>Z|ErFzUJE$&P*IdzT=;%Z}2ixolR#6W*)sl;L9xdOyKo*vKRhQWRCp~ zzW4TYitP>TJDqR5Z-UKZk(3LIlMmrVrWf0R9m&k0y~6ugx-Pu{rh)y$M6`HP5!vml z;LdRf&f58(XHH;vRGdPwM&xzyokrQ>Y(Hi_{S)qmCFn+iXZkE;u)EmV)Su}7z$Z_h zQ*Vzs>Ue(o2SrLGeaJ~-Ab3O%WQVgqm}7J&`W!qCThlIKMx<01e4XfN%o05BC0*a` zjT}~2DIXdh9e*I2h0mr=LmM-Rt<3(*?54X5C+gGP=o)Y{6~b>KS&4CB=qv7S;wa`& zxRm^=VA)ts>I<4fjsWZFGt3A^%ygu6@Ro4f4wwy>3QU_RRMsQX&wtI$I~qCiop#Tx zz_UnNG7bHQa8qJ>CNqlpLYJZM!%6TQJOq2d2$e}*z~U)Q+!fS$Tf6StdpK&i^L*Dr zviQ@~IIJD{4fyC4Oj#z4?gy`ew}LtvfLA#611pVGOEiwu^7r=ib&hwGbFKGo3e<|y zNgKitJE?Ls$82N{(HCJ*(1O1}*rT8x6~l+3FvFu@88DfQVx>j3<9$Lec%{3cvxT#nyM*t1a9qrutcT4a zMgbSRMvtT^x+MGsE`rNo19(YQBO};PQOU%~u;1r$_jZOIb6rO7kpLb2lsJs+!8=iV zU?=(t-He_Di@?9&4zPmu;0E~|ua4eK4vSt4Ec0f$emYt>OM5Q+-h~Qd&r&}01OY%z zsDtgH2dn`tK_5^O6jBzl3-Jf7D{38gh5GsixsN-`IcK_;^Etsck@<bOMkp{owJ`P}IFVoK9_-3;H}z)v=Y@_&izQ8>^7uk>J17ee z!qG5SaDnq759h&az(5|va|H*vFxM)exT~YHZUqo zRcTrxxZ^2M3Y273Y#nJJn*rh{OGSlJtTpxC!2yIa5!uM8wxw7 z2W$XKLJ>GiLVTyFbG(13pYN3$bxm}2_O$Zt33?*u6RSlFu>qtAl!TvPZQ&k3$6-x6 zAKnLTsbBbgWO%|8PWVoFy1Ht)7P__-hs8Sg7Cu0bZ@#pok{N#(reRYFq^jHE#{MZ$8GN9>KbVH^Y!!a2GQ(p`F_Z>BoIDvLc zo`|##bn$v!eOyc35pUGrIQ%EpIMoOB;B~3{;2a!Gucc4Y$LV}}DE%JR2VKc=*xS_f z*qPuN{=WN(Yqxv5cZ}Z@B4WLhzmT=~HgXl%0ZY;MX@m*VB^WzBiH?I5IURo>dKLc@ zI_*2*F}Mb~+j&d*dxX|R>m+9*`|w}naqt9=q+ilsXs7T+=mGRnIF>3ykm$!m*T_?U z8*fE-QForl%V!6NM4rd(sk+!@qJWwKyU=mE6w`&7#Hg8FG)>n4W62uWnN&T&9o*$V zxqC

    3~`%rs-T`%p~N07}6Z$P|2<{Re(HqH5Q7$-v@8&t}HhOgY>wqiF#k;1; zqxW$;*$ec8*I`q7kAR7l&ZA>68?+$1V<%HhVvR#}ea$=>?%D34La$qf7DP8B4vYF@ zxkM|fGbjT$2pO#*ZG=teFx&@BWDMIO8Wk@aF6rOvDd7&e-gs!=>%h85oA{m7W^@(4 zio8gj1xe5qUV&$!hCT~704dcUKaQ+Uw2V{;ob~Q^&voZ}%>3=Z#qh5fo7#&k!H<(( zDh;lKuc4amA*fG7dajTPuM@pdB(*l$Avl>=cxd-vPdz>_&^cTt{w+BKU4y?Q=YuZL z4JmrIz_GJ}V&w{1zBJhgdy|UBW(Ym|=Gp7^yRQj2&Iz55R!=%bPOKW4q>93#bhf~k zo%BAT3tHF)Y$c_*RzxRUVW)q$x6u999rWb+ngnM=tnr_zJXA)c$Vs3VY(WpBzYFtE zFso=B&ZiFGbC9Qr>XD8CCI8ZWSa{xX!$a+TeLU&zJ#MR~w{KW*O++s2i!JC@q9oM;EQLFv0XhYh)WgT!K*Nh{#U@T6CHpiaEdBTj6>HXbE7qbWB5v* zsRH`teXJ@ec_*DTK- zzIotG_+zX^Dg*r&UrxTF3}88Y48OnvcpKJ&b-@~P8$KMlnb;JW9H_z<_ndRD^6cdc z{Jp}O*oS0&q%$5QP7BK4A8v&g;9-FQVLU-7;&b{CJ#P>Vc zBl<8A6#21+HPduUm;3tehpTL)mg3AhnEz~litT4llm@Opnm-jw*zj2rKF7Sb1lgOL+qtppB zg%^ zR)O6Aq4*xo6}mkgE&(EH8GZ-h6K^6b0#*62d#}5ur!Ifee=Afqb}3m5-H+2$4!8m4{}~ebmv~!yCU`!0`}m&*Z$|ediVA!17&!-sXfxf2*+D<0 zbLlyPuY*uVHN@*7H4-BuI|DQL3SPH|=1cf%gn*#>EfEj4nyd>(3mDd?2huHRr=TN! zU_bDT9E}%4DkRzny3>+h=E?C;-X^}v!C&D)0z03heaNkFKBHmhF({n@k`xEFfeK&- z*#Q48%1aQ@+rd7*2Hsts3Eq9aTESwGoOnE08|_D2qDsO#ba`4z%V`b$3bqq+OrCIR z5>h|eH);#+^2NN%z1jQ^U&r9I$k_Pr)M#uw0f7k&rpMA+dJ)}G*nqX+6YwAPgt&(0 zrWVIuhfewD@Bj!PvyqW zhvxX#^L@OJyji|-fs$cIbX4+$usaLM2|Emxeo1MhbLcAE&7|x-aF-w^GOjvL{b|GsSspaG~Y_F&=&PK)rTKOJ% z?|Xmpll|pF#iL^rD@50Y-Psc`f(E2B1p+rWz{_wDa8TvRZrEngp?E>~R-nJHJ^#ad zjo<5U5b6{)CI%xX@orQaZDMAz|FV0TH}o8M2=o%(Hv}6aN*5;aM=;l4-FKSb$`ADA z2C~C5VhvNb(fT9{+c0|eAMOtOhnY^d7u;z-QiV4{kmQPJUZ{0olJ6y-$2<7$!Y2DC zS|%w$YY}6?EqWJ=iQ8~?b}*x$M}o(K&smF9O_H%kAucf3H-OjhWB40BXFwjg8gD4l z;0-8-Uc|<@F=A9~V0STqt`3@##V|}%E)F7i@Q?2;Kb2ST>wJa&_o3>sYsuy4Q{ocn z#l+ZwVyU=47i8AaufbkYiC+;dOdwGZI^fs%>hl%&vAofT2h$?!;w?l+uubF?_*gjg zj$6Z>W_vMD;7zIqQ4?LB{2Wt+cLv`07W0+(s{B{pg1fs6ZiBmP2rj|h z-QAtRA!rB?+(U48cNr`Y-0jc#@2xs@zPb;myLNT&hrOzI^+T^-Ej^rBC}dGOxD$h< zDJ zNO7D!%P9u`EcL`We^K{dqasAozW^PFJILyV> z4bLm0c3K{s4TJ&ZG1x6hk|EKoh!Otj4-=b{n`fJ2ej1`EuW@nmM^Y4VC9HkCiuMj% zyph!toQm#I8gh0~UvyvO9^Ax+=KQG66>F!~dacmn(4I{{hWy&=_dB6}8JIV3sk6{U zEQzeGB$dSEPFIyVM5ukd^YNatQIV@10`H;2f~9B7)k@h6^HvdhI3aC>1{9ydCNLb- zHEu7!^07tG_`ocSW` z!nKs-%$h(Gub~f=n+T*`<=CPIV&}SUQdcA{#G*=Hw-F+&;!m~iI+N@U`?BW)h{fS) zb0kfJT}5i|3tP%sP#rJZLhq?wu^)>qKxiE>Zf;2rb6HP+E(9n1z>@moK>%qCQ&iglR%p&9rLW~J*4BhwAR0noSO+q zWi8#ki)X_o9A`gLV`BS5;0Z1l>3g!)#a6L!H0zA!ktsRE%zxt%;>Wx7_A|ukk}p{x z6i5{*p1aX!5#!ose@akBAPkj8Rbb|l%(;_jfOLkAbD4NyzZdGa@NV1D-uHvA`Q9#X zMuitrOoon#jlk$Am~k^{G)FU4XZrY{X+bWB&|^6hFJEYBbwvf*V6ZbuZoja~m{ z$<^89<~_c-9<5z#8u@4i%~rZjxt?$UKGGdk8~H_= zwes2glNSWt)n$c&kx;rqg1-8wdRkUE@q44lC5T>Xa&QYS0DVo%PO2W&L{40X2=0+y z*^oKz7D2#sSwvtdtEvFyYh*@P)kl``S&yf_V6OF9?nk! zVa?v*9*khcH6n#ul}$2gR}|Id0UoN6-f5vdLvJm_kmclOTfU)l^ap;^CTM4`A_Z?B#Nvnr1Zws0<*;T{#$P8sq6V-<>ygjoC}mRz`ew zh#{Z)A@X#7&k~tBEKa&>%GBd&?k;c)+S>tTV4L@G`0V$ud&gL-u^#OAKj_PQ0+o*_ z(Y1Kgq1(%uYs8+@4SsPg$dA%iW<10dT!E)q5G5GKiZWO@ zeJG$&YMd&>x^XHJka#o*plZg%Q1Pf2PNBGFS1Ok{hFe|k?6(nAdTj$CcnA4lol{se znXF>ii)P0@SCpg)&PrZFo&0Wb9b5afVsMSjHT%spfxVi`JaC`(66f-pkbGXG*$7Bo zmNwZbYKv<0LtD6}^7uYNXUZf~hFN|gl{ImV*xV6ZL!9tH*RRN^DTtRlPCoqYtZ)hl zZwLFt+#;Bmwo4|g))V`bOwX)=)8FQlmy{^;h%dw9{?fAK-ZVF*NTmODSSv+AKZS%( z&A%KaMM0qkHk#MXznZi|nv4)NE0f;z&B z#t|$WB3#-MSI8k3SUjY*WbX0Z6JAQ;93o?5#hKhm4j%C)4(6@0O_OlpACXe<>lJpW z;T4?48$9%Jef{2@pKsMRSsQ@76P#9J(6?ez#=GZ`TeNtpx@6P8?$n=k-XXh_6YKhaV!r+LN z3_+BQl&7lK;R~@16K!RBI)hOFTb<7 zLXEIf)9r-hz_=BJ->{kS><~z{_&HH+Pk`1;RmYC?fyVAfxc;B$8Qgg0^?DpN&Cl{e z15mc_c1>3M#0)Rwok+>2Y|2MqD`XNCCc>NEJSX{@lSt=1!=57GBN8HzZu=T@7UnEE zi*F>`LLGyd8{JqQa$PF+?-AyKDoVSBs&0`GJTgY z(;2Idb!RhdRT@DTJ5EjCdGYfUMmD0HSv)?Qrg1`MgKVbV* zn{xvEyi^2BCL%`LK7OxRRFfaZA6Tv1)oDdOjb|QM7kgHliQ|2)Z(4-2iXvnBmb_LW zc=`9b3wEQ3KE)%!$)WHG93VqFrJrW&a@^^$AN!da-B}5 z8h>7!54UzeuNB5){<}^7tXwu@4{oy4)|89q+Pw)RGl==Ascj&)7f%l%&)?90-bjc> zIBAL=vXIhBqCA*-`Q^n>Nt29WYdCViZGNEkgz?Vlu981_vgGlmDSMdn+mmwGQVbok zMJYYMdS&%pFFv^^H#Nc~`!F#$J@|^-SwR2T(^F>6U(c2+16Z7D-P$&(X!X5m$a?QR zinD*<3X=xfleR!CQ%HL4!|SS)d+b%L!6%^zk4KpG`a98O!qtT+uECFv@$PPQk2!gD zzFsnqpLTj?MbjZC;<+H@RE<($y=c!$lM|1Ra%SOnA~S2}C{0*Fo{5)(1QH5a_!GN} zu7bUSKYQ?N6-v_a8EGGrCaP`oMr7(HS*zRC$(K^~ku%;qJ`Dz#E|!wtpP) z(HqF~|AQRJA&*6-V4G%UqvR6DJtzN*u|{%rm*6&DNLQb2{D8sGmabrd*EMc&ut1s- zVi~73GU-g{vu>0qg4aNe@X`s(OW`T!dPW{iy>O{zkxk5?gvomC@HX{F+!uEZ)n==Z zg}fI32jU|0bCc^Ncyb8&xj+Ak1)}jSNpe`)T~08!yz0avd$=bmFI@UdW5GdlgJYJ( zI1B~_p>JQA?&s6B?c-#>tf11Wt1WqgyGu3B(9-0TQkwlK5RJlQa(k?Z&vEr8^+l82 zW)bQ*_`nP}LuhKn*U;(c<-L=$tSf@%yFz@GZxFHB(+&*o{K>X3dVKjm>92fUg&}L%dO? z!UBwZzK{%7Km3tZU<25?z}R=fQ8CnkT_wkTg?bTjF?xqJ+}%YxE|rOiqbf?n$lF}cWk{!TWy#>~ zY%5TtEJNd6yNoe*-x>?+qrf=tlbT_E!;sJ9=nu9Ph79Ag27zVaysdRzBZ(~}rv6Cv zMwidWMF$nW3tBc-w+c-i>RKkVu9syOD7Y5}Th534n9Y_f7M|I5EX|CoDrY(g2Q_z& z7n+S~1T4*IAy=9!unOI(DQQy_J$9K~`=H7iH(4Rp{-Qy@oR%>?8_^#Xx6_P!H=gFa zV`m5Hmo1Nw))?AiZ%_>1C!|cBVMmD5*Wh1}skDYGKwI+q=M!ciHsjCkoWn_%l(XbJ zx94wpyW?)n{2S|TEj2n*Q`hhNOR6-N30_iF^tLWcZDs3XtQ1?BWwKyNH5B|&36%F8 zCHEoz$Dpa^*i+|8xbp9UTO`|B7x&NMFU&dQH+VFaar4UZ=>qccG&-lW-53!_$45lm zF-EuVkb)a+UvQVAW2on{;2)`{ttY`(RzGBPiE`DdB*uB@e%1O+J}F{)AZAIw1}Fi8 zEe)5oc;*O-Eq3za@P$xxBJL zd_z=M)6&EnC_bSlI+M7^#A-)m!@&DqXz_)QG4XA8=}~nv{`rkcG=UdF< zDM1r%1Iog{5%|y*&i_l_1gmoaw-^ve7%xuHwZGN^$-{N@+q-yei# zKv3hJ{DdJkp>S>NQ`Mb8qI+}?P~C}aJK#r$?wt2gm8;z&jT@em5Za=)pE*!VXpM-d z5*w=Al7)SV*W_1T$OM&iIU!F$8yxge7*)`%ITgY$Oz`PY@w6qu>~q~;0De@#E;~+v zW9L_NKMA3b79$^-F8pZ&#~q#VZ))HP)1-lP6{t25?Ijt;W;k(L$kK7*WH2IFs`XAh zu-{!OxQh#C%di+XNbF?>_r4DnCRE_(&dnH4myp?@$>MH6c)e(K zJBk0;dgIY2P269DJ29Nu?fq8HUhN0z$@jEHYU|KZO_+)8&4HiQ(`!rmnM#%%*^Wd@P}yUN~+Dk3(JK+(Ne7r5;6UT~UbA*c_isc*Ym&Fj z3|7~9?U4m5B0E>^TRxB)W&|)Ih0I*n(#5fxWv=K9oATo{u;9K5EWwe1wFYi-pPs+5 z^6&J~>Z|VSNcUN1PW=5_59$8g%0}4k?^CK<#g?4fb70?|%HH#Dy=wjRkYDWZk*_9P zf9fiF*Pc7hs{3AdJzDcO&LjKk0(pnG|2PSMB1^olJ-8kk8akK(?gjAh+OJJI+v;7N zym~bFKCgrF)N{s8Pj5xj+MldGR~toa)EN;Ey)xYvwDeti)O1>RK8Z-;&!Sgpt0X+S z8=!lF2mW{%ICxYacyxlvuJYS6V02y*51n1t(P|xs`Yv}If~0h=g;K0C`*!Z!d&uyH zOb}H_mLLZQHmn-n3-b0EOAUc++7hUV#0k%rEbH||o_)tPtcHU(;0X`koKk~xvSwZ3 zP9l#z7ydCB<;Z*-aOGY=y)4xlXs))X;ok zD}m$IWjiCjlDveA;}t5W;a6zoevWs}cDZy9rE;G09kpGk`Zx>Rx3STZe6S25m^Tp$K>(H1F>^G3nOgh2XY9|tCv zxkY^q7P)m?yRr}weir)%)q$OTK|2rkddGUR_85DnR3oR%bk%qjlAe(DCuaYeKnQu< z`;VMF_K`~h1+yT09WPoahZ>WRpz`b$K}Gs9QBlf|PHG#|=IY|T(h_}+T{N&4@r1B% zO_;IZw{D>E6vqu-E8=dz`SudPN8O88>!{F7(Y4HCi@4X2YuC=jFw{eBAvT>PT9U*`P&~F0azmShLRIWY zgXB67QMqwgs%W@om9JG{NGPP)f_#iK0BTi;i>Z5-2WT&f@oR#*45FlUWuh6QAclTE z9wGy*eFHrM9I!@LIA8WvPqG;#;Zkc}7kzSYx(`hrarr3&mFmSl99Bw<*`L zx$0b2V>@Ns{hQx@j7tDw+ouuB`aCkJ)6*&McZgH}+{%HXyQW zk=W}ZACyNpNeK{3*(AC>sB7cW`$Mrk1!l7>jZ7Jw+rL6*EGwp!S~Jl4yF%-u$3hfP zzk;I<9|Nu^Xur z9Y29%&2tTboB%ZA7D(z%VTEY2s@2@SUR_gmK5qgJ%~|F=1@vrvFf?|3LSN}_3!9CA zQ7H`l@rb?h4eQ@;vu5IAm=Q9>PN_PWhx*a$L7x@dJmd-MTsai6t#QRkK!h&x`Dot| z!&<*0EcXW+KZbSX=Q@7HcQ;q5oy@_R?&;+{EKvUi*By5I)w|XJe7&iL737|_EW0{> zBOPtT_1w_pG&?L;PA-1`BPlfB%lUNEhYfZ_SY%%~V=h{K=yBV|dmF zMU`=VG=ZSnqfd5SL}UrSr{e1Q_Rp&@C^*<*B{8Q1bBLKZEu|*Mszko?K1^>0{(UqC z_CP749@UEjmeT{qqyfRvTgnnctER3BBlEa3xZPr|D=CpKTu8u6c}^qUfq@j;{qj-H zXyQy`o&sfgh0!i}u6knO4IPX|BJ@5hs3UZyHywlzRa&qcIsW6K3TdV>(vX~Is z%CWXMk%biEUphLhOG`U_7a(ugE_TR;DNmELnM7CG*4vm!T94_)2T}Z$j zC0W}!MoQXMm@^|WvVb4&VtY(I>^F8_9~4jmful8kZB^vwZ#(&04@Te)R{KLMm>z3p zmScJFs0z%Z2fp=*X^9)!4`tYuY?qSW0YK2aINn-qHS(258j2VOIa80agD?11x~%=4L!RCVv}qels)vzkJ5hg58wcjFZEH zodan3zce6mZ5XrbP{*w?^K($~@|K<1pjgJwgIxfW%b1d2G0gy>Gr6_UUC)&7f|5<+ z;_2$-V18en=Ek@0Q#uQs{M|;?2TLY%TaKB}9VSg1wZA)d0-VRs#}6r;Cf>dBo6A4HKRNK_lb-u({02)M z>@R2qcKU9RJV7drdNsvvQG!F-n3JAG8v$yeo*xhRw@Z+d!twk;8SY{Xz*M&A6cGe~|#oceHDL{#4FL z*>IxD!#Lk;V^c1G>JSQPtEo>mL2If;QAe{S?NC%7Ove4mX>W0nve0yxj~7SCJWLG- z6-}2N#pR|h5O*Fg|ME=SM3y7XOY4W#x*AvXypw74cGsXhhemB3*y7ikM-nmgdJ^(l zVA4VM7@H}CS!km{x4_S_$pl;JGLLowvJmLgA|#}*u(gdvt)C@@-%&bpOs9ci4NZkc ze4yOP?y5SwIhCfo3{Dx8%cpC^FuoAkD5G$iM@%r8*6~Ms-UqyW)^}^rHG0V%Z%F#o z^nq&E3?nw9Y$XCGo{MylM!JfNTd0>0j!9yHw$rstK=-72{#Wa8q}p_+e7?dDXh(Vk z!PQ(AK1~T6rDiRK9+22*b-R!tl}{4)cwUx`9Mh+PVMVU-p(C2Utg@SLP1Bs5YtU%1 z!GC1XAXJlscvELjw=I)34Zr*r5W1gFQo*6c_F+qY`Q{@U? zY<8=$a%fV-sy*f&;Y7&3$MEVHK7d^>J@i1!UHVCZ;x*nS2JiF`q z=d#^bxAh+~=1`#0^2G+CScQG;n>_{q6PEX~G%9oplX0qW2up47oXvNA7q=hGfAG%> zswX!^p=!sZ{G@4xR{?QHi+z|QZ!B%eP`3z~B&z&u#4-OFYLfqFs8*lq$I3o2r0q&| zcn|_Pbv5ojL_|S6EO+$4za7+$tRIRC;ln`j15NT(8cm=$C*LX%i`SukCKtlPX4=5z zGO);Iv8obGmF6yFL#^Iwghq{KY&khS;?kOp7JtnbL!&9N&Wp~eASRrHuaUZEvLnEj zW`*W=*}4A}E*Q2#ee7j#Le)-1G<(y?uWY~-{dZ4j>|_qZh5Y<@plbdFDZka8pY47_ zb2*}`+b*GrsO^dQfw84yGJ;z)KXbCX^`r&M7KQ7ctf!q~g;92^E<`5Sn=mRd!9=dq zr4otj;0bk>h}(H4V=$O@XSs-Y4Pe)NigCo4bM%pN4PW6`%eXg=666tjOUfO?*E!%q zZU~1-<-Ua$ibTz55YEh99%BvM2zcP%*<299RK z4IaW`(0A_SKG%1`UZ$a%k?cwiP)0e$;xLiq2#ekxKDd?ENSnd>&}Se;&UkZ%R}nrV z51OJZoP!As^4tElZBA;slxpn!BSsO=%9$Nhjp%Q1FtWHWvI5OqZgn3AbphYV#FiCL z!?tH-OqACB_ooY@C70+4m^6Go&zkX`usI}J+#dgh!l$c!>m!crmML=#VoT)2TwK^w zL4vJWRPpdE4g45^gN95HhuxE*+^(4vzVX!9Z1u7*v#_!7RtDYaE%2UT96tedxVnM% z>-^TP%VS4+K(bL(tpS!SIY+j3LK?NM0urNMv-VK5{>zEE+f8YyXtC=fu^SuF$jvzZ zu_1AmX~0nAO9I4&a>1o-_cXQS_l#!|ynhB8eGtsSH<~$$$C&Pc#pj*N#>Za-u@Y~M zW3r~kSs39_#CX)&1Wwp%Kc=cg?3-KF$V60DM3n^LHIN{Rrp8VD(#cDNu(Sc9s3dGO z8DHk*j**U$42|6!q9nxCQNHY^YjzjL#C~0jQXvlGwz3(kOjbc#Q^E`F@(_af8IBab zI-U0XJ=$y73v>@MhG(hhge z-I0Y>pL-$=mWREmRrY`_ijSKVOXzJ%wjV*>fQ zi!5>P-Xuq!)_PSZkt*}ezCD;8Oh4Px_QpITQLp2c#?py|=vEW3q^s9Yv;?r#9{yWw!yR@*f z8oI`OAODF-oDXpcX<5ZH$G^G{)c=36cb{hq5P9ZE4o@0F70v8b&b%0Cgq;r@ka z#sxIzV+Wd>@pE!<@|yBn@UnCBoA3a6%z&nrmj4&xKZTlqkC7z#zmskLImUmgB>zUd s`iuDAXeR$e{3qf1H{xS90Px??FI5G&zq1Db!2hlDPyoO|(Z9U^2j!$H)Bpeg diff --git a/test/fixtures/scratch2-corrupted.svg b/test/fixtures/scratch2-corrupted.svg deleted file mode 100644 index 478d9ced8e8..00000000000 --- a/test/fixtures/scratch2-corrupted.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/test/fixtures/sneaker.wav b/test/fixtures/sneaker.wav deleted file mode 100644 index 01c4a17597b5e747368094e61c2e8d0d3414cc2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4668 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 J{NH!re*hM6$2R}~ diff --git a/test/helpers/enzyme-setup.js b/test/helpers/enzyme-setup.js deleted file mode 100644 index 5374f679d38..00000000000 --- a/test/helpers/enzyme-setup.js +++ /dev/null @@ -1,4 +0,0 @@ -import Enzyme from 'enzyme'; -import Adapter from 'enzyme-adapter-react-16'; - -Enzyme.configure({adapter: new Adapter()}); diff --git a/test/helpers/intl-helpers.jsx b/test/helpers/intl-helpers.jsx deleted file mode 100644 index 8c9a057b4e5..00000000000 --- a/test/helpers/intl-helpers.jsx +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Helpers for using enzyme and react-test-renderer with react-intl - * Directly from https://github.com/yahoo/react-intl/wiki/Testing-with-React-Intl - */ -import React from 'react'; -import renderer from 'react-test-renderer'; -import {IntlProvider, intlShape} from 'react-intl'; -import {mount, shallow} from 'enzyme'; - -const intlProvider = new IntlProvider({locale: 'en'}, {}); -const {intl} = intlProvider.getChildContext(); - -const nodeWithIntlProp = node => React.cloneElement(node, {intl}); - -const shallowWithIntl = (node, {context} = {}) => shallow( - nodeWithIntlProp(node), - { - context: Object.assign({}, context, {intl}) - } -); - -const mountWithIntl = (node, {context, childContextTypes} = {}) => mount( - nodeWithIntlProp(node), - { - context: Object.assign({}, context, {intl}), - childContextTypes: Object.assign({}, {intl: intlShape}, childContextTypes) - } -); - -// react-test-renderer component for use with snapshot testing -const componentWithIntl = (children, props = {locale: 'en'}) => renderer.create( - {children} -); - -export { - componentWithIntl, - shallowWithIntl, - mountWithIntl -}; diff --git a/test/helpers/selenium-helper.js b/test/helpers/selenium-helper.js deleted file mode 100644 index debef3c0dd6..00000000000 --- a/test/helpers/selenium-helper.js +++ /dev/null @@ -1,378 +0,0 @@ -jest.setTimeout(30000); // eslint-disable-line no-undef - -import bindAll from 'lodash.bindall'; -import 'chromedriver'; // register path -import webdriver from 'selenium-webdriver'; - -const {Button, By, until} = webdriver; - -const USE_HEADLESS = process.env.USE_HEADLESS !== 'no'; - -// The main reason for this timeout is so that we can control the timeout message and report details; -// if we hit the Jasmine default timeout then we get a terse message that we can't control. -// The Jasmine default timeout is 30 seconds so make sure this is lower. -const DEFAULT_TIMEOUT_MILLISECONDS = 20 * 1000; - -/** - * Add more debug information to an error: - * - Merge a causal error into an outer error with valuable stack information - * - Add the causal error's message to the outer error's message. - * - Add debug information from the web driver, if available. - * The outerError compensates for the loss of context caused by `regenerator-runtime`. - * @param {Error} outerError The error to embed the cause into. - * @param {Error} cause The "inner" error to embed. - * @param {webdriver.ThenableWebDriver} [driver] Optional driver to capture debug info from. - * @returns {Promise} The outerError, with the cause embedded. - */ -const enhanceError = async (outerError, cause, driver) => { - if (cause) { - // This is the official way to nest errors in modern Node.js, but Jest ignores this field. - // It's here in case a future version uses it, or in case the caller does. - outerError.cause = cause; - } - if (cause && cause.message) { - outerError.message += `\n${['Cause:', ...cause.message.split('\n')].join('\n ')}`; - } else { - outerError.message += '\nCause: unknown'; - } - if (driver) { - const url = await driver.getCurrentUrl(); - const title = await driver.getTitle(); - const pageSource = await driver.getPageSource(); - const browserLogEntries = await driver.manage() - .logs() - .get('browser'); - const browserLogText = browserLogEntries.map(entry => entry.message).join('\n'); - outerError.message += `\nBrowser URL: ${url}`; - outerError.message += `\nBrowser title: ${title}`; - outerError.message += `\nBrowser logs:\n*****\n${browserLogText}\n*****\n`; - outerError.message += `\nBrowser page source:\n*****\n${pageSource}\n*****\n`; - } - return outerError; -}; - -class SeleniumHelper { - constructor () { - bindAll(this, [ - 'clickText', - 'clickButton', - 'clickXpath', - 'clickBlocksCategory', - 'elementIsVisible', - 'findByText', - 'textToXpath', - 'findByXpath', - 'textExists', - 'getDriver', - 'getSauceDriver', - 'getLogs', - 'loadUri', - 'rightClickText' - ]); - - this.Key = webdriver.Key; // map Key constants, for sending special keys - - // this type declaration suppresses IDE type warnings throughout this file - /** @type {webdriver.ThenableWebDriver} */ - this.driver = null; - } - - /** - * Set the browser window title. Useful for debugging. - * @param {string} title The title to set. - * @returns {Promise} A promise that resolves when the title is set. - */ - async setTitle (title) { - await this.driver.executeScript(`document.title = arguments[0];`, title); - } - - /** - * Wait for an element to be visible. - * @param {webdriver.WebElement} element The element to wait for. - * @returns {Promise} A promise that resolves when the element is visible. - */ - async elementIsVisible (element) { - const outerError = new Error('elementIsVisible failed'); - try { - await this.setTitle(`elementIsVisible ${await element.getId()}`); - await this.driver.wait(until.elementIsVisible(element), DEFAULT_TIMEOUT_MILLISECONDS); - } catch (cause) { - throw await enhanceError(outerError, cause, this.driver); - } - } - - /** - * List of useful xpath scopes for finding elements. - * @returns {object} An object mapping names to xpath strings. - */ - get scope () { - return { - blocksTab: "*[@id='react-tabs-1']", - costumesTab: "*[@id='react-tabs-3']", - modal: '*[@class="ReactModalPortal"]', - reportedValue: '*[@class="blocklyDropDownContent"]', - soundsTab: "*[@id='react-tabs-5']", - spriteTile: '*[starts-with(@class,"react-contextmenu-wrapper")]', - menuBar: '*[contains(@class,"menu-bar_menu-bar_")]', - monitors: '*[starts-with(@class,"stage_monitor-wrapper")]', - contextMenu: '*[starts-with(@class,"react-contextmenu")]' - }; - } - - /** - * Instantiate a new Selenium driver. - * @returns {webdriver.ThenableWebDriver} The new driver. - */ - getDriver () { - const chromeCapabilities = webdriver.Capabilities.chrome(); - const args = []; - if (USE_HEADLESS) { - args.push('--headless'); - } - - // Stub getUserMedia to always not allow access - args.push('--use-fake-ui-for-media-stream=deny'); - - // Suppress complaints about AudioContext starting before a user gesture - // This is especially important on Windows, where Selenium directs JS console messages to stdout - args.push('--autoplay-policy=no-user-gesture-required'); - - chromeCapabilities.set('chromeOptions', {args}); - chromeCapabilities.setLoggingPrefs({ - performance: 'ALL' - }); - this.driver = new webdriver.Builder() - .forBrowser('chrome') - .withCapabilities(chromeCapabilities) - .build(); - return this.driver; - } - - /** - * Instantiate a new Selenium driver for Sauce Labs. - * @param {string} username The Sauce Labs username. - * @param {string} accessKey The Sauce Labs access key. - * @param {object} configs The Sauce Labs configuration. - * @param {string} configs.browserName The name of the desired browser. - * @param {string} configs.platform The name of the desired platform. - * @param {string} configs.version The desired browser version. - * @returns {webdriver.ThenableWebDriver} The new driver. - */ - getSauceDriver (username, accessKey, configs) { - this.driver = new webdriver.Builder() - .withCapabilities({ - browserName: configs.browserName, - platform: configs.platform, - version: configs.version, - username: username, - accessKey: accessKey - }) - .usingServer(`http://${username}:${accessKey}@ondemand.saucelabs.com:80/wd/hub`) - .build(); - return this.driver; - } - - /** - * Find an element by xpath. - * @param {string} xpath The xpath to search for. - * @returns {Promise} A promise that resolves to the element. - */ - async findByXpath (xpath) { - const outerError = new Error(`findByXpath failed with arguments:\n\txpath: ${xpath}`); - try { - await this.setTitle(`findByXpath ${xpath}`); - const el = await this.driver.wait(until.elementLocated(By.xpath(xpath)), DEFAULT_TIMEOUT_MILLISECONDS); - // await this.driver.wait(() => el.isDisplayed(), DEFAULT_TIMEOUT_MILLISECONDS); - return el; - } catch (cause) { - throw await enhanceError(outerError, cause, this.driver); - } - } - - /** - * Generate an xpath that finds an element by its text. - * @param {string} text The text to search for. - * @param {string} [scope] An optional xpath scope to search within. - * @returns {string} The xpath. - */ - textToXpath (text, scope) { - return `//body//${scope || '*'}//*[contains(text(), '${text}')]`; - } - - /** - * Find an element by its text. - * @param {string} text The text to search for. - * @param {string} [scope] An optional xpath scope to search within. - * @returns {Promise} A promise that resolves to the element. - */ - findByText (text, scope) { - return this.findByXpath(this.textToXpath(text, scope)); - } - - /** - * Check if an element exists by its text. - * @param {string} text The text to search for. - * @param {string} [scope] An optional xpath scope to search within. - * @returns {Promise} A promise that resolves to true if the element exists. - */ - async textExists (text, scope) { - const outerError = new Error(`textExists failed with arguments:\n\ttext: ${text}\n\tscope: ${scope}`); - try { - await this.setTitle(`textExists ${text}`); - const elements = await this.driver.findElements(By.xpath(this.textToXpath(text, scope))); - return elements.length > 0; - } catch (cause) { - throw await enhanceError(outerError, cause, this.driver); - } - } - - /** - * Load a URI in the driver. - * @param {string} uri The URI to load. - * @returns {Promise} A promise that resolves when the URI is loaded. - */ - async loadUri (uri) { - const outerError = new Error(`loadUri failed with arguments:\n\turi: ${uri}`); - try { - await this.setTitle(`loadUri ${uri}`); - const WINDOW_WIDTH = 1024; - const WINDOW_HEIGHT = 768; - await this.driver - .get(`file://${uri}`); - await this.driver - .executeScript('window.onbeforeunload = undefined;'); - await this.driver.manage().window() - .setSize(WINDOW_WIDTH, WINDOW_HEIGHT); - await this.driver.wait( - async () => await this.driver.executeScript('return document.readyState;') === 'complete', - DEFAULT_TIMEOUT_MILLISECONDS - ); - } catch (cause) { - throw await enhanceError(outerError, cause, this.driver); - } - } - - /** - * Click an element by xpath. - * @param {string} xpath The xpath to click. - * @returns {Promise} A promise that resolves when the element is clicked. - */ - async clickXpath (xpath) { - const outerError = new Error(`clickXpath failed with arguments:\n\txpath: ${xpath}`); - try { - await this.setTitle(`clickXpath ${xpath}`); - const el = await this.findByXpath(xpath); - return el.click(); - } catch (cause) { - throw await enhanceError(outerError, cause, this.driver); - } - } - - /** - * Click an element by its text. - * @param {string} text The text to click. - * @param {string} [scope] An optional xpath scope to search within. - * @returns {Promise} A promise that resolves when the element is clicked. - */ - async clickText (text, scope) { - const outerError = new Error(`clickText failed with arguments:\n\ttext: ${text}\n\tscope: ${scope}`); - try { - await this.setTitle(`clickText ${text}`); - const el = await this.findByText(text, scope); - return el.click(); - } catch (cause) { - throw await enhanceError(outerError, cause, this.driver); - } - } - - /** - * Click a category in the blocks pane. - * @param {string} categoryText The text of the category to click. - * @returns {Promise} A promise that resolves when the category is clicked. - */ - async clickBlocksCategory (categoryText) { - const outerError = new Error(`clickBlocksCategory failed with arguments:\n\tcategoryText: ${categoryText}`); - // The toolbox is destroyed and recreated several times, so avoid clicking on a nonexistent element and erroring - // out. First we wait for the block pane itself to appear, then wait 100ms for the toolbox to finish refreshing, - // then finally click the toolbox text. - try { - await this.setTitle(`clickBlocksCategory ${categoryText}`); - await this.findByXpath('//div[contains(@class, "blocks_blocks")]'); - await this.driver.sleep(100); - await this.clickText(categoryText, 'div[contains(@class, "blocks_blocks")]'); - await this.driver.sleep(500); // Wait for scroll to finish - } catch (cause) { - throw await enhanceError(outerError, cause); - } - } - - /** - * Right click an element by its text. - * @param {string} text The text to right click. - * @param {string} [scope] An optional xpath scope to search within. - * @returns {Promise} A promise that resolves when the element is right clicked. - */ - async rightClickText (text, scope) { - const outerError = new Error(`rightClickText failed with arguments:\n\ttext: ${text}\n\tscope: ${scope}`); - try { - await this.setTitle(`rightClickText ${text}`); - const el = await this.findByText(text, scope); - return this.driver.actions() - .click(el, Button.RIGHT) - .perform(); - } catch (cause) { - throw await enhanceError(outerError, cause, this.driver); - } - } - - /** - * Click a button by its text. - * @param {string} text The text to click. - * @returns {Promise} A promise that resolves when the button is clicked. - */ - async clickButton (text) { - const outerError = new Error(`clickButton failed with arguments:\n\ttext: ${text}`); - try { - await this.setTitle(`clickButton ${text}`); - await this.clickXpath(`//button//*[contains(text(), '${text}')]`); - } catch (cause) { - throw await enhanceError(outerError, cause, this.driver); - } - } - - /** - * Get selected browser log entries. - * @param {Array.} [whitelist] An optional list of log strings to allow. Default: see implementation. - * @returns {Promise>} A promise that resolves to the log entries. - */ - async getLogs (whitelist) { - const outerError = new Error(`getLogs failed with arguments:\n\twhitelist: ${whitelist}`); - try { - await this.setTitle(`getLogs ${whitelist}`); - if (!whitelist) { - // Default whitelist - whitelist = [ - 'The play() request was interrupted by a call to pause()' - ]; - } - const entries = await this.driver.manage() - .logs() - .get('browser'); - return entries.filter(entry => { - const message = entry.message; - for (const element of whitelist) { - if (message.indexOf(element) !== -1) { - return false; - } else if (entry.level !== 'SEVERE') { // WARNING: this doesn't do what it looks like it does! - return false; - } - } - return true; - }); - } catch (cause) { - throw await enhanceError(outerError, cause); - } - } -} - -export default SeleniumHelper; diff --git a/test/integration/backdrops.test.js b/test/integration/backdrops.test.js deleted file mode 100644 index 95a268b76c3..00000000000 --- a/test/integration/backdrops.test.js +++ /dev/null @@ -1,117 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - clickXpath, - findByText, - findByXpath, - getDriver, - getLogs, - loadUri, - scope -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -describe('Working with backdrops', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('Adding a backdrop from the library should not switch to stage', async () => { - await loadUri(uri); - - // Start on the sounds tab of sprite1 to test switching behavior - await clickText('Sounds'); - - // Add a backdrop without selecting the stage first to test switching - await clickXpath('//button[@aria-label="Choose a Backdrop"]'); - const el = await findByXpath("//input[@placeholder='Search']"); - await el.sendKeys('blue'); - await clickText('Blue Sky'); // Adds the backdrop - - // Make sure the sprite is still selected, and that the tab has not changed - await clickText('Meow', scope.soundsTab); - - // Make sure the backdrop was actually added by going to the backdrops tab - await clickXpath('//span[text()="Stage"]'); - await clickText('Backdrops'); - await clickText('Blue Sky', scope.costumesTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding backdrop via paint should switch to stage', async () => { - await loadUri(uri); - - const buttonXpath = '//button[@aria-label="Choose a Backdrop"]'; - const paintXpath = `${buttonXpath}/following-sibling::div//button[@aria-label="Paint"]`; - - const el = await findByXpath(buttonXpath); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - await clickXpath(paintXpath); - - // Stage should become selected and costume tab activated - await findByText('backdrop2', scope.costumesTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding backdrop via surprise should not switch to stage', async () => { - await loadUri(uri); - - // Start on the sounds tab of sprite1 to test switching behavior - await clickText('Sounds'); - - const buttonXpath = '//button[@aria-label="Choose a Backdrop"]'; - const surpriseXpath = `${buttonXpath}/following-sibling::div//button[@aria-label="Surprise"]`; - - const el = await findByXpath(buttonXpath); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - await clickXpath(surpriseXpath); - - // Make sure the sprite is still selected, and that the tab has not changed - await clickText('Meow', scope.soundsTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding multiple backdrops from file should switch to stage', async () => { - const files = [ - path.resolve(__dirname, '../fixtures/gh-3582-png.png'), - path.resolve(__dirname, '../fixtures/100-100.svg') - ]; - await loadUri(uri); - - const buttonXpath = '//button[@aria-label="Choose a Backdrop"]'; - const fileXpath = `${buttonXpath}/following-sibling::div//input[@type="file"]`; - - const el = await findByXpath(buttonXpath); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath(fileXpath); - await input.sendKeys(files.join('\n')); - - // Should have been switched to stage/costume tab already - await findByText('gh-3582-png', scope.costumesTab); - await findByText('100-100', scope.costumesTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); -}); diff --git a/test/integration/backpack.test.js b/test/integration/backpack.test.js deleted file mode 100644 index ce3125959bb..00000000000 --- a/test/integration/backpack.test.js +++ /dev/null @@ -1,44 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - getDriver, - getLogs, - loadUri -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -describe('Working with the how-to library', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('Backpack is "Coming Soon" without backpack host param', async () => { - await loadUri(uri); - // Check that the backpack header is visible and wrapped in a coming soon tooltip - await clickText('Backpack', '*[@data-for="backpack-tooltip"]'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Backpack can be expanded with backpack host param', async () => { - await loadUri(`${uri}?backpack_host=https://backpack.scratch.mit.edu`); - - // Try activating the backpack from the costumes tab to make sure it isn't pushed off - await clickText('Costumes'); - - // Check that the backpack header is visible and wrapped in a coming soon tooltip - await clickText('Backpack'); // Not wrapped in tooltip - await clickText('Backpack is empty'); // Make sure it can expand, is empty - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); -}); diff --git a/test/integration/blocks.test.js b/test/integration/blocks.test.js deleted file mode 100644 index 25211007885..00000000000 --- a/test/integration/blocks.test.js +++ /dev/null @@ -1,339 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - clickBlocksCategory, - clickButton, - clickXpath, - findByText, - findByXpath, - textExists, - getDriver, - getLogs, - Key, - loadUri, - rightClickText, - scope -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -const SETTINGS_MENU_XPATH = '//div[contains(@class, "menu-bar_menu-bar-item")]' + - '[*[contains(@class, "settings-menu_dropdown-label")]//*[text()="Settings"]]'; - -describe('Working with the blocks', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('Blocks report when clicked in the toolbox', async () => { - await loadUri(uri); - await clickText('Code'); - await clickBlocksCategory('Operators'); - await clickText('join', scope.blocksTab); // Click "join " block - await findByText('apple banana', scope.reportedValue); // Tooltip with result - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Switching sprites updates the block menus', async () => { - await loadUri(uri); - await clickBlocksCategory('Sound'); - // "Meow" sound block should be visible - await findByText('Meow', scope.blocksTab); - await clickText('Backdrops'); // Switch to the backdrop - // Now "pop" sound block should be visible and motion blocks hidden - await findByText('pop', scope.blocksTab); - await clickBlocksCategory('Motion'); - await findByText('Stage selected: no motion blocks'); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Creating variables', async () => { - await loadUri(uri); - await clickText('Code'); - await clickBlocksCategory('Variables'); - - // Expect a default variable "my variable" to be visible - await clickText('my\u00A0variable', scope.blocksTab); - await findByText('0', scope.reportedValue); - - await clickText('Make a Variable'); - let el = await findByXpath("//input[@name='New variable name:']"); - await el.sendKeys('score'); - await clickButton('OK'); - await clickText('Make a Variable'); - el = await findByXpath("//input[@name='New variable name:']"); - await el.sendKeys('second variable'); - await clickButton('OK'); - - // Make sure reporting works on a new variable - await clickBlocksCategory('Variables'); - await clickText('score', scope.blocksTab); - await findByText('0', scope.reportedValue); // Tooltip with result - - // And there should be a monitor visible - await rightClickText('score', scope.monitors); - await clickText('slider'); - await findByXpath("//input[@step='1']"); - - // Changing the slider to a decimal should make it have a step size of 0.01 - await rightClickText('score', scope.monitors); - await clickText('change slider range'); - el = await findByXpath("//input[@name='Maximum value']"); - await el.sendKeys('.1'); - await clickButton('OK'); - await findByXpath("//input[@step='0.01'][@max='100.1']"); - - // Hiding the monitor via context menu should work - await rightClickText('score', scope.monitors); - await clickText('hide', scope.contextMenu); - await driver.sleep(100); - const monitorExists = await textExists('score', scope.monitors); - await expect(monitorExists).toBeFalsy(); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Creating a list', async () => { - await loadUri(uri); - await clickText('Code'); - await clickBlocksCategory('Variables'); - - await clickText('Make a List'); - let el = await findByXpath("//input[@name='New list name:']"); - await el.sendKeys('list1'); - await clickButton('OK'); - - // Click the "add to list" block 3 times - await clickText('add', scope.blocksTab); - await clickText('add', scope.blocksTab); - await clickText('add', scope.blocksTab); - await clickText('list1', scope.blocksTab); - await findByText('thing thing thing', scope.reportedValue); // Tooltip with result - - // Interact with the monitor, adding an item - await findByText('list1', scope.monitors); // Just to be sure it is there - await clickText('+', scope.monitors); - el = await findByXpath(`//body//${scope.monitors}//input`); - await el.sendKeys('thing2'); - await el.click(); // Regression for "clicking active input erases value" bug. - await clickText('list1', scope.monitors); // Blur the input to submit - - // Check that the list value has been propagated. - await clickText('list1', scope.blocksTab); - await findByText('thing thing thing thing2', scope.reportedValue); // Tooltip with result - - // Hiding the monitor via context menu should work - await rightClickText('list1', scope.monitors); - await clickText('hide', scope.contextMenu); - await driver.sleep(100); - const monitorExists = await textExists('list1', scope.monitors); - await expect(monitorExists).toBeFalsy(); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Custom procedures', async () => { - await loadUri(uri); - await clickBlocksCategory('My Blocks'); - await clickText('Make a Block'); - // Click on the "add an input" buttons - await clickText('number or text', scope.modal); - await clickText('boolean', scope.modal); - await clickText('Add a label', scope.modal); - await clickText('OK', scope.modal); - - // Make sure a "define" block has been added to the workspace - await findByText('define', scope.blocksTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding an extension', async () => { - await loadUri(uri); - await clickXpath('//button[@title="Add Extension"]'); - - await clickText('Pen'); - await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for scroll animation - // Make sure toolbox has been scrolled to the pen extension - await findByText('stamp', scope.blocksTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Record option from sound block menu opens sound recorder', async () => { - await loadUri(uri); - await clickText('Code'); - await clickBlocksCategory('Sound'); - await clickText('Meow', scope.blocksTab); // Click "play sound until done" block - await clickText('record'); // Click "record..." option in the block's sound menu - // Access has been force denied, so close the alert that comes up - await driver.sleep(1000); // getUserMedia requests are very slow to fail for some reason - await driver.switchTo().alert() - .accept(); - await findByText('Record Sound'); // Sound recorder is open - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Renaming costume changes the default costume name in the toolbox', async () => { - await loadUri(uri); - - // Rename the costume - await clickText('Costumes'); - await clickText('costume2', scope.costumesTab); - const el = await findByXpath("//input[@value='costume2']"); - await el.sendKeys('newname'); - await el.sendKeys(Key.ENTER); - // wait until the updated costume appears in costume item list panel - await findByXpath("//div[contains(@class,'sprite-selector-item_is-selected_')]" + - "//div[contains(text(), 'newname')]"); - - // Make sure it is updated in the block menu - await clickText('Code'); - await clickBlocksCategory('Looks'); - await clickText('newname', scope.blocksTab); - }); - - test('Renaming costume with a special character should not break toolbox', async () => { - await loadUri(uri); - - // Rename the costume - await clickText('Costumes'); - await clickText('costume2', scope.costumesTab); - const el = await findByXpath("//input[@value='costume2']"); - await el.sendKeys(''); - await el.sendKeys(Key.ENTER); - // wait until the updated costume appears in costume item list panel - await findByXpath("//div[contains(@class,'sprite-selector-item_is-selected_')]" + - "//div[contains(text(), '')]"); - - // Make sure it is updated in the block menu - await clickText('Code'); - await clickBlocksCategory('Looks'); - await clickText('', scope.blocksTab); - - await clickBlocksCategory('Sound'); - }); - - test('Adding costumes DOES update the default costume name in the toolbox', async () => { - await loadUri(uri); - - // By default, costume2 is in the costume tab - await clickBlocksCategory('Looks'); - await clickText('costume2', scope.blocksTab); - - // Also check that adding a new costume does update the list - await clickText('Costumes'); - const el = await findByXpath('//button[@aria-label="Choose a Costume"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - await clickXpath('//button[@aria-label="Paint"]'); - // wait until the new costume appears in costume item list panel - await findByXpath("//div[contains(@class,'sprite-selector-item_is-selected_')]" + - "//div[contains(text(), 'costume3')]"); - await clickText('costume3', scope.costumesTab); - // Check that the menu has been updated - await clickText('Code'); - await clickText('costume3', scope.blocksTab); - }); - - // Skipped because it was flakey on travis, but seems to run locally ok - test('Adding a sound DOES update the default sound name in the toolbox', async () => { - await loadUri(uri); - await clickText('Sounds'); - await clickXpath('//button[@aria-label="Choose a Sound"]'); - await clickText('A Bass', scope.modal); // Should close the modal - // wait until the selected sound appears in sounds item list panel - await findByXpath("//div[contains(@class,'sprite-selector-item_is-selected_')]" + - "//div[contains(text(), 'A Bass')]"); - await clickText('Code'); - await clickBlocksCategory('Sound'); - await clickText('A\u00A0Bass', scope.blocksTab); // Need   for block text - }); - - // Regression test for switching between editor/player causing toolbox to stop updating - test('"See inside" after being on project page re-initializing variables', async () => { - const playerUri = path.resolve(__dirname, '../../build/player.html'); - await loadUri(playerUri); - await clickText('See inside'); - await clickBlocksCategory('Variables'); - await clickText('my\u00A0variable'); - - await clickText('See Project Page'); - await clickText('See inside'); - - await clickBlocksCategory('Variables'); - await clickText('my\u00A0variable'); - }); - - // Regression test for switching editor tabs causing toolbox to stop updating - test('Creating variables after adding extensions updates the toolbox', async () => { - await loadUri(uri); - await clickText('Costumes'); - await clickText('Code'); - await clickBlocksCategory('Variables'); - await clickText('Make a List'); - const el = await findByXpath("//input[@name='New list name:']"); - await el.sendKeys('list1'); - await clickButton('OK'); - await clickText('list1', scope.blocksTab); - }); - - test('Use variable blocks after switching languages', async () => { - const myVariable = 'my\u00A0variable'; - const changeVariableByScope = "*[@data-id='data_changevariableby']"; - - await loadUri(uri); - - await clickText('Code'); - await clickBlocksCategory('Variables'); - - // change "my variable" by 1 - await clickText('change', changeVariableByScope); - - // check reported value 1 - await clickText(myVariable, scope.blocksTab); - await findByText('1', scope.reportedValue); - - // change language - await clickXpath(SETTINGS_MENU_XPATH); - await clickText('Language', scope.menuBar); - await clickText('Deutsch'); - - await clickText('Skripte'); - await clickBlocksCategory('Variablen'); - - // make sure "my variable" is still 1 - await clickText(myVariable); - await findByText('1', scope.reportedValue); - - // change step from 1 to 10 - await clickText('1', changeVariableByScope); - await driver.actions() - .sendKeys('10') - .perform(); - - // change "my variable" by 10 - await clickText('ändere', changeVariableByScope); - - // check it is turned up to 11 - await clickText(myVariable); - await findByText('11', scope.reportedValue); - }); -}); diff --git a/test/integration/connection-modal.test.js b/test/integration/connection-modal.test.js deleted file mode 100644 index 48bff5004d5..00000000000 --- a/test/integration/connection-modal.test.js +++ /dev/null @@ -1,67 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - clickXpath, - findByText, - getDriver, - getLogs, - loadUri -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -// The tests below require Scratch Link to be unavailable, so we can trigger -// an error modal. To make sure this is always true, we came up with the idea of -// injecting javascript that overwrites the global Websocket object with one that -// attempts to connect to a fake socket address. -const websocketFakeoutJs = `var RealWebSocket = WebSocket; - WebSocket = function () { - return new RealWebSocket("wss://fake.fake"); - }`; - -describe('Hardware extension connection modal', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('Message saying Scratch Link is unavailable (BLE)', async () => { - await driver.quit(); - driver = getDriver(); - - await loadUri(uri); - - await driver.executeScript(websocketFakeoutJs); - - await clickXpath('//button[@title="Add Extension"]'); - - await clickText('micro:bit'); - await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for modal to open - findByText('Scratch Link'); // Scratch Link is mentioned in the error modal - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Message saying Scratch Link is unavailable (BT)', async () => { - await loadUri(uri); - - await driver.executeScript(websocketFakeoutJs); - - await clickXpath('//button[@title="Add Extension"]'); - - await clickText('EV3'); - await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for modal to open - findByText('Scratch Link'); // Scratch Link is mentioned in the error modal - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); -}); diff --git a/test/integration/costumes.test.js b/test/integration/costumes.test.js deleted file mode 100644 index 3dcd4485456..00000000000 --- a/test/integration/costumes.test.js +++ /dev/null @@ -1,262 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - clickXpath, - findByText, - findByXpath, - getDriver, - getLogs, - loadUri, - rightClickText, - scope -} = new SeleniumHelper(); - -// The costumes library is slow to load. Increase the timeout for these tests. -jest.setTimeout(60_000); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -describe('Working with costumes', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('Adding a costume through the library', async () => { - await loadUri(uri); - await driver.sleep(500); - await clickText('Costumes'); - await clickXpath('//button[@aria-label="Choose a Costume"]'); - const el = await findByXpath("//input[@placeholder='Search']"); - await el.sendKeys('abb'); - await clickText('Abby-a'); // Should close the modal, then click the costumes in the selector - await findByXpath("//input[@value='Abby-a']"); // Should show editor for new costume - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding a costume by surprise button', async () => { - await loadUri(uri); - await clickText('Costumes'); - const el = await findByXpath('//button[@aria-label="Choose a Costume"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - await clickXpath('//button[@aria-label="Surprise"]'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding a costume by paint button', async () => { - await loadUri(uri); - await clickText('Costumes'); - const el = await findByXpath('//button[@aria-label="Choose a Costume"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - await clickXpath('//button[@aria-label="Paint"]'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Duplicating a costume', async () => { - await loadUri(uri); - await clickText('Costumes'); - - await rightClickText('costume1', scope.costumesTab); - await clickText('duplicate', scope.costumesTab); - await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for duplication to finish - - // Make sure the duplicated costume is named correctly. - await clickText('costume3', scope.costumesTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Converting bitmap/vector in paint editor', async () => { - await loadUri(uri); - await clickText('Costumes'); - - // Convert the first costume to bitmap. - await clickText('costume1', scope.costumesTab); - await clickText('Convert to Bitmap', scope.costumesTab); - - // Make sure mode switches back to vector for vector costume. - await clickText('costume2', scope.costumesTab); - await clickText('Convert to Bitmap', scope.costumesTab); - - // Make sure bitmap is saved by switching back and converting to vector. - await clickText('Sounds'); - await clickText('Costumes'); - await clickText('Convert to Vector', scope.costumesTab); // costume2 - await clickText('costume1', scope.costumesTab); - await clickText('Convert to Vector', scope.costumesTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Undo/redo in the paint editor', async () => { - await loadUri(uri); - await clickText('Costumes'); - await clickText('costume1', scope.costumesTab); - await clickText('Convert to Bitmap', scope.costumesTab); - await clickXpath('//img[@alt="Undo"]'); - await clickText('Convert to Bitmap', scope.costumesTab); - await clickXpath('//img[@alt="Undo"]'); - await clickXpath('//img[@alt="Redo"]'); - await clickText('Convert to Vector', scope.costumesTab); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding an svg from file', async () => { - await loadUri(uri); - await clickText('Costumes'); - const el = await findByXpath('//button[@aria-label="Choose a Costume"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/100-100.svg')); - await clickText('100-100', scope.costumesTab); // Name from filename - await clickText('100 x 100', scope.costumesTab); // Size is right - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding a png from file (gh-3582)', async () => { - await loadUri(uri); - await clickText('Costumes'); - const el = await findByXpath('//button[@aria-label="Choose a Costume"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/gh-3582-png.png')); - await clickText('gh-3582-png', scope.costumesTab); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding a bmp from file', async () => { - await loadUri(uri); - await clickText('Costumes'); - const el = await findByXpath('//button[@aria-label="Choose a Costume"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/bmpfile.bmp')); - await clickText('bmpfile', scope.costumesTab); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding several costumes with a gif', async () => { - await loadUri(uri); - await clickText('Costumes'); - const el = await findByXpath('//button[@aria-label="Choose a Costume"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/paddleball.gif')); - - await findByText('paddleball', scope.costumesTab); - await findByText('paddleball2', scope.costumesTab); - await findByText('paddleball3', scope.costumesTab); - await findByText('paddleball4', scope.costumesTab); - await findByText('paddleball5', scope.costumesTab); - await findByText('paddleball6', scope.costumesTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding a letter costume through the Letters filter in the library', async () => { - await loadUri(uri); - await driver.manage() - .window() - .setSize(1244, 768); // Letters filter not visible at 1024 width - await clickText('Costumes'); - await clickXpath('//button[@aria-label="Choose a Costume"]'); - await clickText('Letters'); - await clickText('Block-a', scope.modal); // Closes modal - await rightClickText('Block-a', scope.costumesTab); // Make sure it is there - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Costumes animate on mouseover', async () => { - await loadUri(uri); - await clickXpath('//button[@aria-label="Choose a Sprite"]'); - const searchElement = await findByXpath("//input[@placeholder='Search']"); - await searchElement.sendKeys('abb'); - const abbyElement = await findByXpath('//*[span[text()="Abby"]]'); - driver.actions() - .mouseMove(abbyElement) - .perform(); - // wait for one of Abby's alternate costumes to appear - await findByXpath('//img[@src="https://cdn.assets.scratch.mit.edu/internalapi/asset/45de34b47a2ce22f6f5d28bb35a44ff5.svg/get/"]'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding multiple costumes at the same time', async () => { - const files = [ - path.resolve(__dirname, '../fixtures/gh-3582-png.png'), - path.resolve(__dirname, '../fixtures/100-100.svg') - ]; - await loadUri(uri); - await clickText('Costumes'); - const el = await findByXpath('//button[@aria-label="Choose a Costume"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(files.join('\n')); - - await findByText('gh-3582-png', scope.costumesTab); - await findByText('100-100', scope.costumesTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Load an invalid svg from scratch3 as costume', async () => { // eslint-disable-line no-disabled-tests - await loadUri(uri); - await clickText('Costumes'); - const el = await findByXpath('//button[@aria-label="Choose a Costume"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/corrupt-from-scratch3.svg')); - const costumeTile = await findByText('corrupt-from-scratch3', scope.costumesTab); // Name from filename - const tileVisible = await costumeTile.isDisplayed(); - await expect(tileVisible).toBe(true); - }); - - test('Load an invalid svg from scratch2 as costume', async () => { // eslint-disable-line no-disabled-tests - await loadUri(uri); - await clickText('Costumes'); - const el = await findByXpath('//button[@aria-label="Choose a Costume"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/scratch2-corrupted.svg')); - const costumeTile = await findByText('scratch2-corrupted', scope.costumesTab); // Name from filename - const tileVisible = await costumeTile.isDisplayed(); - await expect(tileVisible).toBe(true); - }); -}); diff --git a/test/integration/examples.test.js b/test/integration/examples.test.js deleted file mode 100644 index a268455ca88..00000000000 --- a/test/integration/examples.test.js +++ /dev/null @@ -1,100 +0,0 @@ -/* globals Promise */ - -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickButton, - clickText, - clickXpath, - findByXpath, - getDriver, - getLogs, - loadUri -} = new SeleniumHelper(); - -let driver; - -describe('player example', () => { - const uri = path.resolve(__dirname, '../../build/player.html'); - - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test.skip('Player: load a project by ID', async () => { - const projectId = '96708228'; - await loadUri(`${uri}#${projectId}`); - await clickXpath('//img[@title="Go"]'); - await new Promise(resolve => setTimeout(resolve, 2000)); - await clickXpath('//img[@title="Stop"]'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - const projectRequests = await driver.manage().logs() - .get('performance') - .then(pLogs => pLogs.map(log => JSON.parse(log.message).message) - .filter(m => m.method === 'Network.requestWillBeSent') - .map(m => m.params.request.url) - .filter(url => url === 'https://projects.scratch.mit.edu/96708228') - ); - await expect(projectRequests).toEqual(['https://projects.scratch.mit.edu/96708228']); - }); -}); - -describe('blocks example', () => { - const uri = path.resolve(__dirname, '../../build/blocks-only.html'); - - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test.skip('Blocks: load a project by ID', async () => { - const projectId = '96708228'; - await loadUri(`${uri}#${projectId}`); - await new Promise(resolve => setTimeout(resolve, 2000)); - await clickXpath('//img[@title="Go"]'); - await new Promise(resolve => setTimeout(resolve, 2000)); - await clickXpath('//img[@title="Stop"]'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - const projectRequests = await driver.manage().logs() - .get('performance') - .then(pLogs => pLogs.map(log => JSON.parse(log.message).message) - .filter(m => m.method === 'Network.requestWillBeSent') - .map(m => m.params.request.url) - .filter(url => url === 'https://projects.scratch.mit.edu/96708228') - ); - await expect(projectRequests).toEqual(['https://projects.scratch.mit.edu/96708228']); - }); - - // skipping per https://github.com/LLK/scratch-gui/issues/4902 until we have better approach - test.skip('Change categories', async () => { - await loadUri(`${uri}`); - await clickText('Looks'); - await clickText('Sound'); - await clickText('Events'); - await clickText('Control'); - await clickText('Sensing'); - await clickText('Operators'); - await clickText('Variables'); - await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for scroll animation - await clickText('Make a Variable'); - let el = await findByXpath("//input[@name='New variable name:']"); - await el.sendKeys('score'); - await clickButton('OK'); - await clickText('Make a Variable'); - el = await findByXpath("//input[@name='New variable name:']"); - await el.sendKeys('second variable'); - await clickButton('OK'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); -}); diff --git a/test/integration/how-tos.test.js b/test/integration/how-tos.test.js deleted file mode 100644 index 577031f37d6..00000000000 --- a/test/integration/how-tos.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - clickXpath, - findByXpath, - getDriver, - getLogs, - loadUri -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -describe('Working with the how-to library', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('Choosing a how-to', async () => { - await loadUri(uri); - await clickText('Costumes'); - await clickXpath('//*[@aria-label="Tutorials"]'); - await clickText('Getting Started'); // Modal should close - // Make sure YouTube video on first card appears - await findByXpath('//div[contains(@class, "step-video")]'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - // @todo navigating cards, etc. -}); diff --git a/test/integration/localization.test.js b/test/integration/localization.test.js deleted file mode 100644 index 00cae10ba49..00000000000 --- a/test/integration/localization.test.js +++ /dev/null @@ -1,109 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - clickXpath, - findByText, - findByXpath, - getDriver, - getLogs, - loadUri, - rightClickText, - scope -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -const FILE_MENU_XPATH = '//div[contains(@class, "menu-bar_menu-bar-item")]' + - '[*[contains(@class, "menu-bar_collapsible-label")]//*[text()="File"]]'; -const SETTINGS_MENU_XPATH = '//div[contains(@class, "menu-bar_menu-bar-item")]' + - '[*[contains(@class, "settings-menu_dropdown-label")]//*[text()="Settings"]]'; - -describe('Localization', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('Switching languages', async () => { - await loadUri(uri); - - // Add a sprite to make sure it stays when switching languages - await clickXpath('//button[@aria-label="Choose a Sprite"]'); - await clickText('Apple', scope.modal); // Closes modal - - await clickXpath(SETTINGS_MENU_XPATH); - await clickText('Language', scope.menuBar); - await clickText('Deutsch'); - await new Promise(resolve => setTimeout(resolve, 1000)); // wait for blocks refresh - - // Make sure the blocks are translating - await clickText('Fühlen'); // Sensing category in German - await new Promise(resolve => setTimeout(resolve, 1000)); // wait for blocks to scroll - await clickText('Antwort'); // Find the "answer" block in German - - // Change to the costumes tab to confirm other parts of the GUI are translating - await clickText('Kostüme'); - - // After switching languages, make sure Apple sprite still exists - await rightClickText('Apple', scope.spriteTile); // Make sure it is there - - // Remounting re-attaches the beforeunload callback. Make sure to remove it - driver.executeScript('window.onbeforeunload = undefined;'); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - // Regression test for #4476, blocks in wrong language when loaded with locale - test('Loading with locale shows correct blocks', async () => { - await loadUri(`${uri}?locale=de`); - await clickText('Fühlen'); // Sensing category in German - await new Promise(resolve => setTimeout(resolve, 1000)); // wait for blocks to scroll - await clickText('Antwort'); // Find the "answer" block in German - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - // test for #5445 - test('Loading with locale shows correct translation for string length block parameter', async () => { - await loadUri(`${uri}?locale=ja`); - await clickText('演算'); // Operators category in Japanese - await new Promise(resolve => setTimeout(resolve, 1000)); // wait for blocks to scroll - await clickText('の長さ', scope.blocksTab); // Click "length " block - await findByText('3', scope.reportedValue); // Tooltip with result - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - // Regression test for ENA-142, monitor can lag behind language selection - test('Monitor labels update on locale change', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await clickText('Load from your computer'); - const input = await findByXpath('//input[@accept=".sb,.sb2,.sb3"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/monitor-variable.sb3')); - - // Monitors are present - await findByText('username', scope.monitors); - await findByText('language', scope.monitors); - - // Change locale to ja - await clickXpath(SETTINGS_MENU_XPATH); - await clickText('Language', scope.menuBar); - await clickText('日本語'); - - // Monitor labels updated - await findByText('ユーザー名', scope.monitors); - await findByText('言語', scope.monitors); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); -}); diff --git a/test/integration/menu-bar.test.js b/test/integration/menu-bar.test.js deleted file mode 100644 index 45d6ec4e7c9..00000000000 --- a/test/integration/menu-bar.test.js +++ /dev/null @@ -1,172 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - clickXpath, - findByText, - findByXpath, - getDriver, - loadUri, - rightClickText, - scope -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -const FILE_MENU_XPATH = '//div[contains(@class, "menu-bar_menu-bar-item")]' + - '[*[contains(@class, "menu-bar_collapsible-label")]//*[text()="File"]]'; -const SETTINGS_MENU_XPATH = '//div[contains(@class, "menu-bar_menu-bar-item")]' + - '[*[contains(@class, "settings-menu_dropdown-label")]//*[text()="Settings"]]'; - -describe('Menu bar settings', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('File->New should be enabled', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await findByXpath('//*[li[span[text()="New"]] and not(@data-tip="tooltip")]'); - }); - - test('File->Load should be enabled', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await findByXpath('//*[li[text()="Load from your computer"] and not(@data-tip="tooltip")]'); - }); - - test('File->Save should be enabled', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await findByXpath('//*[li[span[text()="Save to your computer"]] and not(@data-tip="tooltip")]'); - }); - - test('Share button should NOT be enabled', async () => { - await loadUri(uri); - await findByXpath('//div[span[div[span[text()="Share"]]] and @data-tip="tooltip"]'); - }); - - test('Logo should be clickable', async () => { - await loadUri(uri); - await clickXpath('//img[@alt="Scratch"]'); - const currentUrl = await driver.getCurrentUrl(); - await expect(currentUrl).toEqual('https://scratch.mit.edu/'); - }); - - test('(GH#4064) Project name should be editable', async () => { - await loadUri(uri); - const el = await findByXpath('//input[@value="Scratch Project"]'); - await el.sendKeys(' - Personalized'); - await clickText('Costumes'); // just to blur the input - await clickXpath('//input[@value="Scratch Project - Personalized"]'); - }); - - test('User is not warned before uploading project file over a fresh project', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await clickText('Load from your computer'); - const input = await findByXpath('//input[@accept=".sb,.sb2,.sb3"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/project1.sb3')); - // No replace alert since no changes were made - await findByText('project1-sprite'); - }); - - test('User is warned before uploading project file over an edited project', async () => { - await loadUri(uri); - - // Change the project by deleting a sprite - await rightClickText('Sprite1', scope.spriteTile); - await clickText('delete', scope.spriteTile); - - await clickXpath(FILE_MENU_XPATH); - await clickText('Load from your computer'); - const input = await findByXpath('//input[@accept=".sb,.sb2,.sb3"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/project1.sb3')); - await driver.switchTo().alert() - .accept(); - await findByText('project1-sprite'); - }); - - test('Theme picker shows themes', async () => { - await loadUri(uri); - await clickXpath(SETTINGS_MENU_XPATH); - await clickText('Color Mode', scope.menuBar); - - expect(await (await findByText('Original', scope.menuBar)).isDisplayed()).toBe(true); - expect(await (await findByText('High Contrast', scope.menuBar)).isDisplayed()).toBe(true); - }); - - test('Theme picker switches to high contrast', async () => { - await loadUri(uri); - await clickXpath(SETTINGS_MENU_XPATH); - await clickText('Color Mode', scope.menuBar); - await clickText('High Contrast', scope.menuBar); - - // There is a tiny delay for the color theme to be applied to the categories. - await driver.wait(async () => { - const motionCategoryDiv = await findByXpath( - '//div[contains(@class, "scratchCategoryMenuItem") and ' + - 'contains(@class, "scratchCategoryId-motion")]/*[1]'); - const color = await motionCategoryDiv.getCssValue('background-color'); - - // Documentation for getCssValue says it depends on how the browser - // returns the value. Locally I am seeing 'rgba(128, 181, 255, 1)', - // but this is a bit flexible just in case. - return /128,\s?181,\s?255/.test(color) || color.includes('80B5FF'); - }, 5000, 'Motion category color does not match high contrast theme'); - }); - - test('Settings menu switches between submenus', async () => { - await loadUri(uri); - await clickXpath(SETTINGS_MENU_XPATH); - - // Language and theme options not visible yet - expect(await (await findByText('High Contrast', scope.menuBar)).isDisplayed()).toBe(false); - expect(await (await findByText('Esperanto', scope.menuBar)).isDisplayed()).toBe(false); - - await clickText('Color Mode', scope.menuBar); - - // Only theme options visible - expect(await (await findByText('High Contrast', scope.menuBar)).isDisplayed()).toBe(true); - expect(await (await findByText('Esperanto', scope.menuBar)).isDisplayed()).toBe(false); - - await clickText('Language', scope.menuBar); - - // Only language options visible - expect(await (await findByText('High Contrast', scope.menuBar)).isDisplayed()).toBe(false); - expect(await (await findByText('Esperanto', scope.menuBar)).isDisplayed()).toBe(true); - }); - - test('Menu labels hidden when width is equal to 1024', async () => { - await loadUri(uri); - await driver.manage() - .window() - .setSize(1024, 768); - - const collapsibleMenus = ['Settings', 'File', 'Edit', 'Tutorials']; - for (const menu of collapsibleMenus) { - const settingsMenu = await findByText(menu, scope.menuBar); - expect(await settingsMenu.isDisplayed()).toBe(false); - } - }); - - test('Menu labels shown when width is greater than 1024', async () => { - await loadUri(uri); - await driver.manage() - .window() - .setSize(1200, 768); - - const collapsibleMenus = ['Settings', 'File', 'Edit', 'Tutorials']; - for (const menu of collapsibleMenus) { - const settingsMenu = await findByText(menu, scope.menuBar); - expect(await settingsMenu.isDisplayed()).toBe(true); - } - }); -}); diff --git a/test/integration/project-loading.test.js b/test/integration/project-loading.test.js deleted file mode 100644 index 697b136ef87..00000000000 --- a/test/integration/project-loading.test.js +++ /dev/null @@ -1,117 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - clickXpath, - findByText, - findByXpath, - getDriver, - getLogs, - loadUri, - scope -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -const FILE_MENU_XPATH = '//div[contains(@class, "menu-bar_menu-bar-item")]' + - '[*[contains(@class, "menu-bar_collapsible-label")]//*[text()="File"]]'; - -describe('Loading scratch gui', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - describe('Loading projects by ID', () => { - - test('Nonexistent projects show error screen', async () => { - await loadUri(`${uri}#999999999999999999999`); - await clickText('Oops! Something went wrong.'); - }); - - // skipping because it relies on network speed, and tests a method - // of loading projects that we are not actively using anymore - test.skip('Load a project by ID directly through url', async () => { - await driver.quit(); // Reset driver to test hitting # url directly - driver = getDriver(); - - const projectId = '96708228'; - await loadUri(`${uri}#${projectId}`); - await clickXpath('//img[@title="Go"]'); - await new Promise(resolve => setTimeout(resolve, 2000)); - await clickXpath('//img[@title="Stop"]'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - // skipping because it relies on network speed, and tests a method - // of loading projects that we are not actively using anymore - test.skip('Load a project by ID (fullscreen)', async () => { - await driver.quit(); // Reset driver to test hitting # url directly - driver = getDriver(); - - const prevSize = driver.manage() - .window() - .getSize(); - await new Promise(resolve => setTimeout(resolve, 2000)); - driver.manage() - .window() - .setSize(1920, 1080); - const projectId = '96708228'; - await loadUri(`${uri}#${projectId}`); - await clickXpath('//img[@title="Full Screen Control"]'); - await new Promise(resolve => setTimeout(resolve, 500)); - await clickXpath('//img[@title="Go"]'); - await new Promise(resolve => setTimeout(resolve, 1000)); - await clickXpath('//img[@title="Stop"]'); - prevSize.then(value => { - driver.manage() - .window() - .setSize(value.width, value.height); - }); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - // skipping because this test fails frequently on CI; might need "wait(until.elementLocated" or similar - // error message is "stale element reference: element is not attached to the page document" - test.skip('Creating new project resets active tab to Code tab', async () => { - await loadUri(uri); - await findByXpath('//*[span[text()="Costumes"]]'); - await clickText('Costumes'); - await clickXpath(FILE_MENU_XPATH); - await clickXpath('//li[span[text()="New"]]'); - await findByXpath('//div[@class="scratchCategoryMenu"]'); - await clickText('Operators', scope.blocksTab); - }); - - test('Not logged in->made no changes to project->create new project should not show alert', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await clickXpath('//li[span[text()="New"]]'); - await findByXpath('//*[div[@class="scratchCategoryMenu"]]'); - await clickText('Operators', scope.blocksTab); - }); - - test.skip('Not logged in->made a change to project->create new project should show alert', async () => { - await loadUri(uri); - await clickText('Sounds'); - await clickXpath('//button[@aria-label="Choose a Sound"]'); - await clickText('A Bass', scope.modal); // Should close the modal - await findByText('1.28'); // length of A Bass sound - await clickXpath(FILE_MENU_XPATH); - await clickXpath('//li[span[text()="New"]]'); - driver.switchTo() - .alert() - .accept(); - await findByXpath('//*[div[@class="scratchCategoryMenu"]]'); - await clickText('Operators', scope.blocksTab); - }); - }); -}); diff --git a/test/integration/project-state.test.js b/test/integration/project-state.test.js deleted file mode 100644 index cb1c245a496..00000000000 --- a/test/integration/project-state.test.js +++ /dev/null @@ -1,45 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - clickXpath, - findByXpath, - getDriver, - Key, - loadUri -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -const FILE_MENU_XPATH = '//div[contains(@class, "menu-bar_menu-bar-item")]' + - '[*[contains(@class, "menu-bar_collapsible-label")]//*[text()="File"]]'; - -describe('Project state', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('File->New resets project title', async () => { - const defaultProjectTitle = 'Scratch Project'; - await loadUri(uri); - const inputEl = await findByXpath(`//input[@value="${defaultProjectTitle}"]`); - for (let i = 0; i < defaultProjectTitle.length; i++) { - inputEl.sendKeys(Key.BACK_SPACE); - } - inputEl.sendKeys('Changed title of project'); - await clickText('Costumes'); // just to blur the input - // verify that project title has changed - await clickXpath('//input[@value="Changed title of project"]'); - await clickXpath(FILE_MENU_XPATH); - await clickXpath('//li[span[text()="New"]]'); - // project title should be default again - await clickXpath(`//input[@value="${defaultProjectTitle}"]`); - }); -}); diff --git a/test/integration/sb-file-uploader-hoc.test.js b/test/integration/sb-file-uploader-hoc.test.js deleted file mode 100644 index 1b38f4978d7..00000000000 --- a/test/integration/sb-file-uploader-hoc.test.js +++ /dev/null @@ -1,114 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - clickXpath, - findByText, - findByXpath, - getDriver, - loadUri -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -const FILE_MENU_XPATH = '//div[contains(@class, "menu-bar_menu-bar-item")]' + - '[*[contains(@class, "menu-bar_collapsible-label")]//*[text()="File"]]'; - -describe('Loading scratch gui', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('Loading project file from computer succeeds, without opening failure alert', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await clickText('Load from your computer'); - const input = await findByXpath('//input[@accept=".sb,.sb2,.sb3"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/project1.sb3')); - await findByText('project1-sprite'); - // this test will fail if an alert appears, e.g. in SBFileUploaderHOC's onload() function - }); - - test('Loading project file from computer gives project the filename from file', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await clickText('Load from your computer'); - const input = await findByXpath('//input[@accept=".sb,.sb2,.sb3"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/project1.sb3')); - await findByText('project1-sprite'); - await clickXpath('//input[@value="project1"]'); - }); - - test('Load sb3 project with a missing svg costume', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await clickText('Load from your computer'); - const input = await findByXpath('//input[@accept=".sb,.sb2,.sb3"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/missing-sprite-svg.sb3')); - const spriteTile = await findByText('Blue Square Guy'); - const tileVisible = await spriteTile.isDisplayed(); - expect(tileVisible).toBe(true); - }); - - test('Load sb3 project with an invalid svg costume', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await clickText('Load from your computer'); - const input = await findByXpath('//input[@accept=".sb,.sb2,.sb3"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/corrupt-svg.sb3')); - const spriteTile = await findByText('Blue Square Guy'); - const tileVisible = await spriteTile.isDisplayed(); - expect(tileVisible).toBe(true); - }); - - test('Load sb2 project with a missing svg costume', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await clickText('Load from your computer'); - const input = await findByXpath('//input[@accept=".sb,.sb2,.sb3"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/missing-svg.sb2')); - const spriteTile = await findByText('Blue Guy'); - const tileVisible = await spriteTile.isDisplayed(); - expect(tileVisible).toBe(true); - }); - - test('Load sb2 project with an invalid svg costume', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await clickText('Load from your computer'); - const input = await findByXpath('//input[@accept=".sb,.sb2,.sb3"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/corrupt-svg.sb2')); - const spriteTile = await findByText('Blue Guy'); - const tileVisible = await spriteTile.isDisplayed(); - expect(tileVisible).toBe(true); - }); - - test('Load sb3 project with a missing bmp costume', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await clickText('Load from your computer'); - const input = await findByXpath('//input[@accept=".sb,.sb2,.sb3"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/missing-bmp.sb3')); - const spriteTile = await findByText('green-bmp-guy'); - const tileVisible = await spriteTile.isDisplayed(); - expect(tileVisible).toBe(true); - }); - - test('Load sb3 project with an invalid bmp costume', async () => { - await loadUri(uri); - await clickXpath(FILE_MENU_XPATH); - await clickText('Load from your computer'); - const input = await findByXpath('//input[@accept=".sb,.sb2,.sb3"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/corrupt-bmp.sb3')); - const spriteTile = await findByText('green-bmp-guy'); - const tileVisible = await spriteTile.isDisplayed(); - expect(tileVisible).toBe(true); - }); -}); diff --git a/test/integration/sounds.test.js b/test/integration/sounds.test.js deleted file mode 100644 index 27946e186fa..00000000000 --- a/test/integration/sounds.test.js +++ /dev/null @@ -1,189 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; -import {Key} from 'selenium-webdriver'; - -const { - clickText, - clickXpath, - findByText, - findByXpath, - getDriver, - getLogs, - loadUri, - rightClickText, - scope -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -describe('Working with sounds', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('Adding a sound through the library', async () => { - await loadUri(uri); - await clickText('Sounds'); - - // Delete the sound - await rightClickText('Meow', scope.soundsTab); - await driver.sleep(500); // Wait a moment for context menu; only needed for local testing - await clickText('delete', scope.soundsTab); - - // Add it back - await clickXpath('//button[@aria-label="Choose a Sound"]'); - let el = await findByXpath("//input[@placeholder='Search']"); - await el.sendKeys('meow'); - await clickText('Meow', scope.modal); // Should close the modal - - // Add a new sound - await clickXpath('//button[@aria-label="Choose a Sound"]'); - el = await findByXpath("//input[@placeholder='Search']"); - await el.sendKeys('chom'); - await clickText('Chomp'); // Should close the modal, then click the sounds in the selector - await findByXpath("//input[@value='Chomp']"); // Should show editor for new sound - - await clickXpath('//button[@title="Play"]'); - - await clickText('Louder'); - await clickText('Softer'); - await clickText('Faster'); - await clickText('Slower'); - await clickText('Robot'); - await clickText('Reverse'); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding a sound by surprise button', async () => { - await loadUri(uri); - await clickText('Sounds'); - const el = await findByXpath('//button[@aria-label="Choose a Sound"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - await clickXpath('//button[@aria-label="Surprise"]'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Duplicating a sound', async () => { - await loadUri(uri); - await clickText('Sounds'); - - await rightClickText('Meow', scope.soundsTab); - await clickText('duplicate', scope.soundsTab); - await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for error - - // Make sure the duplicated sound is named correctly. - await clickText('Meow2', scope.soundsTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - // Regression test for gui issue #1320 - test('Switching sprites with different numbers of sounds', async () => { - await loadUri(uri); - - // Add a sound so this sprite has 2 sounds. - await clickText('Sounds'); - await clickXpath('//button[@aria-label="Choose a Sound"]'); - await clickText('A Bass'); // Closes the modal - - // Now add a sprite with only one sound. - await clickXpath('//button[@aria-label="Choose a Sprite"]'); - await clickText('Abby'); // Doing this used to crash the editor. - - await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for error - - // Make sure the 'Oops' screen is not visible - const content = await driver.getPageSource(); - expect(content.indexOf('Oops')).toEqual(-1); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding multiple sounds at the same time', async () => { - const files = [ - path.resolve(__dirname, '../fixtures/movie.wav'), - path.resolve(__dirname, '../fixtures/sneaker.wav') - ]; - await loadUri(uri); - await clickText('Sounds'); - const el = await findByXpath('//button[@aria-label="Choose a Sound"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(files.join('\n')); - - await findByText('movie', scope.soundsTab); - await findByText('sneaker', scope.soundsTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Copy to new button adds a new sound', async () => { - await loadUri(uri); - await clickText('Sounds'); - await clickText('Copy to New', scope.soundsTab); - await clickText('Meow2', scope.soundsTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Copy and pasting within a sound changes its duration', async () => { - await loadUri(uri); - await clickText('Sounds'); - await findByText('0.85', scope.soundsTab); // Original meow sound duration - await clickText('Copy', scope.soundsTab); - await clickText('Paste', scope.soundsTab); - await findByText('1.70', scope.soundsTab); // Sound has doubled in duration - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Can copy a sound from a sprite and paste into a sound on the stage', async () => { - await loadUri(uri); - await clickText('Sounds'); - await clickText('Copy', scope.soundsTab); // Copy the meow sound - await clickXpath('//span[text()="Stage"]'); - await findByText('0.02', scope.soundsTab); // Original pop sound duration - await clickText('Paste', scope.soundsTab); - await findByText('0.87', scope.soundsTab); // Duration of pop + meow sound - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Keyboard shortcuts', async () => { - const cmdCtrl = process.platform.includes('darwin') ? Key.COMMAND : Key.CONTROL; - - await loadUri(uri); - await clickText('Sounds'); - const el = await findByXpath('//button[@aria-label="Choose a Sound"]'); - await el.sendKeys(Key.chord(cmdCtrl, 'a')); // Select all - await findByText('0.85', scope.soundsTab); // Meow sound duration - await el.sendKeys(Key.DELETE); - await findByText('0.00', scope.soundsTab); // Sound is now empty - await el.sendKeys(Key.chord(cmdCtrl, 'z')); // undo - await findByText('0.85', scope.soundsTab); // Meow sound is back - await el.sendKeys(Key.chord(cmdCtrl, Key.SHIFT, 'z')); // redo - await findByText('0.00', scope.soundsTab); // Sound is empty again - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); -}); diff --git a/test/integration/sprites.test.js b/test/integration/sprites.test.js deleted file mode 100644 index 40677246cda..00000000000 --- a/test/integration/sprites.test.js +++ /dev/null @@ -1,299 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; -import {StaleElementReferenceError} from 'selenium-webdriver/lib/error'; -import until from 'selenium-webdriver/lib/until'; - -const { - clickText, - clickXpath, - elementIsVisible, - findByText, - findByXpath, - getDriver, - getLogs, - loadUri, - rightClickText, - scope -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -describe('Working with sprites', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('Adding a sprite through the library', async () => { - await loadUri(uri); - await clickText('Costumes'); - await clickXpath('//button[@aria-label="Choose a Sprite"]'); - await clickText('Apple', scope.modal); // Closes modal - await rightClickText('Apple', scope.spriteTile); // Make sure it is there - await clickText('Motion'); // Make sure we are back to the code tab - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding a sprite by surprise button', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - await clickXpath('//button[@aria-label="Surprise"]'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding a sprite by paint button', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - await clickXpath('//button[@aria-label="Paint"]'); - await findByText('Convert to Bitmap'); // Make sure we are on the paint editor - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Deleting only sprite does not crash', async () => { - await loadUri(uri); - await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for scroll animation - await rightClickText('Sprite1', scope.spriteTile); - await clickText('delete', scope.spriteTile); - // Confirm that the stage has been switched to - await findByText('Stage selected: no motion blocks'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Deleting by x button on sprite tile', async () => { - await loadUri(uri); - await new Promise(resolve => setTimeout(resolve, 1000)); // Wait for scroll animation - await clickXpath('//*[@aria-label="Delete"]'); // Only visible close button is on the sprite - // Confirm that the stage has been switched to - await findByText('Stage selected: no motion blocks'); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding a sprite by uploading a png', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/gh-3582-png.png')); - await clickText('gh-3582-png', scope.spriteTile); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - // This test fails because uploading an SVG as a sprite changes the scaling - // Enable when this is fixed issues/3608 - test('Adding a sprite by uploading an svg (gh-3608)', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/100-100.svg')); - await clickText('100-100', scope.spriteTile); // Sprite is named for costume filename - - // Check to make sure the size is right - await clickText('Costumes'); - await clickText('100-100', scope.costumesTab); // The name of the costume - await clickText('100 x 100', scope.costumesTab); // The size of the costume - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding a sprite by uploading a gif', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/paddleball.gif')); - await clickText('paddleball', scope.spriteTile); // Sprite is named for costume filename - - await clickText('Costumes'); - await findByText('paddleball', scope.costumesTab); - await findByText('paddleball2', scope.costumesTab); - await findByText('paddleball3', scope.costumesTab); - await findByText('paddleball4', scope.costumesTab); - await findByText('paddleball5', scope.costumesTab); - await findByText('paddleball6', scope.costumesTab); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding a letter sprite through the Letters filter in the library', async () => { - await loadUri(uri); - await driver.manage() - .window() - .setSize(1244, 768); // Letters filter not visible at 1024 width - await clickText('Costumes'); - await clickXpath('//button[@aria-label="Choose a Sprite"]'); - await clickText('Letters'); - await clickText('Block-B', scope.modal); // Closes modal - await rightClickText('Block-B', scope.spriteTile); // Make sure it is there - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Use browser back button to close library', async () => { - await loadUri(uri); - await clickText('Costumes'); - await clickXpath('//button[@aria-label="Choose a Sprite"]'); - const abbyElement = await findByText('Abby'); // Should show editor for new costume - await elementIsVisible(abbyElement); - await driver.navigate().back(); - // should throw error because library is no longer present - await expect(driver.wait(until.elementIsVisible(abbyElement))) - .rejects - .toBeInstanceOf(StaleElementReferenceError); - const costumesElement = await findByText('Costumes'); // Should show editor for new costume - await elementIsVisible(costumesElement); - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Adding multiple sprites at the same time', async () => { - const files = [ - path.resolve(__dirname, '../fixtures/gh-3582-png.png'), - path.resolve(__dirname, '../fixtures/100-100.svg') - ]; - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(files.join('\n')); - - await findByText('gh-3582-png', scope.spriteTile); - await findByText('100-100', scope.spriteTile); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); - - test('Load a sprite3 with a missing svg costume', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/missing-svg.sprite3')); - const tile = await findByText('Blue Square Guy', scope.spriteTile); - const tileVisible = await tile.isDisplayed(); - await expect(tileVisible).toBe(true); - }); - - test('Load a sprite3 with a currupt svg costume', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/corrupt-svg.sprite3')); - const tile = await findByText('Blue Square Guy', scope.spriteTile); - const tileVisible = await tile.isDisplayed(); - await expect(tileVisible).toBe(true); - }); - - test('Load a scratch3 corrupt svg as a sprite', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/corrupt-from-scratch3.svg')); - const tile = await findByText('corrupt-from-scratch3', scope.spriteTile); - const tileVisible = await tile.isDisplayed(); - await expect(tileVisible).toBe(true); - }); - - test('Load a sprite2 with a missing svg costume', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/missing-svg.sprite2')); - const tile = await findByText('Blue Guy', scope.spriteTile); - const tileVisible = await tile.isDisplayed(); - await expect(tileVisible).toBe(true); - }); - - test('Load a sprite2 with a currupt svg costume', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/corrupted-svg.sprite2')); - const tile = await findByText('Blue Guy', scope.spriteTile); - const tileVisible = await tile.isDisplayed(); - await expect(tileVisible).toBe(true); - }); - - test('Load a corrupt scratch2 svg as a sprite', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/scratch2-corrupted.svg')); - const tile = await findByText('scratch2-corrupted', scope.spriteTile); - const tileVisible = await tile.isDisplayed(); - await expect(tileVisible).toBe(true); - }); - - test('Load a sprite3 with a missing bmp costume', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/missing-bmp.sprite3')); - const tile = await findByText('green-bmp-guy', scope.spriteTile); - const tileVisible = await tile.isDisplayed(); - await expect(tileVisible).toBe(true); - }); - - test('Load a sprite3 with a currupt bmp costume', async () => { - await loadUri(uri); - const el = await findByXpath('//button[@aria-label="Choose a Sprite"]'); - await driver.actions().mouseMove(el) - .perform(); - await driver.sleep(500); // Wait for thermometer menu to come up - const input = await findByXpath('//input[@type="file"]'); - await input.sendKeys(path.resolve(__dirname, '../fixtures/corrupt-bmp.sprite3')); - const tile = await findByText('green-bmp-guy', scope.spriteTile); - const tileVisible = await tile.isDisplayed(); - await expect(tileVisible).toBe(true); - }); - - // TODO: uploading a corrupt bmp as a sprite should throw an error and not add a gray question mark - -}); diff --git a/test/integration/stage-size.test.js b/test/integration/stage-size.test.js deleted file mode 100644 index ca235905079..00000000000 --- a/test/integration/stage-size.test.js +++ /dev/null @@ -1,46 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - clickXpath, - rightClickText, - getDriver, - getLogs, - loadUri, - scope -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html'); - -let driver; - -describe('Loading scratch gui', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('Switching small/large stage after highlighting and deleting sprite', async () => { - await loadUri(uri); - - // Highlight the sprite - await clickText('Sprite1', scope.spriteTile); - - // Delete it - await rightClickText('Sprite1', scope.spriteTile); - await clickText('delete', scope.spriteTile); - - // Go to small stage mode - await clickXpath('//button[@title="Switch to small stage"]'); - - // Confirm app still working - await clickXpath('//button[@title="Switch to large stage"]'); - - const logs = await getLogs(); - await expect(logs).toEqual([]); - }); -}); diff --git a/test/integration/tutorials-shortcut.test.js b/test/integration/tutorials-shortcut.test.js deleted file mode 100644 index 187e7252547..00000000000 --- a/test/integration/tutorials-shortcut.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import path from 'path'; -import SeleniumHelper from '../helpers/selenium-helper'; - -const { - clickText, - findByXpath, - getDriver, - loadUri -} = new SeleniumHelper(); - -const uri = path.resolve(__dirname, '../../build/index.html?tutorial=all'); -const uriPrefix = path.resolve(__dirname, '../../build/index.html?tutorial='); - -let driver; - -describe('Working with shortcut to Tutorials library', () => { - beforeAll(() => { - driver = getDriver(); - }); - - afterAll(async () => { - await driver.quit(); - }); - - test('opens with the Tutorial Library showing', async () => { - await loadUri(uri); - // make sure there is a tutorial visible that doesn't have a shortcut - await clickText('Make It Spin'); - await findByXpath('//div[contains(@class, "step-video")]'); - }); - - test('can open hidden tutorials', async () => { - await loadUri(`${uriPrefix}whatsnew`); - // should open the tutorial video immediately - await findByXpath('//div[contains(@class, "step-video")]'); - }); - // @todo navigating cards, etc. -}); diff --git a/test/register-hooks.mjs b/test/register-hooks.mjs new file mode 100644 index 00000000000..6f3f49aae1e --- /dev/null +++ b/test/register-hooks.mjs @@ -0,0 +1,30 @@ +/** + * @fileoverview + * Tiny bridge between webpack's permissive import rules and what Node.js wants. + */ + +import {registerHooks} from 'node:module'; + +registerHooks({ + resolve (specifier, context, nextResolve) { + let result; + try { + result = nextResolve(specifier, context); + } catch (e) { + if (e.code !== 'ERR_MODULE_NOT_FOUND' || !/^\.\.?\//.test(specifier)) { + throw e; + } + result = nextResolve(`${specifier}.js`, context); + } + if (result.url.endsWith('.json')) { + result = { + ...result, + importAttributes: { + ...result.importAttributes, + type: 'json' + } + }; + } + return result; + } +}); diff --git a/test/smoke/browser.test.js b/test/smoke/browser.test.js deleted file mode 100644 index 2eeb2cfccea..00000000000 --- a/test/smoke/browser.test.js +++ /dev/null @@ -1,74 +0,0 @@ -import SeleniumHelper from '../helpers/selenium-helper'; -const {SAUCE_USERNAME, SAUCE_ACCESS_KEY, SMOKE_URL} = process.env; -const { - getSauceDriver, - findByText -} = new SeleniumHelper(); - -// Make the default timeout longer, Sauce tests take ~30s -jasmine.DEFAULT_TIMEOUT_INTERVAL = 60 * 1000; // eslint-disable-line - -const SUPPORTED_MESSAGE = 'Welcome to the Scratch 3.0 Beta'; -const UNSUPPORTED_MESSAGE = 'Scratch 3.0 does not support Internet Explorer'; - -// Driver configs can be generated with the Sauce Platform Configurator -// https://wiki.saucelabs.com/display/DOCS/Platform+Configurator -describe('Smoke tests on older browsers', () => { - let driver; - - afterEach(async () => { - if (driver) await driver.quit(); - }); - - test('Credentials should be provided', () => { - expect(SAUCE_USERNAME && SAUCE_ACCESS_KEY && SMOKE_URL).toBeTruthy(); - }); - - test('IE 11 should be unsupported', async () => { - const driverConfig = { - browserName: 'internet explorer', - platform: 'Windows 10', - version: '11.103' - }; - driver = await getSauceDriver( - process.env.SAUCE_USERNAME, - process.env.SAUCE_ACCESS_KEY, - driverConfig); - await driver.get(process.env.SMOKE_URL); - const el = await findByText(UNSUPPORTED_MESSAGE); - const isDisplayed = await el.isDisplayed(); - return expect(isDisplayed).toEqual(true); - }); - - test('Safari 9 should be supported', async () => { - const driverConfig = { - browserName: 'safari', - platform: 'OS X 10.11', - version: '9.0' - }; - driver = await getSauceDriver( - process.env.SAUCE_USERNAME, - process.env.SAUCE_ACCESS_KEY, - driverConfig); - await driver.get(process.env.SMOKE_URL); - const el = await findByText(SUPPORTED_MESSAGE); - const isDisplayed = await el.isDisplayed(); - return expect(isDisplayed).toEqual(true); - }); - - test('Safari 10 should be supported', async () => { - const driverConfig = { - browserName: 'safari', - platform: 'OS X 10.11', - version: '10.0' - }; - driver = await getSauceDriver( - process.env.SAUCE_USERNAME, - process.env.SAUCE_ACCESS_KEY, - driverConfig); - await driver.get(process.env.SMOKE_URL); - const el = await findByText(SUPPORTED_MESSAGE); - const isDisplayed = await el.isDisplayed(); - return expect(isDisplayed).toEqual(true); - }); -}); diff --git a/test/unit/addons/settings.test.js b/test/unit/addons/settings.test.js deleted file mode 100644 index 6f4ff1b9734..00000000000 --- a/test/unit/addons/settings.test.js +++ /dev/null @@ -1,705 +0,0 @@ -import SettingStore from '../../../src/addons/settings-store'; -import upstreamMeta from '../../../src/addons/generated/upstream-meta.json'; - -class LocalStorageShim { - constructor () { - this.storage = Object.create(null); - } - getItem (key) { - return this.storage[key]; - } - setItem (key, value) { - this.storage[key] = value.toString(); - } -} - -beforeEach(() => { - global.localStorage = new LocalStorageShim(); -}); - -const lightTheme = { - isDark: () => false -}; - -const darkTheme = { - isDark: () => true -}; - -test('enabled, event', () => { - const store = new SettingStore(); - const fn = jest.fn(); - store.addEventListener('setting-changed', fn); - expect(store.getAddonEnabled('editor-devtools')).toBe(true); - expect('enabled' in store.store['editor-devtools']).toBe(false); - store.setAddonEnabled('editor-devtools', false); - expect(store.getAddonEnabled('editor-devtools')).toBe(false); - expect('enabled' in store.store['editor-devtools']).toBe(true); - store.setAddonEnabled('editor-devtools', true); - store.setAddonEnabled('cat-blocks', true); - expect('enabled' in store.store['cat-blocks']).toBe(true); - store.setAddonEnabled('cat-blocks', null); - expect('enabled' in store.store['cat-blocks']).toBe(false); - expect(fn).toHaveBeenCalledTimes(4); - expect(fn.mock.calls[0][0].detail.addonId).toBe('editor-devtools'); - expect(fn.mock.calls[0][0].detail.settingId).toBe('enabled'); - expect(fn.mock.calls[0][0].detail.value).toBe(false); - expect(fn.mock.calls[1][0].detail.addonId).toBe('editor-devtools'); - expect(fn.mock.calls[1][0].detail.settingId).toBe('enabled'); - expect(fn.mock.calls[1][0].detail.value).toBe(true); - expect(fn.mock.calls[2][0].detail.addonId).toBe('cat-blocks'); - expect(fn.mock.calls[2][0].detail.settingId).toBe('enabled'); - expect(fn.mock.calls[2][0].detail.value).toBe(true); - expect(fn.mock.calls[3][0].detail.addonId).toBe('cat-blocks'); - expect(fn.mock.calls[3][0].detail.settingId).toBe('enabled'); - expect(fn.mock.calls[3][0].detail.value).toBe(false); -}); - -test('settings, event, default values', () => { - const store = new SettingStore(); - const fn = jest.fn(); - expect(store.getAddonSetting('onion-skinning', 'default')).toBe(false); - expect('default' in store.store['onion-skinning']).toBe(false); - store.addEventListener('setting-changed', fn); - store.setAddonSetting('onion-skinning', 'default', true); - expect(store.getAddonSetting('onion-skinning', 'default')).toBe(true); - expect('default' in store.store['onion-skinning']).toBe(true); - store.setAddonSetting('onion-skinning', 'default', null); - expect('default' in store.store['onion-skinning']).toBe(false); - expect(store.getAddonSetting('onion-skinning', 'default')).toBe(false); - expect(fn).toHaveBeenCalledTimes(2); - expect(fn.mock.calls[0][0].detail.addonId).toBe('onion-skinning'); - expect(fn.mock.calls[0][0].detail.settingId).toBe('default'); - expect(fn.mock.calls[0][0].detail.value).toBe(true); - expect(fn.mock.calls[1][0].detail.addonId).toBe('onion-skinning'); - expect(fn.mock.calls[1][0].detail.settingId).toBe('default'); - expect(fn.mock.calls[1][0].detail.value).toBe(false); -}); - -test('no actual change emits no event', () => { - const store = new SettingStore(); - const fn = jest.fn(); - store.addEventListener('setting-changed', fn); - for (let i = 0; i < 5; i++) store.setAddonEnabled('cat-blocks', true); - expect(fn).toHaveBeenCalledTimes(1); - for (let i = 0; i < 5; i++) store.setAddonEnabled('cat-blocks', false); - expect(fn).toHaveBeenCalledTimes(2); - for (let i = 0; i < 5; i++) store.setAddonSetting('onion-skinning', 'default', true); - expect(fn).toHaveBeenCalledTimes(3); - for (let i = 0; i < 5; i++) store.setAddonSetting('onion-skinning', 'default', false); - expect(fn).toHaveBeenCalledTimes(4); -}); - -test('changing enabled throws on unknown addons', () => { - const store = new SettingStore(); - const fn = jest.fn(); - store.addEventListener('setting-changed', fn); - expect(() => store.setAddonEnabled('egriohergoijergijregojiergdfoijre', true)).toThrow(); - expect(fn).toHaveBeenCalledTimes(0); -}); - -test('changing settings throws on unknown settings', () => { - const store = new SettingStore(); - const fn = jest.fn(); - store.addEventListener('setting-changed', fn); - expect(() => store.setAddonSetting('onion-skinning', 'sdlkjfslkdjfljksd', true)).toThrow(); - expect(() => store.setAddonSetting('ergfoijgi', 'sdflkjsfdlkj', true)).toThrow(); - expect(fn).toHaveBeenCalledTimes(0); -}); - -test('changing enabled throws on invalid values', () => { - const store = new SettingStore(); - const fn = jest.fn(); - store.addEventListener('setting-changed', fn); - expect(() => store.setAddonEnabled('cat-blocks', 'sdfjlksdflk')).toThrow(); - expect(() => store.setAddonEnabled('cat-blocks', 0)).toThrow(); - expect(() => store.setAddonEnabled('cat-blocks', [])).toThrow(); - expect(() => store.setAddonEnabled('cat-blocks', {})).toThrow(); - expect(fn).toHaveBeenCalledTimes(0); -}); - -test('changing settings checks value validity and throws', () => { - const store = new SettingStore(); - const fn = jest.fn(); - store.addEventListener('setting-changed', fn); - // boolean - expect(() => store.setAddonSetting('onion-skinning', 'default', '#abcdef')).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'default', [])).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'default', {})).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'default', '')).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'default', 1)).toThrow(); - // integer - expect(() => store.setAddonSetting('onion-skinning', 'next', '#abcdef')).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'next', [])).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'next', {})).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'next', '')).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'next', '3')).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'next', false)).toThrow(); - // select - expect(() => store.setAddonSetting('onion-skinning', 'mode', '#abcdef')).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'mode', [])).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'mode', {})).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'mode', '')).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'mode', false)).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'mode', 1)).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'mode', 'tint')).not.toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'mode', 'merge')).not.toThrow(); - // color - expect(() => store.setAddonSetting('onion-skinning', 'beforeTint', '#abcdef')).not.toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'beforeTint', '#abcDE1')).not.toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'beforeTint', [])).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'beforeTint', {})).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'beforeTint', '')).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'beforeTint', false)).toThrow(); - expect(() => store.setAddonSetting('onion-skinning', 'beforeTint', 1)).toThrow(); - expect(fn).toHaveBeenCalledTimes(4); -}); - -test('colors with alpha channel', () => { - const store = new SettingStore(); - store.setAddonSetting('onion-skinning', 'beforeTint', '#123456'); - expect(store.getAddonSetting('onion-skinning', 'beforeTint')).toBe('#123456'); - store.setAddonSetting('onion-skinning', 'beforeTint', '#234567ff'); - expect(store.getAddonSetting('onion-skinning', 'beforeTint')).toBe('#234567'); - store.setAddonSetting('onion-skinning', 'beforeTint', '#abc67800'); - expect(store.getAddonSetting('onion-skinning', 'beforeTint')).toBe('#abc678'); - store.import({ - addons: { - 'onion-skinning': { - settings: { - beforeTint: '#56789aff' - } - } - } - }); - expect(store.getAddonSetting('onion-skinning', 'beforeTint')).toBe('#56789a'); -}); - -test('reset does not change enabled', () => { - const store = new SettingStore(); - store.setAddonEnabled('cat-blocks', true); - store.resetAddon('cat-blocks'); - expect(store.getAddonEnabled('cat-blocks')).toBe(true); -}); - -test('reset settings, event', () => { - const store = new SettingStore(); - store.setAddonSetting('onion-skinning', 'default', true); - store.setAddonSetting('onion-skinning', 'next', 3); - const fn = jest.fn(); - store.addEventListener('setting-changed', fn); - store.resetAddon('onion-skinning'); - expect(store.getAddonSetting('onion-skinning', 'default')).toBe(false); - expect(store.getAddonSetting('onion-skinning', 'next')).toBe(0); - expect(fn).toHaveBeenCalledTimes(2); - expect(fn.mock.calls[0][0].detail.addonId).toBe('onion-skinning'); - expect(fn.mock.calls[0][0].detail.settingId).toBe('default'); - expect(fn.mock.calls[0][0].detail.value).toBe(false); - expect(fn.mock.calls[1][0].detail.addonId).toBe('onion-skinning'); - expect(fn.mock.calls[1][0].detail.settingId).toBe('next'); - expect(fn.mock.calls[1][0].detail.value).toBe(0); -}); - -test('reset all addons', () => { - const store = new SettingStore(); - store.setAddonEnabled('cat-blocks', true); - store.setAddonSetting('onion-skinning', 'default', true); - const fn = jest.fn(); - store.addEventListener('setting-changed', fn); - store.resetAllAddons(); - expect(fn).toHaveBeenCalledTimes(2); - expect(fn.mock.calls[0][0].detail.addonId).toBe('cat-blocks'); - expect(fn.mock.calls[0][0].detail.settingId).toBe('enabled'); - expect(fn.mock.calls[0][0].detail.value).toBe(false); - expect(fn.mock.calls[1][0].detail.addonId).toBe('onion-skinning'); - expect(fn.mock.calls[1][0].detail.settingId).toBe('default'); - expect(fn.mock.calls[1][0].detail.value).toBe(false); -}); - -test('apply preset', () => { - const store = new SettingStore(); - const fn = jest.fn(); - store.addEventListener('setting-changed', fn); - store.setAddonSetting('editor-theme3', 'motion-color', '#abcdef'); - store.applyAddonPreset('editor-theme3', 'original'); - expect(fn.mock.calls.length).toBeGreaterThan(5); - expect(store.getAddonSetting('editor-theme3', 'motion-color')).toBe('#4a6cd4'); - // TODO: test that settings not specified in the preset don't change -}); - -test('unknown preset throws', () => { - const store = new SettingStore(); - const fn = jest.fn(); - store.addEventListener('setting-changed', fn); - expect(() => store.applyAddonPreset('alksdfjlksdf', 'jksdflkjsdf')).toThrow(); - expect(() => store.applyAddonPreset('editor-theme3', 'jksdflkjsdf')).toThrow(); - expect(fn).toHaveBeenCalledTimes(0); -}); - -test('export core', () => { - const store = new SettingStore(); - const exported = store.export({theme: lightTheme}); - expect(exported.core.version).toMatch(/tw/); - expect(exported.core.lightTheme).toBe(true); - const dark = store.export({theme: darkTheme}); - expect(dark.core.lightTheme).toBe(false); -}); - -test('export settings', () => { - const store = new SettingStore(); - let exported = store.export({theme: lightTheme}); - expect(exported.addons['remove-sprite-confirm'].enabled).toBe(false); - expect(exported.addons['remove-sprite-confirm'].settings).toEqual({}); - expect(exported.addons['onion-skinning'].enabled).toBe(true); - expect(exported.addons['onion-skinning'].settings.default).toEqual(false); - store.setAddonEnabled('remove-sprite-confirm', true); - store.setAddonSetting('onion-skinning', 'default', true); - exported = store.export({theme: lightTheme}); - expect(exported.addons['remove-sprite-confirm'].enabled).toBe(true); - expect(exported.addons['remove-sprite-confirm'].settings).toEqual({}); - expect(exported.addons['onion-skinning'].enabled).toBe(true); - expect(exported.addons['onion-skinning'].settings.default).toEqual(true); -}); - -test('export theme', () => { - const store = new SettingStore(); - const exported = store.export({theme: lightTheme}); - expect(exported.core.lightTheme).toBe(true); - const exported2 = store.export({theme: darkTheme}); - expect(exported2.core.lightTheme).toBe(false); -}); - -test('import, event', () => { - const store = new SettingStore(); - store.setAddonEnabled('onion-skinning', false); - store.setAddonSetting('onion-skinning', 'next', 5); - const newStore = new SettingStore(); - newStore.setAddonSetting('onion-skinning', 'next', 10); - const fn = jest.fn(); - newStore.addEventListener('setting-changed', fn); - newStore.import(store.export({theme: lightTheme})); - expect(newStore.getAddonEnabled('onion-skinning')).toBe(false); - expect(newStore.getAddonSetting('onion-skinning', 'next')).toBe(5); - expect(fn).toHaveBeenCalledTimes(2); - expect(fn.mock.calls[0][0].detail.addonId).toBe('onion-skinning'); - expect(fn.mock.calls[0][0].detail.settingId).toBe('enabled'); - expect(fn.mock.calls[0][0].detail.value).toBe(false); - expect(fn.mock.calls[1][0].detail.addonId).toBe('onion-skinning'); - expect(fn.mock.calls[1][0].detail.settingId).toBe('next'); - expect(fn.mock.calls[1][0].detail.value).toBe(5); -}); - -test('export is identical after import', () => { - const store = new SettingStore(); - const fn = jest.fn(); - const exported = store.export({theme: lightTheme}); - store.import(exported); - expect(fn).toHaveBeenCalledTimes(0); - expect(store.export({theme: lightTheme})).toEqual(exported); -}); - -test('import format', () => { - const store = new SettingStore(); - store.setAddonEnabled('cat-blocks', true); - store.import({ - core: { - version: 'lksd', - lightTheme: false - }, - addons: { - 'onion-skinning': { - enabled: false, - settings: { - next: 7 - } - } - } - }); - expect(store.getAddonEnabled('onion-skinning')).toBe(false); - expect(store.getAddonSetting('onion-skinning', 'next')).toBe(7); - expect(store.getAddonEnabled('cat-blocks')).toBe(true); -}); - -test('invalid imports', () => { - const store = new SettingStore(); - expect(() => store.import({ - addons: {} - })).not.toThrow(); - expect(() => store.import({ - addons: { - 'onion-skinning': { - enabled: false, - settings: { - dsjfokosdfj: 5 - } - } - } - })).not.toThrow(); - expect(() => store.import({ - addons: { - grfdjiklk: { - enabled: true, - settings: {} - } - } - })).not.toThrow(); - expect(() => store.import({ - addons: { - 'onion-skinning': { - enabled: '4', - settings: { - default: '3' - } - } - } - })).not.toThrow(); - expect(store.getAddonEnabled('onion-skinning')).toBe(false); - expect(store.getAddonSetting('onion-skinning', 'default')).toBe(false); -}); - -test('local storage', () => { - const store = new SettingStore(); - store.setAddonEnabled('cat-blocks', true); - store.setAddonSetting('onion-skinning', 'default', true); - const newStore = new SettingStore(); - newStore.readLocalStorage(); - expect(newStore.store).toEqual(store.store); -}); - -test('local storage is resistent to errors', () => { - global.localStorage = new LocalStorageShim(); - const store = new SettingStore(); - localStorage.getItem = () => { - throw new Error(':('); - }; - store.readLocalStorage(); - localStorage.getItem = () => 'eoiru4jtg)(R('; - store.readLocalStorage(); - localStorage.setItem = () => { - throw new Error(':('); - }; - store.setAddonEnabled('cat-blocks', true); - // eslint-disable-next-line no-undefined - global.localStorage = undefined; - store.readLocalStorage(); - store.setAddonEnabled('cat-blocks', false); -}); - -test('setStore diffing', () => { - const settingsStore = new SettingStore(); - const pageStore = new SettingStore(); - settingsStore.setAddonEnabled('editor-devtools', false); - pageStore.setAddonEnabled('editor-devtools', false); - const fn = jest.fn(); - pageStore.addEventListener('addon-changed', fn); - pageStore.setStore(settingsStore.store); - expect(fn).toHaveBeenCalledTimes(0); - settingsStore.setAddonEnabled('editor-devtools', true); - settingsStore.setAddonSetting('onion-skinning', 'next', 10); - pageStore.setStore(settingsStore.store); - expect(fn).toHaveBeenCalledTimes(2); - expect(fn.mock.calls[0][0].detail.addonId).toBe('editor-devtools'); - expect(fn.mock.calls[1][0].detail.addonId).toBe('onion-skinning'); -}); - -test('setStore dynamic enable/disable', () => { - const settingsStore = new SettingStore(); - const pageStore = new SettingStore(); - settingsStore.setAddonEnabled('block-palette-icons', false); - pageStore.setStore(settingsStore.store); - const fn = jest.fn(); - pageStore.addEventListener('addon-changed', fn); - settingsStore.setAddonEnabled('block-palette-icons', true); - pageStore.setStore(settingsStore.store); - expect(fn.mock.calls[0][0].detail.addonId).toBe('block-palette-icons'); - expect(fn.mock.calls[0][0].detail.dynamicEnable).toBe(true); - expect(fn.mock.calls[0][0].detail.dynamicDisable).toBe(false); - settingsStore.setAddonEnabled('block-palette-icons', false); - pageStore.setStore(settingsStore.store); - expect(fn.mock.calls[1][0].detail.addonId).toBe('block-palette-icons'); - expect(fn.mock.calls[1][0].detail.dynamicEnable).toBe(false); - expect(fn.mock.calls[1][0].detail.dynamicDisable).toBe(true); -}); - -test('setStore weird values', () => { - const settingsStore = new SettingStore(); - expect(settingsStore.getAddonEnabled('pause')).toBe(true); - settingsStore.setAddonEnabled('pause', false); - settingsStore.setAddonEnabled('clones', true); - settingsStore.setStore({ - invalid0: {}, - invalid1: null, - pause: null - }); - expect(settingsStore.getAddonEnabled('pause')).toBe(false); -}); - -test('resetting an addon through setStore', () => { - const store = new SettingStore(); - expect(store.getAddonSetting('custom-block-shape', 'paddingSize')).toBe(100); - store.setAddonSetting('custom-block-shape', 'paddingSize', 50); - expect(store.getAddonSetting('custom-block-shape', 'paddingSize')).toBe(50); - const store2 = new SettingStore(); - store.setStore(store2.store); - expect(store.getAddonSetting('custom-block-shape', 'paddingSize')).toBe(100); -}); - -test('setStoreWithVersionCheck', () => { - const store = new SettingStore(); - store.setStore = jest.fn(); - store.setStoreWithVersionCheck({ - store: '1234', - version: upstreamMeta.commit - }); - expect(store.setStore).toHaveBeenCalledTimes(1); - expect(store.setStore).toHaveBeenCalledWith('1234'); - store.setStore = jest.fn(); - store.setStoreWithVersionCheck({ - store: '1234', - version: 'something invalid' - }); - expect(store.setStore).toHaveBeenCalledTimes(0); -}); - -test('parseUrlParameter', () => { - const store = new SettingStore(); - expect(store.getAddonEnabled('pause')).toBe(true); - expect(store.getAddonEnabled('mute-project')).toBe(true); - expect(store.getAddonEnabled('remove-curved-stage-border')).toBe(false); - expect(store.remote).toBe(false); - store.parseUrlParameter('pause,remove-curved-stage-border,,invalid addon??43t987(*&$'); - expect(store.getAddonEnabled('pause')).toBe(true); - expect(store.getAddonEnabled('mute-project')).toBe(false); - expect(store.getAddonEnabled('remove-curved-stage-border')).toBe(true); - expect(store.remote).toBe(true); -}); - -test('Settings migration 1 -> 2', () => { - const store = new SettingStore(); - - // eslint-disable-next-line max-len - global.localStorage.getItem = () => `{"_":1,"tw-project-info":{"enabled":false},"tw-interface-customization":{"enabled":false,"removeFeedback":true,"removeBackpack":true}}`; - store.readLocalStorage(); - expect(store.getAddonEnabled('block-count')).toBe(false); - expect(store.getAddonEnabled('tw-remove-backpack')).toBe(false); - expect(store.getAddonEnabled('tw-remove-feedback')).toBe(false); - - // eslint-disable-next-line max-len - global.localStorage.getItem = () => `{"_":1,"tw-project-info":{"enabled":true},"tw-interface-customization":{"enabled":true,"removeFeedback":true,"removeBackpack":true}}`; - store.readLocalStorage(); - expect(store.getAddonEnabled('block-count')).toBe(true); - expect(store.getAddonEnabled('tw-remove-backpack')).toBe(true); - expect(store.getAddonEnabled('tw-remove-feedback')).toBe(true); -}); - -test('Settings migration 2 -> 3', () => { - const store = new SettingStore(); - - global.localStorage.getItem = () => JSON.stringify({ - '_': 2, - 'hide-flyout': { - enabled: true - } - }); - store.readLocalStorage(); - expect(store.getAddonSetting('hide-flyout', 'toggle')).toBe('hover'); -}); - -test('Settings migration 3 -> 4', () => { - const store = new SettingStore(); - - global.localStorage.getItem = () => JSON.stringify({ - _: 3 - }); - store.readLocalStorage(); - expect(store.getAddonEnabled('editor-devtools')).toBe(true); - expect(store.getAddonEnabled('find-bar')).toBe(true); - expect(store.getAddonEnabled('middle-click-popup')).toBe(true); - - global.localStorage.getItem = () => JSON.stringify({ - '_': 3, - 'editor-devtools': { - enabled: false - } - }); - store.readLocalStorage(); - expect(store.getAddonEnabled('editor-devtools')).toBe(false); - expect(store.getAddonEnabled('find-bar')).toBe(false); - expect(store.getAddonEnabled('middle-click-popup')).toBe(false); -}); - -test('if', () => { - const store = new SettingStore(); - store.setAddonEnabled('editor-devtools', true); - store.setAddonEnabled('onion-skinning', false); - store.setAddonSetting('editor-theme3', 'motion-color', '#000000'); - store.setAddonSetting('editor-theme3', 'looks-color', '#FFFFFF'); - - // eslint-disable-next-line no-undefined - expect(store.evaluateCondition('editor-theme3', undefined)).toBe(true); - expect(store.evaluateCondition('editor-theme3', null)).toBe(true); - expect(store.evaluateCondition('editor-theme3', {})).toBe(true); - - expect(store.evaluateCondition('editor-theme3', { - addonEnabled: ['onion-skinning'] - })).toBe(false); - expect(store.evaluateCondition('editor-theme3', { - addonEnabled: 'onion-skinning' - })).toBe(false); - expect(store.evaluateCondition('editor-theme3', { - addonEnabled: ['editor-devtools'] - })).toBe(true); - expect(store.evaluateCondition('editor-theme3', { - addonEnabled: 'editor-devtools' - })).toBe(true); - expect(store.evaluateCondition('editor-theme3', { - addonEnabled: ['editor-devtools', 'onion-skinning'] - })).toBe(true); - - expect(store.evaluateCondition('editor-theme3', { - settings: {} - })).toBe(true); - expect(store.evaluateCondition('editor-theme3', { - settings: { - 'motion-color': '#000000' - } - })).toBe(true); - expect(store.evaluateCondition('editor-theme3', { - settings: { - 'looks-color': '#FFFFFF' - } - })).toBe(true); - expect(store.evaluateCondition('editor-theme3', { - settings: { - 'looks-color': '#FFFFFE' - } - })).toBe(false); - expect(store.evaluateCondition('editor-theme3', { - settings: { - 'motion-color': '#000000', - 'looks-color': '#FFFFFF' - } - })).toBe(true); - expect(store.evaluateCondition('editor-theme3', { - settings: { - 'motion-color': '#000001', - 'looks-color': '#FFFFFF' - } - })).toBe(false); - - expect(store.evaluateCondition('editor-theme3', { - settings: { - 'looks-color': ['#FFFFFF'] - } - })).toBe(true); - expect(store.evaluateCondition('editor-theme3', { - settings: { - 'looks-color': ['#FFFFFE', '#FFFFFF'] - } - })).toBe(true); - expect(store.evaluateCondition('editor-theme3', { - settings: { - 'looks-color': ['#FFFFFF', '#FFFFFE'] - } - })).toBe(true); - expect(store.evaluateCondition('editor-theme3', { - settings: { - 'looks-color': ['#FFFFFE'] - } - })).toBe(false); - expect(store.evaluateCondition('editor-theme3', { - settings: { - 'looks-color': ['#FFFFFE', '#FFFFFD'] - } - })).toBe(false); - expect(store.evaluateCondition('editor-theme3', { - settings: { - 'looks-color': [] - } - })).toBe(false); - - expect(store.evaluateCondition('editor-theme3', { - addonEnabled: ['editor-devtools'], - settings: { - 'motion-color': '#000000' - } - })).toBe(true); - expect(store.evaluateCondition('editor-theme3', { - addonEnabled: ['onion-skinning'], - settings: { - 'motion-color': '#000000' - } - })).toBe(false); - expect(store.evaluateCondition('editor-theme3', { - addonEnabled: ['editor-devtools'], - settings: { - 'motion-color': '#000001' - } - })).toBe(false); - expect(store.evaluateCondition('editor-theme3', { - addonEnabled: ['onion-skinning'], - settings: { - 'motion-color': '#000001' - } - })).toBe(false); -}); - -test('Settings migration 4 -> 5', () => { - const store = new SettingStore(); - - // implied default settings - global.localStorage.getItem = () => JSON.stringify({ - _: 4 - }); - store.readLocalStorage(); - expect(store.getAddonSetting('fullscreen', 'toolbar')).toBe('show'); - - // also implied default settings - global.localStorage.getItem = () => JSON.stringify({ - _: 4, - fullscreen: {} - }); - store.readLocalStorage(); - expect(store.getAddonSetting('fullscreen', 'toolbar')).toBe('show'); - - // explicit default settings - global.localStorage.getItem = () => JSON.stringify({ - '_': 4, - 'fullscreen': { - hideToolbar: false - } - }); - store.readLocalStorage(); - expect(store.getAddonSetting('fullscreen', 'toolbar')).toBe('show'); - - // explicit hide, implied default hover setting - global.localStorage.getItem = () => JSON.stringify({ - '_': 4, - 'fullscreen': { - hideToolbar: true - } - }); - store.readLocalStorage(); - expect(store.getAddonSetting('fullscreen', 'toolbar')).toBe('hover'); - - // explicit hide and default hover - global.localStorage.getItem = () => JSON.stringify({ - '_': 4, - 'fullscreen': { - hideToolbar: true, - hoverToolbar: true - } - }); - store.readLocalStorage(); - expect(store.getAddonSetting('fullscreen', 'toolbar')).toBe('hover'); - - // explicit hide, no hover - global.localStorage.getItem = () => JSON.stringify({ - '_': 4, - 'fullscreen': { - hideToolbar: true, - hoverToolbar: false - } - }); - store.readLocalStorage(); - expect(store.getAddonSetting('fullscreen', 'toolbar')).toBe('hide'); -}); diff --git a/test/unit/components/__snapshots__/button.test.jsx.snap b/test/unit/components/__snapshots__/button.test.jsx.snap deleted file mode 100644 index a4633420483..00000000000 --- a/test/unit/components/__snapshots__/button.test.jsx.snap +++ /dev/null @@ -1,13 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ButtonComponent matches snapshot 1`] = ` - -

    - -`; diff --git a/test/unit/components/__snapshots__/icon-button.test.jsx.snap b/test/unit/components/__snapshots__/icon-button.test.jsx.snap deleted file mode 100644 index 315390683df..00000000000 --- a/test/unit/components/__snapshots__/icon-button.test.jsx.snap +++ /dev/null @@ -1,22 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`IconButtonComponent matches snapshot 1`] = ` -
    - -
    -
    - Text -
    -
    -
    -`; diff --git a/test/unit/components/__snapshots__/sound-editor.test.jsx.snap b/test/unit/components/__snapshots__/sound-editor.test.jsx.snap deleted file mode 100644 index 877763cf950..00000000000 --- a/test/unit/components/__snapshots__/sound-editor.test.jsx.snap +++ /dev/null @@ -1,565 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Sound Editor Component matches snapshot 1`] = ` -
    -
    -
    - -
    - - -
    -
    -
    -
    - -
    - Copy -
    -
    -
    - -
    - Paste -
    -
    -
    - -
    - Copy to New -
    -
    -
    -
    - -
    - Delete -
    -
    -
    -
    -
    - - - - - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    - -
    - - Faster - -
    -
    -
    - -
    - - Slower - -
    -
    -
    - -
    - - Louder - -
    -
    -
    - -
    - - Softer - -
    -
    -
    - -
    - - Mute - -
    -
    -
    - -
    - - Fade in - -
    -
    -
    - -
    - - Fade out - -
    -
    -
    - -
    - - Reverse - -
    -
    -
    - -
    - - Robot - -
    -
    -
    - -
    - - Echo - -
    -
    -
    -
    -
    -
    - 00:00.30 / 00:00.60 -
    -
    - Hz - - Mono - - (10.51KB) -
    -
    -
    -`; diff --git a/test/unit/components/__snapshots__/sprite-selector-item.test.jsx.snap b/test/unit/components/__snapshots__/sprite-selector-item.test.jsx.snap deleted file mode 100644 index f7f19434a61..00000000000 --- a/test/unit/components/__snapshots__/sprite-selector-item.test.jsx.snap +++ /dev/null @@ -1,179 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`SpriteSelectorItemComponent matches snapshot when given a number and details to show 1`] = ` -
    -
    - 5 -
    -
    -
    - -
    -
    -
    -
    - Pony sprite -
    -
    - 480 x 360 -
    -
    -
    -
    - -
    -
    - -
    -`; - -exports[`SpriteSelectorItemComponent matches snapshot when selected 1`] = ` -
    -
    -
    - -
    -
    -
    -
    - Pony sprite -
    -
    -
    -
    - -
    -
    - -
    -`; diff --git a/test/unit/components/button.test.jsx b/test/unit/components/button.test.jsx deleted file mode 100644 index 5445891ab1e..00000000000 --- a/test/unit/components/button.test.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import {shallow} from 'enzyme'; -import ButtonComponent from '../../../src/components/button/button'; -import renderer from 'react-test-renderer'; - -describe('ButtonComponent', () => { - test('matches snapshot', () => { - const onClick = jest.fn(); - const component = renderer.create( - - ); - expect(component.toJSON()).toMatchSnapshot(); - }); - - test('triggers callback when clicked', () => { - const onClick = jest.fn(); - const componentShallowWrapper = shallow( - - ); - componentShallowWrapper.simulate('click'); - expect(onClick).toHaveBeenCalled(); - }); -}); diff --git a/test/unit/components/cards.test.jsx b/test/unit/components/cards.test.jsx deleted file mode 100644 index 617891e0201..00000000000 --- a/test/unit/components/cards.test.jsx +++ /dev/null @@ -1,62 +0,0 @@ -import React from 'react'; -import {mountWithIntl} from '../../helpers/intl-helpers.jsx'; - -// Mock this utility because it uses dynamic imports that do not work with jest -jest.mock('../../../src/lib/libraries/decks/translate-image.js', () => {}); - -import Cards, {ImageStep, VideoStep} from '../../../src/components/cards/cards.jsx'; - -describe('Cards component', () => { - const defaultProps = () => ({ - activeDeckId: 'id1', - content: { - id1: { - name: 'id1 - name', - img: 'id1 - img', - steps: [{video: 'videoUrl'}] - } - }, - dragging: false, - expanded: true, - isRtl: false, - locale: 'en', - onActivateDeckFactory: jest.fn(), - onCloseCards: jest.fn(), - onDrag: jest.fn(), - onEndDrag: jest.fn(), - onNextStep: jest.fn(), - onPrevStep: jest.fn(), - onShowAll: jest.fn(), - onShrinkExpandCards: jest.fn(), - onStartDrag: jest.fn(), - showVideos: true, - step: 0, - x: 0, - y: 0 - }); - - test('showVideos=true shows the video step', () => { - const component = mountWithIntl( - - ); - expect(component.find(ImageStep).exists()).toEqual(false); - expect(component.find(VideoStep).exists()).toEqual(true); - }); - - test('showVideos=false shows the title image/name instead of video step', () => { - const component = mountWithIntl( - - ); - expect(component.find(VideoStep).exists()).toEqual(false); - - const imageStep = component.find(ImageStep); - expect(imageStep.props().image).toEqual('id1 - img'); - expect(imageStep.props().title).toEqual('id1 - name'); - }); -}); diff --git a/test/unit/components/controls.test.jsx b/test/unit/components/controls.test.jsx deleted file mode 100644 index 78abb474cdd..00000000000 --- a/test/unit/components/controls.test.jsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import {mountWithIntl} from '../../helpers/intl-helpers.jsx'; -import Controls from '../../../src/components/controls/controls'; -import TurboMode from '../../../src/components/turbo-mode/turbo-mode'; -import GreenFlag from '../../../src/components/green-flag/green-flag'; -import StopAll from '../../../src/components/stop-all/stop-all'; - -describe('Controls component', () => { - const defaultProps = () => ({ - active: false, - onGreenFlagClick: jest.fn(), - onStopAllClick: jest.fn(), - turbo: false - }); - - test('shows turbo mode when in turbo mode', () => { - const component = mountWithIntl( - - ); - expect(component.find(TurboMode).exists()).toEqual(false); - component.setProps({turbo: true}); - expect(component.find(TurboMode).exists()).toEqual(true); - }); - - test('triggers the right callbacks when clicked', () => { - const props = defaultProps(); - const component = mountWithIntl( - - ); - component.find(GreenFlag).simulate('click'); - expect(props.onGreenFlagClick).toHaveBeenCalled(); - - component.find(StopAll).simulate('click'); - expect(props.onStopAllClick).toHaveBeenCalled(); - }); -}); diff --git a/test/unit/components/error-boundary-hoc.test.jsx b/test/unit/components/error-boundary-hoc.test.jsx deleted file mode 100644 index 724165ee234..00000000000 --- a/test/unit/components/error-boundary-hoc.test.jsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import {Provider} from 'react-redux'; -const {mountWithIntl} = require('../../helpers/intl-helpers.jsx'); - -import configureStore from 'redux-mock-store'; - -import CrashMessageComponent from '../../../src/components/crash-message/crash-message.jsx'; -import ErrorBoundary from '../../../src/containers/error-boundary.jsx'; - -const ChildComponent = () =>
    hello
    ; - -describe('ErrorBoundary', () => { - const mockStore = configureStore(); - let store; - - beforeEach(() => { - store = mockStore({ - locales: { - isRtl: false, - locale: 'en-US' - } - }); - }); - - test('ErrorBoundary shows children before error and CrashMessageComponent after', () => { - const child = ; - const wrapper = mountWithIntl( - {child} - ); - const errorSite = wrapper.childAt(0).childAt(0); - - // @ts-ignore: 'onReload' prop is absent because this component will only be used for pattern matching - const crashMessagePattern = ; - - expect(wrapper.containsMatchingElement(child)).toBeTruthy(); - expect(wrapper.containsMatchingElement(crashMessagePattern)).toBeFalsy(); - - errorSite.simulateError(new Error('fake error for testing purposes')); - - expect(wrapper.containsMatchingElement(child)).toBeFalsy(); - expect(wrapper.containsMatchingElement(crashMessagePattern)).toBeTruthy(); - }); -}); diff --git a/test/unit/components/icon-button.test.jsx b/test/unit/components/icon-button.test.jsx deleted file mode 100644 index 269dfad76fd..00000000000 --- a/test/unit/components/icon-button.test.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; -import {shallow} from 'enzyme'; -import IconButton from '../../../src/components/icon-button/icon-button'; -import renderer from 'react-test-renderer'; - -describe('IconButtonComponent', () => { - test('matches snapshot', () => { - const onClick = jest.fn(); - const title =
    Text
    ; - const imgSrc = 'imgSrc'; - const className = 'custom-class-name'; - const component = renderer.create( - - ); - expect(component.toJSON()).toMatchSnapshot(); - }); - - test('triggers callback when clicked', () => { - const onClick = jest.fn(); - const title =
    Text
    ; - const imgSrc = 'imgSrc'; - const componentShallowWrapper = shallow( - - ); - componentShallowWrapper.simulate('click'); - expect(onClick).toHaveBeenCalled(); - }); -}); diff --git a/test/unit/components/menu-bar.test.jsx b/test/unit/components/menu-bar.test.jsx deleted file mode 100644 index 7222bcafdac..00000000000 --- a/test/unit/components/menu-bar.test.jsx +++ /dev/null @@ -1,64 +0,0 @@ -describe('no-op', () => { - test('no-op', () => {}); -}); -// tw: these seem to be hopelessly broken to the increasing scope of changes we make to the menu bar, disable for now... -/* -import React from 'react'; -import {mountWithIntl} from '../../helpers/intl-helpers'; -import MenuBar from '../../../src/components/menu-bar/menu-bar'; -import {menuInitialState} from '../../../src/reducers/menus'; -import {LoadingState} from '../../../src/reducers/project-state'; -import {DEFAULT_THEME} from '../../../src/lib/themes'; - -import configureStore from 'redux-mock-store'; -import {Provider} from 'react-redux'; -import VM from 'scratch-vm'; - -describe('MenuBar Component', () => { - const store = configureStore()({ - locales: { - isRtl: false, - locale: 'en-US' - }, - scratchGui: { - menus: menuInitialState, - projectState: { - loadingState: LoadingState.NOT_LOADED - }, - theme: { - theme: DEFAULT_THEME - }, - timeTravel: { - year: 'NOW' - }, - vm: new VM() - } - }); - - const getComponent = function (props = {}) { - return ; - }; - - test('menu bar with no About handler has no About button', () => { - const menuBar = mountWithIntl(getComponent()); - const button = menuBar.find('AboutButton'); - expect(button.exists()).toBe(false); - }); - - test('menu bar with an About handler has an About button', () => { - const onClickAbout = jest.fn(); - const menuBar = mountWithIntl(getComponent({onClickAbout})); - const button = menuBar.find('AboutButton'); - expect(button.exists()).toBe(true); - }); - - test('clicking on About button calls the handler', () => { - const onClickAbout = jest.fn(); - const menuBar = mountWithIntl(getComponent({onClickAbout})); - const button = menuBar.find('AboutButton'); - expect(onClickAbout).toHaveBeenCalledTimes(0); - button.simulate('click'); - expect(onClickAbout).toHaveBeenCalledTimes(1); - }); -}); -*/ diff --git a/test/unit/components/monitor-list.test.jsx b/test/unit/components/monitor-list.test.jsx deleted file mode 100644 index b9576d46423..00000000000 --- a/test/unit/components/monitor-list.test.jsx +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react'; -import {OrderedMap} from 'immutable'; -import configureStore from 'redux-mock-store'; -import {Provider} from 'react-redux'; -import {mountWithIntl} from '../../helpers/intl-helpers.jsx'; -import MonitorList from '../../../src/components/monitor-list/monitor-list.jsx'; -import {DEFAULT_THEME} from '../../../src/lib/themes'; - -describe('MonitorListComponent', () => { - const store = configureStore()({scratchGui: { - monitorLayout: { - monitors: {}, - savedMonitorPositions: {} - }, - theme: { - theme: DEFAULT_THEME - }, - toolbox: { - toolboxXML: '' - }, - vm: { - runtime: { - requestUpdateMonitor: () => {}, - getLabelForOpcode: () => '' - } - } - }}); - const draggable = false; - const onMonitorChange = jest.fn(); - const stageSize = { - width: 100, - height: 100, - widthDefault: 100, - heightDefault: 100 - }; - - let monitors = OrderedMap({}); - - // Wrap this in a function so it gets test specific states and can be reused. - const getComponent = function () { - return ( - - - - ); - }; - - test('it renders the correct step size for discrete sliders', () => { - monitors = OrderedMap({ - id1: { - visible: true, - mode: 'slider', - isDiscrete: true - } - }); - const wrapper = mountWithIntl(getComponent()); - const input = wrapper.find('input'); - expect(input.props().step).toBe(1); - }); - - test('it renders the correct step size for non-discrete sliders', () => { - monitors = OrderedMap({ - id1: { - visible: true, - mode: 'slider', - isDiscrete: false - } - }); - const wrapper = mountWithIntl(getComponent()); - const input = wrapper.find('input'); - expect(input.props().step).toBe(0.01); - }); -}); diff --git a/test/unit/components/monitor.test.jsx b/test/unit/components/monitor.test.jsx deleted file mode 100644 index e52fa603abd..00000000000 --- a/test/unit/components/monitor.test.jsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react'; -import {shallow} from 'enzyme'; -import DefaultMonitor from '../../../src/components/monitor/default-monitor'; -import Monitor from '../../../src/components/monitor/monitor'; -import {DARK_THEME, DEFAULT_THEME} from '../../../src/lib/themes'; - -jest.mock('../../../src/lib/themes/default'); -jest.mock('../../../src/lib/themes/dark'); - -describe('Monitor Component', () => { - test('it selects the correct colors based on default theme', () => { - const noop = () => {}; - - const wrapper = shallow(); - - const defaultMonitor = wrapper.find(DefaultMonitor); - - // selects colors from mock value in src/lib/themes/__mocks__/default-colors.js - expect(defaultMonitor.props().categoryColor).toEqual({background: '#111111', text: '#444444'}); - }); - - test('it selects the correct colors based on dark mode theme', () => { - const noop = () => {}; - - const wrapper = shallow(); - - const defaultMonitor = wrapper.find(DefaultMonitor); - - // selects colors from mock value in src/lib/themes/__mocks__/dark-mode.js - expect(defaultMonitor.props().categoryColor).toEqual({background: '#AAAAAA', text: '#BBBBBB'}); - }); -}); diff --git a/test/unit/components/sound-editor.test.jsx b/test/unit/components/sound-editor.test.jsx deleted file mode 100644 index 81a05563f6c..00000000000 --- a/test/unit/components/sound-editor.test.jsx +++ /dev/null @@ -1,146 +0,0 @@ -import React from 'react'; -import {mountWithIntl, componentWithIntl} from '../../helpers/intl-helpers.jsx'; -import SoundEditor from '../../../src/components/sound-editor/sound-editor'; - -describe('Sound Editor Component', () => { - let props; - beforeEach(() => { - props = { - isStereo: false, - duration: 1, - size: 10507, - canUndo: true, - canRedo: false, - chunkLevels: [1, 2, 3], - name: 'sound name', - playhead: 0.5, - trimStart: 0.2, - trimEnd: 0.8, - onChangeName: jest.fn(), - onDelete: jest.fn(), - onPlay: jest.fn(), - onRedo: jest.fn(), - onReverse: jest.fn(), - onSofter: jest.fn(), - onLouder: jest.fn(), - onRobot: jest.fn(), - onEcho: jest.fn(), - onFaster: jest.fn(), - onSlower: jest.fn(), - onSetTrimEnd: jest.fn(), - onSetTrimStart: jest.fn(), - onStop: jest.fn(), - onUndo: jest.fn() - }; - }); - - test('matches snapshot', () => { - const component = componentWithIntl(); - expect(component.toJSON()).toMatchSnapshot(); - }); - - test('delete button appears when selection is not null', () => { - const wrapper = mountWithIntl( - - ); - wrapper.find('[children="Delete"]').simulate('click'); - expect(props.onDelete).toHaveBeenCalled(); - }); - - test('play button appears when playhead is null', () => { - const wrapper = mountWithIntl( - - ); - wrapper.find('button[title="Play"]').simulate('click'); - expect(props.onPlay).toHaveBeenCalled(); - }); - - test('stop button appears when playhead is not null', () => { - const wrapper = mountWithIntl( - - ); - wrapper.find('button[title="Stop"]').simulate('click'); - expect(props.onStop).toHaveBeenCalled(); - }); - - test('submitting name calls the callback', () => { - const wrapper = mountWithIntl( - - ); - wrapper.find('input') - .simulate('change', {target: {value: 'hello'}}) - .simulate('blur'); - expect(props.onChangeName).toHaveBeenCalled(); - }); - - test('effect buttons call the correct callbacks', () => { - const wrapper = mountWithIntl( - - ); - - wrapper.find('[children="Reverse"]').simulate('click'); - expect(props.onReverse).toHaveBeenCalled(); - - wrapper.find('[children="Robot"]').simulate('click'); - expect(props.onRobot).toHaveBeenCalled(); - - wrapper.find('[children="Faster"]').simulate('click'); - expect(props.onFaster).toHaveBeenCalled(); - - wrapper.find('[children="Slower"]').simulate('click'); - expect(props.onSlower).toHaveBeenCalled(); - - wrapper.find('[children="Louder"]').simulate('click'); - expect(props.onLouder).toHaveBeenCalled(); - - wrapper.find('[children="Softer"]').simulate('click'); - expect(props.onSofter).toHaveBeenCalled(); - }); - - test('undo and redo buttons can be disabled by canUndo/canRedo', () => { - let wrapper = mountWithIntl( - - ); - expect(wrapper.find('button[title="Undo"]').prop('disabled')).toBe(false); - expect(wrapper.find('button[title="Redo"]').prop('disabled')).toBe(true); - - wrapper = mountWithIntl( - - ); - expect(wrapper.find('button[title="Undo"]').prop('disabled')).toBe(true); - expect(wrapper.find('button[title="Redo"]').prop('disabled')).toBe(false); - }); - - test.skip('undo/redo buttons call the correct callback', () => { - const wrapper = mountWithIntl( - - ); - wrapper.find('button[title="Undo"]').simulate('click'); - expect(props.onUndo).toHaveBeenCalled(); - - wrapper.find('button[title="Redo"]').simulate('click'); - expect(props.onRedo).toHaveBeenCalled(); - }); -}); diff --git a/test/unit/components/sprite-selector-item.test.jsx b/test/unit/components/sprite-selector-item.test.jsx deleted file mode 100644 index fb103b4efc9..00000000000 --- a/test/unit/components/sprite-selector-item.test.jsx +++ /dev/null @@ -1,83 +0,0 @@ -import React from 'react'; -import {mountWithIntl, shallowWithIntl, componentWithIntl} from '../../helpers/intl-helpers.jsx'; -import SpriteSelectorItemComponent from '../../../src/components/sprite-selector-item/sprite-selector-item'; -import DeleteButton from '../../../src/components/delete-button/delete-button'; - -describe('SpriteSelectorItemComponent', () => { - let className; - let costumeURL; - let name; - let onClick; - let onDeleteButtonClick; - let selected; - let number; - let details; - - // Wrap this in a function so it gets test specific states and can be reused. - const getComponent = function () { - return ( - - ); - }; - - beforeEach(() => { - className = 'ponies'; - costumeURL = 'https://scratch.mit.edu/foo/bar/pony'; - name = 'Pony sprite'; - onClick = jest.fn(); - onDeleteButtonClick = jest.fn(); - selected = true; - // Reset to undefined since they are optional props - number = undefined; // eslint-disable-line no-undefined - details = undefined; // eslint-disable-line no-undefined - }); - - test('matches snapshot when selected', () => { - const component = componentWithIntl(getComponent()); - expect(component.toJSON()).toMatchSnapshot(); - }); - - test('matches snapshot when given a number and details to show', () => { - number = 5; - details = '480 x 360'; - const component = componentWithIntl(getComponent()); - expect(component.toJSON()).toMatchSnapshot(); - }); - - test('does not have a close box when not selected', () => { - selected = false; - const wrapper = shallowWithIntl(getComponent()); - expect(wrapper.find(DeleteButton).exists()).toBe(false); - }); - - test('triggers callback when Box component is clicked', () => { - // Use `mount` here because of the way ContextMenuTrigger consumes onClick - const wrapper = mountWithIntl(getComponent()); - wrapper.simulate('click'); - expect(onClick).toHaveBeenCalled(); - }); - - test('triggers callback when CloseButton component is clicked', () => { - const wrapper = shallowWithIntl(getComponent()); - wrapper.find(DeleteButton).simulate('click'); - expect(onDeleteButtonClick).toHaveBeenCalled(); - }); - - test('it has a context menu with delete menu item and callback', () => { - const wrapper = mountWithIntl(getComponent()); - const contextMenu = wrapper.find('ContextMenu'); - expect(contextMenu.exists()).toBe(true); - - contextMenu.find('[children="delete"]').simulate('click'); - expect(onDeleteButtonClick).toHaveBeenCalled(); - }); -}); diff --git a/test/unit/components/toggle-buttons.test.jsx b/test/unit/components/toggle-buttons.test.jsx deleted file mode 100644 index 547852461af..00000000000 --- a/test/unit/components/toggle-buttons.test.jsx +++ /dev/null @@ -1,52 +0,0 @@ -import React from 'react'; -import {shallow} from 'enzyme'; -import ToggleButtons from '../../../src/components/toggle-buttons/toggle-buttons'; - -describe('ToggleButtons', () => { - test('renders multiple buttons', () => { - const component = shallow( {}, - icon: 'Button 1 icon' - }, - { - title: 'Button 2', - handleClick: () => {}, - icon: 'Button 2 icon' - } - ]} - />); - - const buttons = component.find('button'); - - expect(buttons).toHaveLength(2); - expect(buttons.get(0).props.title).toBe('Button 1'); - expect(buttons.get(1).props.title).toBe('Button 2'); - }); - - test('calls correct click handler', () => { - const onClick1 = jest.fn(); - const onClick2 = jest.fn(); - const component = shallow(); - const button2 = component.find('button[title="Button 2"]'); - button2.simulate('click'); - - expect(onClick2).toHaveBeenCalled(); - expect(onClick1).not.toHaveBeenCalled(); - }); -}); diff --git a/test/unit/containers/menu-bar-hoc.test.jsx b/test/unit/containers/menu-bar-hoc.test.jsx deleted file mode 100644 index 4010665849e..00000000000 --- a/test/unit/containers/menu-bar-hoc.test.jsx +++ /dev/null @@ -1,170 +0,0 @@ -describe('no-op', () => { - test('no-op', () => {}); -}); -// tw: these seem to be hopelessly broken to the increasing scope of changes we make to the menu bar, disable for now... -/* -import React from 'react'; -import {mount} from 'enzyme'; -import configureStore from 'redux-mock-store'; -import MenuBarHOC from '../../../src/containers/menu-bar-hoc.jsx'; - -describe('Menu Bar HOC', () => { - const mockStore = configureStore(); - let store; - - beforeEach(() => { - store = mockStore({ - scratchGui: { - projectChanged: true - } - }); - }); - - test('Logged in user who IS owner and HAS changed project will NOT be prompted to save', () => { - const Component = () => (
    ); - const WrappedComponent = MenuBarHOC(Component); - const wrapper = mount( - (false)} // eslint-disable-line react/jsx-no-bind - store={store} - /> - ); - const child = wrapper.find(Component); - expect(child.props().projectChanged).toBeUndefined(); - expect(child.props().confirmReadyToReplaceProject('message')).toBe(true); - }); - - test('Logged in user who IS owner and has NOT changed project will NOT be prompted to save', () => { - const Component = () => (
    ); - const WrappedComponent = MenuBarHOC(Component); - const wrapper = mount( - (false)} // eslint-disable-line react/jsx-no-bind - projectChanged={false} - store={store} - /> - ); - const child = wrapper.find(Component); - expect(child.props().projectChanged).toBeUndefined(); - expect(child.props().confirmReadyToReplaceProject('message')).toBe(true); - }); - - test('Logged in user who is NOT owner and HAS changed project will NOT be prompted to save', () => { - const Component = () => (
    ); - const WrappedComponent = MenuBarHOC(Component); - const wrapper = mount( - (false)} // eslint-disable-line react/jsx-no-bind - store={store} - /> - ); - const child = wrapper.find(Component); - expect(child.props().projectChanged).toBeUndefined(); - expect(child.props().confirmReadyToReplaceProject('message')).toBe(true); - }); - - test('Logged OUT user who HAS changed project WILL be prompted to save', () => { - const Component = () => (
    ); - const WrappedComponent = MenuBarHOC(Component); - const wrapper = mount( - (false)} // eslint-disable-line react/jsx-no-bind - store={store} - /> - ); - const child = wrapper.find(Component); - expect(child.props().projectChanged).toBeUndefined(); - expect(child.props().confirmReadyToReplaceProject('message')).toBe(false); - }); - - test('Logged OUT user who has NOT changed project WILL NOT be prompted to save', () => { - const Component = () => (
    ); - const WrappedComponent = MenuBarHOC(Component); - const wrapper = mount( - (false)} // eslint-disable-line react/jsx-no-bind - projectChanged={false} - store={store} - /> - ); - const child = wrapper.find(Component); - expect(child.props().projectChanged).toBeUndefined(); - expect(child.props().confirmReadyToReplaceProject('message')).toBe(true); - }); - - test('Logged in user who IS owner and HAS changed project SHOULD save before transition to project page', () => { - const Component = () => (
    ); - const WrappedComponent = MenuBarHOC(Component); - const wrapper = mount( - - ); - const child = wrapper.find(Component); - expect(child.props().projectChanged).toBeUndefined(); - expect(child.props().shouldSaveBeforeTransition()).toBe(true); - }); - - test('Logged in user who IS owner and has NOT changed project should NOT save before transition', () => { - const Component = () => (
    ); - const WrappedComponent = MenuBarHOC(Component); - const wrapper = mount( - - ); - const child = wrapper.find(Component); - expect(child.props().projectChanged).toBeUndefined(); - expect(child.props().shouldSaveBeforeTransition()).toBe(false); - }); - - test('Logged in user who is NOT owner and HAS changed project should NOT save before transition', () => { - const Component = () => (
    ); - const WrappedComponent = MenuBarHOC(Component); - const wrapper = mount( - - ); - const child = wrapper.find(Component); - expect(child.props().projectChanged).toBeUndefined(); - expect(child.props().shouldSaveBeforeTransition()).toBe(false); - }); - - test('Logged in user who is NOT owner and has NOT changed project should NOT save before transition', () => { - const Component = () => (
    ); - const WrappedComponent = MenuBarHOC(Component); - const wrapper = mount( - - ); - const child = wrapper.find(Component); - expect(child.props().projectChanged).toBeUndefined(); - expect(child.props().shouldSaveBeforeTransition()).toBe(false); - }); - -}); -*/ diff --git a/test/unit/containers/save-status.test.jsx b/test/unit/containers/save-status.test.jsx deleted file mode 100644 index c426864d4e3..00000000000 --- a/test/unit/containers/save-status.test.jsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import {Provider} from 'react-redux'; -import configureStore from 'redux-mock-store'; -import {mountWithIntl} from '../../helpers/intl-helpers.jsx'; -import SaveStatus from '../../../src/components/menu-bar/save-status.jsx'; -import InlineMessages from '../../../src/containers/inline-messages.jsx'; -import {AlertTypes} from '../../../src/lib/alerts/index.jsx'; - -// Stub the manualUpdateProject action creator for later testing -jest.mock('../../../src/reducers/project-state', () => ({ - manualUpdateProject: jest.fn(() => ({type: 'stubbed'})) -})); - -describe('SaveStatus container', () => { - const mockStore = configureStore(); - - test('if there are inline messages, they are shown instead of save now', () => { - const store = mockStore({ - scratchGui: { - projectChanged: true, - alerts: { - alertsList: [ - {alertId: 'saveSuccess', alertType: AlertTypes.INLINE} - ] - } - } - }); - const wrapper = mountWithIntl( - - - - ); - expect(wrapper.find(InlineMessages).exists()).toBe(true); - expect(wrapper.contains('Save Now')).not.toBe(true); - }); - - test('save now is shown if there are project changes and no inline messages', () => { - const store = mockStore({ - scratchGui: { - projectChanged: true, - alerts: { - alertsList: [] - } - } - }); - const wrapper = mountWithIntl( - - - - ); - expect(wrapper.find(InlineMessages).exists()).not.toBe(true); - expect(wrapper.contains('Save Now')).toBe(true); - - // Clicking save now should dispatch the manualUpdateProject action (stubbed above) - wrapper.find('[children="Save Now"]').simulate('click'); - expect(store.getActions()[0].type).toEqual('stubbed'); - }); - - test('neither is shown if there are no project changes or inline messages', () => { - const store = mockStore({ - scratchGui: { - projectChanged: false, - alerts: { - alertsList: [] - } - } - }); - const wrapper = mountWithIntl( - - - - ); - expect(wrapper.find(InlineMessages).exists()).not.toBe(true); - expect(wrapper.contains('Save Now')).not.toBe(true); - }); -}); diff --git a/test/unit/containers/slider-prompt.test.jsx b/test/unit/containers/slider-prompt.test.jsx deleted file mode 100644 index 0c96c50267c..00000000000 --- a/test/unit/containers/slider-prompt.test.jsx +++ /dev/null @@ -1,111 +0,0 @@ -import React from 'react'; -import {shallow} from 'enzyme'; -import SliderPrompt from '../../../src/containers/slider-prompt.jsx'; -import SliderPromptComponent from '../../../src/components/slider-prompt/slider-prompt.jsx'; - -describe('Slider Prompt Container', () => { - let onCancel; - let onOk; - - beforeEach(() => { - onCancel = jest.fn(); - onOk = jest.fn(); - }); - - test('Min/max are shown with decimal when isDiscrete is false', () => { - const wrapper = shallow( - - ); - const componentProps = wrapper.find(SliderPromptComponent).props(); - expect(componentProps.minValue).toBe('0.00'); - expect(componentProps.maxValue).toBe('100.00'); - }); - - test('Min/max are NOT shown with decimal when isDiscrete is true', () => { - const wrapper = shallow( - - ); - const componentProps = wrapper.find(SliderPromptComponent).props(); - expect(componentProps.minValue).toBe('0'); - expect(componentProps.maxValue).toBe('100'); - }); - - test('Entering a number with a decimal submits with isDiscrete=false', () => { - const wrapper = shallow( - - ); - const componentProps = wrapper.find(SliderPromptComponent).props(); - componentProps.onChangeMin({target: {value: '1.0'}}); - componentProps.onOk(); - expect(onOk).toHaveBeenCalledWith(1, 100, false); - }); - - test('Entering integers submits with isDiscrete=true', () => { - const wrapper = shallow( - - ); - const componentProps = wrapper.find(SliderPromptComponent).props(); - componentProps.onChangeMin({target: {value: '1'}}); - componentProps.onChangeMax({target: {value: '2'}}); - componentProps.onOk(); - expect(onOk).toHaveBeenCalledWith(1, 2, true); - }); - - test('Enter button submits the form', () => { - const wrapper = shallow( - - ); - const componentProps = wrapper.find(SliderPromptComponent).props(); - componentProps.onChangeMin({target: {value: '1'}}); - componentProps.onChangeMax({target: {value: '2'}}); - componentProps.onKeyPress({key: 'Enter'}); - expect(onOk).toHaveBeenCalledWith(1, 2, true); - }); - - test('Validates number-ness before submitting', () => { - const wrapper = shallow( - - ); - const componentProps = wrapper.find(SliderPromptComponent).props(); - componentProps.onChangeMin({target: {value: 'hello'}}); - componentProps.onOk(); - expect(onOk).not.toHaveBeenCalled(); - expect(onCancel).toHaveBeenCalled(); - }); -}); diff --git a/test/unit/containers/sound-editor.test.jsx b/test/unit/containers/sound-editor.test.jsx deleted file mode 100644 index 53f6e374f3c..00000000000 --- a/test/unit/containers/sound-editor.test.jsx +++ /dev/null @@ -1,306 +0,0 @@ -import React from 'react'; -import {mountWithIntl} from '../../helpers/intl-helpers.jsx'; -import configureStore from 'redux-mock-store'; -import mockAudioBufferPlayer from '../../__mocks__/audio-buffer-player.js'; -import mockAudioEffects from '../../__mocks__/audio-effects.js'; - -import SoundEditor from '../../../src/containers/sound-editor'; -import SoundEditorComponent from '../../../src/components/sound-editor/sound-editor'; - -jest.mock('react-ga'); -jest.mock('../../../src/lib/audio/audio-buffer-player', () => mockAudioBufferPlayer); -jest.mock('../../../src/lib/audio/audio-effects', () => mockAudioEffects); - -describe('Sound Editor Container', () => { - const mockStore = configureStore(); - let store; - let soundIndex; - let soundBuffer; - const samples = new Float32Array([0, 0, 0]); // eslint-disable-line no-undef - let vm; - - beforeEach(() => { - soundIndex = 0; - soundBuffer = { - numberOfChannels: 1, - sampleRate: 0, - getChannelData: jest.fn(() => samples) - }; - vm = { - getSoundBuffer: jest.fn(() => soundBuffer), - renameSound: jest.fn(), - updateSoundBuffer: jest.fn(), - editingTarget: { - sprite: { - sounds: [{name: 'first name', id: 'first id'}] - } - } - }; - store = mockStore({scratchGui: {vm: vm, mode: {isFullScreen: false}}}); - }); - - test('should pass the correct data to the component from the store', () => { - const wrapper = mountWithIntl( - - ); - const componentProps = wrapper.find(SoundEditorComponent).props(); - // Data retreived and processed by the `connect` with the store - expect(componentProps.name).toEqual('first name'); - expect(componentProps.chunkLevels).toEqual([0]); - expect(mockAudioBufferPlayer.instance.samples).toEqual(samples); - // Initial data - expect(componentProps.playhead).toEqual(null); - expect(componentProps.trimStart).toEqual(null); - expect(componentProps.trimEnd).toEqual(null); - - }); - - test('it plays when clicked and stops when clicked again', () => { - const wrapper = mountWithIntl( - - ); - let component = wrapper.find(SoundEditorComponent); - // Ensure rendering doesn't start playing any sounds - expect(mockAudioBufferPlayer.instance.play.mock.calls).toEqual([]); - expect(mockAudioBufferPlayer.instance.stop.mock.calls).toEqual([]); - - component.props().onPlay(); - expect(mockAudioBufferPlayer.instance.play).toHaveBeenCalled(); - - // Mock the audio buffer player calling onUpdate - mockAudioBufferPlayer.instance.onUpdate(0.5); - wrapper.update(); - component = wrapper.find(SoundEditorComponent); - expect(component.props().playhead).toEqual(0.5); - - component.props().onStop(); - wrapper.update(); - component = wrapper.find(SoundEditorComponent); - expect(mockAudioBufferPlayer.instance.stop).toHaveBeenCalled(); - expect(component.props().playhead).toEqual(null); - }); - - test('it submits name changes to the vm', () => { - const wrapper = mountWithIntl( - - ); - const component = wrapper.find(SoundEditorComponent); - component.props().onChangeName('hello'); - expect(vm.renameSound).toHaveBeenCalledWith(soundIndex, 'hello'); - }); - - test('it handles an effect by submitting the result and playing', async () => { - const wrapper = mountWithIntl( - - ); - const component = wrapper.find(SoundEditorComponent); - component.props().onReverse(); // Could be any of the effects, just testing the end result - await mockAudioEffects.instance._finishProcessing(soundBuffer); - expect(mockAudioBufferPlayer.instance.play).toHaveBeenCalled(); - expect(vm.updateSoundBuffer).toHaveBeenCalled(); - }); - - test('it handles reverse effect correctly', () => { - const wrapper = mountWithIntl( - - ); - const component = wrapper.find(SoundEditorComponent); - component.props().onReverse(); - expect(mockAudioEffects.instance.name).toEqual(mockAudioEffects.effectTypes.REVERSE); - expect(mockAudioEffects.instance.process).toHaveBeenCalled(); - }); - - test('it handles louder effect correctly', () => { - const wrapper = mountWithIntl( - - ); - const component = wrapper.find(SoundEditorComponent); - component.props().onLouder(); - expect(mockAudioEffects.instance.name).toEqual(mockAudioEffects.effectTypes.LOUDER); - expect(mockAudioEffects.instance.process).toHaveBeenCalled(); - }); - - test('it handles softer effect correctly', () => { - const wrapper = mountWithIntl( - - ); - const component = wrapper.find(SoundEditorComponent); - component.props().onSofter(); - expect(mockAudioEffects.instance.name).toEqual(mockAudioEffects.effectTypes.SOFTER); - expect(mockAudioEffects.instance.process).toHaveBeenCalled(); - }); - - test('it handles faster effect correctly', () => { - const wrapper = mountWithIntl( - - ); - const component = wrapper.find(SoundEditorComponent); - component.props().onFaster(); - expect(mockAudioEffects.instance.name).toEqual(mockAudioEffects.effectTypes.FASTER); - expect(mockAudioEffects.instance.process).toHaveBeenCalled(); - }); - - test('it handles slower effect correctly', () => { - const wrapper = mountWithIntl( - - ); - const component = wrapper.find(SoundEditorComponent); - component.props().onSlower(); - expect(mockAudioEffects.instance.name).toEqual(mockAudioEffects.effectTypes.SLOWER); - expect(mockAudioEffects.instance.process).toHaveBeenCalled(); - }); - - test('it handles echo effect correctly', () => { - const wrapper = mountWithIntl( - - ); - const component = wrapper.find(SoundEditorComponent); - component.props().onEcho(); - expect(mockAudioEffects.instance.name).toEqual(mockAudioEffects.effectTypes.ECHO); - expect(mockAudioEffects.instance.process).toHaveBeenCalled(); - }); - - test('it handles robot effect correctly', () => { - const wrapper = mountWithIntl( - - ); - const component = wrapper.find(SoundEditorComponent); - component.props().onRobot(); - expect(mockAudioEffects.instance.name).toEqual(mockAudioEffects.effectTypes.ROBOT); - expect(mockAudioEffects.instance.process).toHaveBeenCalled(); - }); - - test('undo/redo stack state', async () => { - const wrapper = mountWithIntl( - - ); - let component = wrapper.find(SoundEditorComponent); - // Undo and redo should be disabled initially - expect(component.prop('canUndo')).toEqual(false); - expect(component.prop('canRedo')).toEqual(false); - - // Submitting new samples should make it possible to undo - component.props().onFaster(); - await mockAudioEffects.instance._finishProcessing(soundBuffer); - wrapper.update(); - component = wrapper.find(SoundEditorComponent); - expect(component.prop('canUndo')).toEqual(true); - expect(component.prop('canRedo')).toEqual(false); - - // Undoing should make it possible to redo and not possible to undo again - await component.props().onUndo(); - wrapper.update(); - component = wrapper.find(SoundEditorComponent); - expect(component.prop('canUndo')).toEqual(false); - expect(component.prop('canRedo')).toEqual(true); - - // Redoing should make it possible to undo and not possible to redo again - await component.props().onRedo(); - wrapper.update(); - component = wrapper.find(SoundEditorComponent); - expect(component.prop('canUndo')).toEqual(true); - expect(component.prop('canRedo')).toEqual(false); - - // New submission should clear the redo stack - await component.props().onUndo(); // Undo to go back to a state where redo is enabled - wrapper.update(); - component = wrapper.find(SoundEditorComponent); - expect(component.prop('canRedo')).toEqual(true); - component.props().onFaster(); - await mockAudioEffects.instance._finishProcessing(soundBuffer); - - wrapper.update(); - component = wrapper.find(SoundEditorComponent); - expect(component.prop('canRedo')).toEqual(false); - }); - - test('undo and redo submit new samples and play the sound', async () => { - const wrapper = mountWithIntl( - - ); - let component = wrapper.find(SoundEditorComponent); - - // Set up an undoable state - component.props().onFaster(); - await mockAudioEffects.instance._finishProcessing(soundBuffer); - wrapper.update(); - component = wrapper.find(SoundEditorComponent); - - // Undo should update the sound buffer and play the new samples - await component.props().onUndo(); - expect(mockAudioBufferPlayer.instance.play).toHaveBeenCalled(); - expect(vm.updateSoundBuffer).toHaveBeenCalled(); - - // Clear the mocks call history to assert again for redo. - vm.updateSoundBuffer.mockClear(); - mockAudioBufferPlayer.instance.play.mockClear(); - - // Undo should update the sound buffer and play the new samples - await component.props().onRedo(); - expect(mockAudioBufferPlayer.instance.play).toHaveBeenCalled(); - expect(vm.updateSoundBuffer).toHaveBeenCalled(); - }); - - test('isStereo numberOfChannels=1', () => { - soundBuffer.numberOfChannels = 1; - const wrapper = mountWithIntl( - - ); - const component = wrapper.find(SoundEditorComponent); - expect(component.props().isStereo).toEqual(false); - }); - - test('isStereo numberOfChannels=2', () => { - soundBuffer.numberOfChannels = 2; - const wrapper = mountWithIntl( - - ); - const component = wrapper.find(SoundEditorComponent); - expect(component.props().isStereo).toEqual(true); - }); -}); diff --git a/test/unit/containers/sprite-selector-item.test.jsx b/test/unit/containers/sprite-selector-item.test.jsx deleted file mode 100644 index 89018f5ef36..00000000000 --- a/test/unit/containers/sprite-selector-item.test.jsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react'; -import {mountWithIntl} from '../../helpers/intl-helpers.jsx'; -import configureStore from 'redux-mock-store'; -import {Provider} from 'react-redux'; - -import SpriteSelectorItem from '../../../src/containers/sprite-selector-item'; -import DeleteButton from '../../../src/components/delete-button/delete-button'; - -describe('SpriteSelectorItem Container', () => { - const mockStore = configureStore(); - let className; - let costumeURL; - let name; - let onClick; - let dispatchSetHoveredSprite; - let onDeleteButtonClick; - let selected; - let id; - let store; - // Wrap this in a function so it gets test specific states and can be reused. - const getContainer = function () { - return ( - - - - ); - }; - - beforeEach(() => { - store = mockStore({scratchGui: { - hoveredTarget: {receivedBlocks: false, sprite: null}, - assetDrag: {dragging: false} - }}); - className = 'ponies'; - costumeURL = 'https://scratch.mit.edu/foo/bar/pony'; - id = 1337; - name = 'Pony sprite'; - onClick = jest.fn(); - onDeleteButtonClick = jest.fn(); - dispatchSetHoveredSprite = jest.fn(); - selected = true; - }); - - test('should delete the sprite', () => { - const wrapper = mountWithIntl(getContainer()); - wrapper.find(DeleteButton).simulate('click'); - expect(onDeleteButtonClick).toHaveBeenCalledWith(1337); - }); -}); diff --git a/test/unit/reducers/alerts-reducer.test.js b/test/unit/reducers/alerts-reducer.test.js deleted file mode 100644 index 8048d5aef6e..00000000000 --- a/test/unit/reducers/alerts-reducer.test.js +++ /dev/null @@ -1,208 +0,0 @@ -// TODO: add tests of extension alerts - -/* eslint-env jest */ -import {AlertTypes, AlertLevels} from '../../../src/lib/alerts/index.jsx'; -import alertsReducer, { - closeAlert, - closeAlertWithId, - filterInlineAlerts, - filterPopupAlerts, - showStandardAlert -} from '../../../src/reducers/alerts'; - -test('initialState', () => { - let defaultState; - /* alertsReducer(state, action) */ - expect(alertsReducer(defaultState, {type: 'anything'})).toBeDefined(); - expect(alertsReducer(defaultState, {type: 'anything'}).visible).toBe(true); - expect(alertsReducer(defaultState, {type: 'anything'}).alertsList).toEqual([]); -}); - -test('create one standard alert', () => { - let defaultState; - const action = showStandardAlert('creating'); - const resultState = alertsReducer(defaultState, action); - expect(resultState.alertsList.length).toBe(1); - expect(resultState.alertsList[0].alertId).toBe('creating'); - expect(resultState.alertsList[0].alertType).toBe(AlertTypes.STANDARD); - expect(resultState.alertsList[0].level).toBe(AlertLevels.SUCCESS); -}); - -test('add several standard alerts', () => { - const initialState = { - visible: true, - alertsList: [ - { - alertId: 'saving', - alertType: AlertTypes.INLINE, - level: AlertLevels.SUCCESS, - content: null, - iconURL: '/no_image_here.jpg' - } - ] - }; - const action = showStandardAlert('creating'); - let resultState = alertsReducer(initialState, action); - resultState = alertsReducer(resultState, action); - resultState = alertsReducer(resultState, action); - expect(resultState.alertsList.length).toBe(1); - expect(resultState.alertsList[0].alertType).toBe(AlertTypes.STANDARD); - expect(resultState.alertsList[0].iconURL).not.toBe('/no_image_here.jpg'); - expect(resultState.alertsList[0].alertId).toBe('creating'); -}); - -test('create one inline alert message', () => { - let defaultState; - const action = showStandardAlert('saving'); - const resultState = alertsReducer(defaultState, action); - expect(resultState.alertsList.length).toBe(1); - expect(resultState.alertsList[0].alertId).toBe('saving'); - expect(resultState.alertsList[0].alertType).toBe(AlertTypes.INLINE); - expect(resultState.alertsList[0].level).toBe(AlertLevels.INFO); -}); - -test('can close alerts by index', () => { - const initialState = { - visible: true, - alertsList: [ - { - alertId: 'saving', - alertType: AlertTypes.INLINE, - level: AlertLevels.SUCCESS, - content: null, - iconURL: '/no_image_here.jpg' - } - ] - }; - const closeAction = closeAlert(0); - let resultState = alertsReducer(initialState, closeAction); - expect(resultState.alertsList.length).toBe(0); - const createAction = showStandardAlert('creating'); - resultState = alertsReducer(resultState, createAction); - expect(resultState.alertsList.length).toBe(1); - resultState = alertsReducer(initialState, closeAction); - expect(resultState.alertsList.length).toBe(0); - resultState = alertsReducer(resultState, createAction); -}); - -test('can close a single alert by id', () => { - const initialState = { - visible: true, - alertsList: [ - {alertId: 'saving'}, - {alertId: 'creating'}, - {alertId: 'saving'}, - {alertId: 'saving'} - ] - }; - const closeAction = closeAlertWithId('saving'); - let resultState = alertsReducer(initialState, closeAction); - expect(resultState.alertsList.map(a => a.alertId)).toEqual([ - 'creating', 'saving', 'saving' - ]); - resultState = alertsReducer(resultState, closeAction); - expect(resultState.alertsList.map(a => a.alertId)).toEqual([ - 'creating', 'saving' - ]); - resultState = alertsReducer(resultState, closeAction); - expect(resultState.alertsList.map(a => a.alertId)).toEqual([ - 'creating' - ]); - resultState = alertsReducer(resultState, closeAction); - expect(resultState.alertsList.map(a => a.alertId)).toEqual([ - 'creating' - ]); -}); - -test('related alerts can clear each other', () => { - const initialState = { - visible: true, - alertsList: [ - { - alertId: 'saving', - alertType: AlertTypes.INLINE, - level: AlertLevels.SUCCESS, - content: null, - iconURL: '/no_image_here.jpg' - }, - { - alertId: 'creating', - alertType: AlertTypes.STANDARD, - level: AlertLevels.SUCCESS, - content: null, - iconURL: '/no_image_here.jpg' - } - ] - }; - const action = showStandardAlert('saveSuccess'); - const resultState = alertsReducer(initialState, action); - expect(resultState.alertsList.length).toBe(2); - expect(resultState.alertsList[0].alertId).toBe('creating'); - expect(resultState.alertsList[1].alertId).toBe('saveSuccess'); -}); - -test('several related alerts can be cleared at once', () => { - const initialState = { - visible: true, - alertsList: [] - }; - const createAction = showStandardAlert('creating'); - let resultState = alertsReducer(initialState, createAction); - resultState = alertsReducer(resultState, createAction); - resultState = alertsReducer(resultState, createAction); - const createSuccessAction = showStandardAlert('createSuccess'); - resultState = alertsReducer(resultState, createSuccessAction); - expect(resultState.alertsList.length).toBe(1); - expect(resultState.alertsList[0].alertId).toBe('createSuccess'); -}); - -test('filterInlineAlerts only returns inline type alerts', () => { - const alerts = [ - { - alertId: 'extension', - alertType: AlertTypes.EXTENSION - }, - { - alertId: 'inline', - alertType: AlertTypes.INLINE - }, - { - alertId: 'standard', - alertType: AlertTypes.STANDARD - }, - { - alertId: 'non-existent type', - alertType: 'wirly-burly' - } - ]; - - const filtered = filterInlineAlerts(alerts); - expect(filtered.length).toEqual(1); - expect(filtered[0].alertId).toEqual('inline'); -}); - -test('filterPopupAlerts returns standard and extension type alerts', () => { - const alerts = [ - { - alertId: 'extension', - alertType: AlertTypes.EXTENSION - }, - { - alertId: 'inline', - alertType: AlertTypes.INLINE - }, - { - alertId: 'standard', - alertType: AlertTypes.STANDARD - }, - { - alertId: 'non-existent type', - alertType: 'wirly-burly' - } - ]; - - const filtered = filterPopupAlerts(alerts); - expect(filtered.length).toEqual(2); - expect(filtered[0].alertId).toEqual('extension'); - expect(filtered[1].alertId).toEqual('standard'); -}); diff --git a/test/unit/reducers/mode-reducer.test.js b/test/unit/reducers/mode-reducer.test.js deleted file mode 100644 index 641398f2d5c..00000000000 --- a/test/unit/reducers/mode-reducer.test.js +++ /dev/null @@ -1,53 +0,0 @@ -/* eslint-env jest */ -import modeReducer from '../../../src/reducers/mode'; - -const SET_FULL_SCREEN = 'scratch-gui/mode/SET_FULL_SCREEN'; -const SET_PLAYER = 'scratch-gui/mode/SET_PLAYER'; - -test('initialState', () => { - let defaultState; - /* modeReducer(state, action) */ - expect(modeReducer(defaultState, {type: 'anything'})).toBeDefined(); -}); - -test('set full screen mode', () => { - const previousState = { - showBranding: false, - isFullScreen: false, - isPlayerOnly: false, - hasEverEnteredEditor: true - }; - const action = { - type: SET_FULL_SCREEN, - isFullScreen: true - }; - const newState = { - showBranding: false, - isFullScreen: true, - isPlayerOnly: false, - hasEverEnteredEditor: true - }; - /* modeReducer(state, action) */ - expect(modeReducer(previousState, action)).toEqual(newState); -}); - -test('set player mode', () => { - const previousState = { - showBranding: false, - isFullScreen: false, - isPlayerOnly: false, - hasEverEnteredEditor: true - }; - const action = { - type: SET_PLAYER, - isPlayerOnly: true - }; - const newState = { - showBranding: false, - isFullScreen: false, - isPlayerOnly: true, - hasEverEnteredEditor: true - }; - /* modeReducer(state, action) */ - expect(modeReducer(previousState, action)).toEqual(newState); -}); diff --git a/test/unit/reducers/monitor-layout-reducer.test.js b/test/unit/reducers/monitor-layout-reducer.test.js deleted file mode 100644 index 8aa01266c5a..00000000000 --- a/test/unit/reducers/monitor-layout-reducer.test.js +++ /dev/null @@ -1,302 +0,0 @@ -/* eslint-env jest */ -import monitorLayoutReducer, { - addMonitorRect, moveMonitorRect, - resizeMonitorRect, removeMonitorRect, - getInitialPosition, PADDING, SCREEN_WIDTH, SCREEN_HEIGHT -} from '../../../src/reducers/monitor-layout'; - -test('initialState', () => { - let defaultState; - - expect(monitorLayoutReducer(defaultState /* state */, {type: 'anything'} /* action */)).toBeDefined(); - expect(monitorLayoutReducer(defaultState /* state */, {type: 'anything'} /* action */).monitors).toBeDefined(); - expect(monitorLayoutReducer(defaultState /* state */, {type: 'anything'} /* action */).savedMonitorPositions) - .toBeDefined(); -}); - -test('addMonitorRect', () => { - let defaultState; - const monitorId = 1; - const monitorId2 = 2; - const upperStart = {x: 100, y: 100}; - const lowerEnd = {x: 200, y: 200}; - - // Add a monitor rect - const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(monitorId, upperStart, lowerEnd)); - expect(reduxState.monitors[monitorId]).toBeDefined(); - expect(reduxState.monitors[monitorId].upperStart).toEqual(upperStart); - expect(reduxState.monitors[monitorId].lowerEnd).toEqual(lowerEnd); - // Add monitor rect doesn't save position - expect(reduxState.savedMonitorPositions[monitorId]).toBeUndefined(); - const reduxState2 = monitorLayoutReducer(reduxState, moveMonitorRect(monitorId, 0, 0)); - - // Add a second monitor rect - const reduxState3 = monitorLayoutReducer(reduxState2, addMonitorRect(monitorId2, upperStart, lowerEnd)); - expect(reduxState3.monitors[monitorId]).toBeDefined(); - expect(reduxState3.monitors[monitorId2]).toBeDefined(); - expect(reduxState3.monitors[monitorId2].upperStart).toEqual(upperStart); - expect(reduxState3.monitors[monitorId2].lowerEnd).toEqual(lowerEnd); - // Saved positions aren't changed by adding monitor - expect(reduxState3.savedMonitorPositions).toEqual(reduxState2.savedMonitorPositions); -}); - -test('addMonitorRectWithSavedPosition', () => { - let defaultState; - const monitorId = 1; - const upperStart = {x: 100, y: 100}; - const lowerEnd = {x: 200, y: 200}; - - // Add a monitor rect - const reduxState = monitorLayoutReducer(defaultState, - addMonitorRect(monitorId, upperStart, lowerEnd, true /* savePosition */)); - expect(reduxState.monitors[monitorId]).toBeDefined(); - expect(reduxState.monitors[monitorId].upperStart).toEqual(upperStart); - expect(reduxState.monitors[monitorId].lowerEnd).toEqual(lowerEnd); - // Save position - expect(reduxState.savedMonitorPositions[monitorId].x).toEqual(upperStart.x); - expect(reduxState.savedMonitorPositions[monitorId].y).toEqual(upperStart.y); -}); - -test('invalidRect', () => { - let defaultState; - const reduxState = monitorLayoutReducer(defaultState /* state */, {type: 'initialize'} /* action */); - - // Problem: x end is before x start - expect( - monitorLayoutReducer(reduxState, - addMonitorRect(1, {x: 100, y: 100}, {x: 10, y: 200}))) - .toEqual(reduxState); - - // Problem: y end is before y start - expect( - monitorLayoutReducer(reduxState, - addMonitorRect(1, {x: 100, y: 100}, {x: 200, y: 10}))) - .toEqual(reduxState); -}); - -test('invalidAddMonitorRect', () => { - let defaultState; - const monitorId = 1; - const upperStart = {x: 100, y: 100}; - const lowerEnd = {x: 200, y: 200}; - - // Add a monitor rect - const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(monitorId, upperStart, lowerEnd)); - // Try to add the same one - expect(monitorLayoutReducer(reduxState, addMonitorRect(monitorId, upperStart, lowerEnd))) - .toEqual(reduxState); -}); - -test('moveMonitorRect', () => { - let defaultState; - const monitorId = 1; - const monitorId2 = 2; - const width = 102; - const height = 101; - const upperStart = {x: 100, y: 100}; - const lowerEnd = {x: upperStart.x + width, y: upperStart.y + height}; - const movedToPosition = {x: 0, y: 0}; - const movedToPosition2 = {x: 543, y: 2}; - - // Add a monitor rect and move it. Expect it to be in monitors state and saved positions. - const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(monitorId, upperStart, lowerEnd)); - const reduxState2 = monitorLayoutReducer(reduxState, - moveMonitorRect(monitorId, movedToPosition.x, movedToPosition.y)); - expect(reduxState2.monitors[monitorId]).toBeDefined(); - expect(reduxState2.monitors[monitorId].upperStart).toEqual(movedToPosition); - expect(reduxState2.monitors[monitorId].lowerEnd.x).toEqual(movedToPosition.x + width); - expect(reduxState2.monitors[monitorId].lowerEnd.y).toEqual(movedToPosition.y + height); - expect(reduxState2.savedMonitorPositions[monitorId]).toBeDefined(); - expect(reduxState2.savedMonitorPositions[monitorId].x).toEqual(movedToPosition.x); - expect(reduxState2.savedMonitorPositions[monitorId].y).toEqual(movedToPosition.y); - - // Add a second monitor rect and move it. Expect there to now be 2 saved positions. - const reduxState3 = monitorLayoutReducer(reduxState2, addMonitorRect(monitorId2, upperStart, lowerEnd)); - const reduxState4 = monitorLayoutReducer(reduxState3, - moveMonitorRect(monitorId2, movedToPosition2.x, movedToPosition2.y)); - expect(reduxState4.savedMonitorPositions[monitorId]).toEqual(reduxState2.savedMonitorPositions[monitorId]); - expect(reduxState4.savedMonitorPositions[monitorId2].x).toEqual(movedToPosition2.x); - expect(reduxState4.savedMonitorPositions[monitorId2].y).toEqual(movedToPosition2.y); -}); - -test('invalidMoveMonitorRect', () => { - let defaultState; - let reduxState = monitorLayoutReducer(defaultState, {type: 'initialize'} /* action */); - const monitorId = 1; - - // Try to move a monitor rect that doesn't exist - expect(monitorLayoutReducer(reduxState, moveMonitorRect(monitorId, 1 /* newX */, 1 /* newY */))) - .toEqual(reduxState); - - // Add the monitor to move - reduxState = monitorLayoutReducer(reduxState, addMonitorRect(monitorId, {x: 100, y: 100}, {x: 200, y: 200})); - - // Invalid newX - expect(monitorLayoutReducer(reduxState, moveMonitorRect(monitorId, 'Oregon' /* newX */, 1 /* newY */))) - .toEqual(reduxState); - - // Invalid newY - expect(monitorLayoutReducer(reduxState, moveMonitorRect(monitorId, 1 /* newX */))) - .toEqual(reduxState); -}); - -test('resizeMonitorRect', () => { - let defaultState; - const monitorId = 1; - const upperStart = {x: 100, y: 100}; - const newWidth = 10; - const newHeight = 20; - - // Add a monitor rect and resize it - const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(monitorId, upperStart, {x: 200, y: 200})); - const reduxState2 = monitorLayoutReducer(reduxState, - resizeMonitorRect(monitorId, newWidth, newHeight)); - expect(reduxState2.monitors[monitorId]).toBeDefined(); - expect(reduxState2.monitors[monitorId].upperStart).toEqual(upperStart); - expect(reduxState2.monitors[monitorId].lowerEnd.x).toEqual(upperStart.x + newWidth); - expect(reduxState2.monitors[monitorId].lowerEnd.y).toEqual(upperStart.y + newHeight); - // Saved positions aren't changed by resizing monitor - expect(reduxState2.savedMonitorPositions).toEqual(reduxState.savedMonitorPositions); -}); - -test('invalidResizeMonitorRect', () => { - let defaultState; - let reduxState = monitorLayoutReducer(defaultState, {type: 'initialize'} /* action */); - const monitorId = 1; - - // Try to resize a monitor rect that doesn't exist - expect(monitorLayoutReducer(reduxState, resizeMonitorRect(monitorId, 1 /* newWidth */, 1 /* newHeight */))) - .toEqual(reduxState); - - // Add the monitor to resize - reduxState = monitorLayoutReducer(reduxState, addMonitorRect(monitorId, {x: 100, y: 100}, {x: 200, y: 200})); - - // Invalid newWidth - expect(monitorLayoutReducer(reduxState, resizeMonitorRect(monitorId, 'Oregon' /* newWidth */, 1 /* newHeight */))) - .toEqual(reduxState); - - // Invalid newHeight - expect(monitorLayoutReducer(reduxState, moveMonitorRect(monitorId, 1 /* newWidth */))) - .toEqual(reduxState); - - // newWidth < 0 - expect(monitorLayoutReducer(reduxState, resizeMonitorRect(monitorId, -1 /* newWidth */, 1 /* newHeight */))) - .toEqual(reduxState); - - // newHeight < 0 - expect(monitorLayoutReducer(reduxState, resizeMonitorRect(monitorId, 1 /* newWidth */, -1 /* newHeight */))) - .toEqual(reduxState); -}); - -test('removeMonitorRect', () => { - let defaultState; - const monitorId = 1; - - // Add a monitor rect, move it, and remove it - const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(monitorId, - {x: 100, y: 100}, - {x: 200, y: 200} - )); - const reduxState2 = monitorLayoutReducer(reduxState, moveMonitorRect(monitorId, 0, 0)); - const reduxState3 = monitorLayoutReducer(reduxState2, removeMonitorRect(monitorId)); - expect(reduxState3.monitors[monitorId]).toBeUndefined(); - // Check that saved positions aren't changed by removing monitor - expect(reduxState3.savedMonitorPositions).toEqual(reduxState2.savedMonitorPositions); -}); - -test('invalidRemoveMonitorRect', () => { - let defaultState; - const reduxState = monitorLayoutReducer(defaultState, {type: 'initialize'} /* action */); - - // Try to remove a monitor rect that doesn't exist - expect(monitorLayoutReducer(reduxState, resizeMonitorRect(1))) - .toEqual(reduxState); -}); - -test('getInitialPosition_lineUpTopLeft', () => { - let defaultState; - const width = 100; - const height = 200; - // Add monitors to right and bottom, but there is a space in the top left - let reduxState = monitorLayoutReducer(defaultState, addMonitorRect(1, - {x: width + PADDING, y: 0}, - {x: 100, y: height} - )); - reduxState = monitorLayoutReducer(defaultState, addMonitorRect(2, - {x: 0, y: height + PADDING}, - {x: width, y: 100} - )); - - // Check that the added monitor appears in the space - const rect = getInitialPosition(reduxState, 3, width, height); - expect(rect.upperStart).toBeDefined(); - expect(rect.lowerEnd).toBeDefined(); - expect(rect.lowerEnd.x - rect.upperStart.x).toEqual(width); - expect(rect.lowerEnd.y - rect.upperStart.y).toEqual(height); - expect(rect.upperStart.x).toEqual(PADDING); - expect(rect.upperStart.y).toEqual(PADDING); -}); - -test('getInitialPosition_savedPosition', () => { - const monitorId = 1; - const savedX = 100; - const savedY = 200; - const width = 7; - const height = 8; - const reduxState = { - monitors: {}, - savedMonitorPositions: {[monitorId]: {x: savedX, y: savedY}} - }; - - // Check that initial position uses saved state - const rect = getInitialPosition(reduxState, monitorId, width, height); - expect(rect.upperStart).toBeDefined(); - expect(rect.lowerEnd).toBeDefined(); - expect(rect.lowerEnd.x - rect.upperStart.x).toEqual(width); - expect(rect.lowerEnd.y - rect.upperStart.y).toEqual(height); - expect(rect.upperStart.x).toEqual(savedX); - expect(rect.upperStart.y).toEqual(savedY); -}); - -test('getInitialPosition_lineUpLeft', () => { - let defaultState; - const monitor1EndY = 60; - // Add a monitor that takes up the upper left corner - const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(1, {x: 0, y: 0}, {x: 100, y: monitor1EndY})); - - // Check that added monitor is under it and lines up left - const rect = getInitialPosition(reduxState, 2, 20 /* width */, 20 /* height */); - expect(rect.upperStart.y >= monitor1EndY + PADDING).toBeTruthy(); -}); - -test('getInitialPosition_lineUpTop', () => { - let defaultState; - const monitor1EndX = 100; - // Add a monitor that takes up the whole left side - const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(1, - {x: 0, y: 0}, - {x: monitor1EndX, y: SCREEN_HEIGHT} - )); - - // Check that added monitor is to the right of it and lines up top - const rect = getInitialPosition(reduxState, 2, 20 /* width */, 20 /* height */); - expect(rect.upperStart.y).toEqual(PADDING); - expect(rect.upperStart.x >= monitor1EndX + PADDING).toBeTruthy(); -}); - -test('getInitialPosition_noRoom', () => { - let defaultState; - const width = 7; - const height = 8; - // Add a monitor that takes up the whole screen - const reduxState = monitorLayoutReducer(defaultState, addMonitorRect(1, - {x: 0, y: 0}, - {x: SCREEN_WIDTH, y: SCREEN_HEIGHT} - )); - - // Check that added monitor exists somewhere (we don't care where) - const rect = getInitialPosition(reduxState, 2, width, height); - expect(rect.upperStart).toBeDefined(); - expect(rect.lowerEnd.x - rect.upperStart.x).toEqual(width); - expect(rect.lowerEnd.y - rect.upperStart.y).toEqual(height); -}); diff --git a/test/unit/reducers/project-state-reducer.test.js b/test/unit/reducers/project-state-reducer.test.js deleted file mode 100644 index 8aabc107244..00000000000 --- a/test/unit/reducers/project-state-reducer.test.js +++ /dev/null @@ -1,508 +0,0 @@ -/* eslint-env jest */ -import projectStateReducer, { - LoadingState, - autoUpdateProject, - doneCreatingProject, - doneUpdatingProject, - manualUpdateProject, - onFetchedProjectData, - onLoadedProject, - projectError, - remixProject, - requestNewProject, - requestProjectUpload, - saveProjectAsCopy, - setProjectId -} from '../../../src/reducers/project-state'; - -test('initialState', () => { - let defaultState; - /* projectStateReducer(state, action) */ - expect(projectStateReducer(defaultState, {type: 'anything'})).toBeDefined(); - expect(projectStateReducer(defaultState, {type: 'anything'}).error).toBe(null); - expect(projectStateReducer(defaultState, {type: 'anything'}).projectData).toBe(null); - expect(projectStateReducer(defaultState, {type: 'anything'}).projectId).toBe(null); - expect(projectStateReducer(defaultState, {type: 'anything'}).loadingState).toBe(LoadingState.NOT_LOADED); -}); - -test('doneCreatingProject for new project with projectId type string shows project with that id', () => { - const initialState = { - projectId: null, - loadingState: LoadingState.CREATING_NEW - }; - const action = doneCreatingProject('100', initialState.loadingState); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); - expect(resultState.projectId).toBe('100'); -}); - -test('doneCreatingProject for new project with projectId type number shows project with id of type number', () => { - const initialState = { - projectId: null, - loadingState: LoadingState.CREATING_NEW - }; - const action = doneCreatingProject(100, initialState.loadingState); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); - expect(resultState.projectId).toBe(100); -}); - -test('doneCreatingProject for remix shows project with that id', () => { - const initialState = { - projectId: null, - loadingState: LoadingState.REMIXING - }; - const action = doneCreatingProject('100', initialState.loadingState); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); - expect(resultState.projectId).toBe('100'); -}); - -test('doneCreatingProject for save as copy shows project with that id', () => { - const initialState = { - projectId: null, - loadingState: LoadingState.CREATING_COPY - }; - const action = doneCreatingProject('100', initialState.loadingState); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); - expect(resultState.projectId).toBe('100'); -}); - -test('onFetchedProjectData with id loads project data into vm', () => { - const initialState = { - projectData: null, - loadingState: LoadingState.FETCHING_WITH_ID - }; - const action = onFetchedProjectData('1010101', initialState.loadingState); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.LOADING_VM_WITH_ID); - expect(resultState.projectData).toBe('1010101'); -}); - -test('onFetchedProjectData new loads project data into vm', () => { - const initialState = { - projectData: null, - loadingState: LoadingState.FETCHING_NEW_DEFAULT - }; - const action = onFetchedProjectData('1010101', initialState.loadingState); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.LOADING_VM_NEW_DEFAULT); - expect(resultState.projectData).toBe('1010101'); -}); - -// onLoadedProject: LOADING_VM_WITH_ID - -test('onLoadedProject(LOADING_VM_WITH_ID, true, true) results in state SHOWING_WITH_ID', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.LOADING_VM_WITH_ID - }; - const action = onLoadedProject(initialState.loadingState, true, true); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); - expect(resultState.projectId).toBe('100'); -}); - -test('onLoadedProject(LOADING_VM_WITH_ID, false, true) results in state SHOWING_WITH_ID', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.LOADING_VM_WITH_ID - }; - const action = onLoadedProject(initialState.loadingState, false, true); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); - expect(resultState.projectId).toBe('100'); -}); - -// case where we started out viewing a project with a projectId, then -// started to load another project; but loading fails. We go back to -// showing the original project. -test('onLoadedProject(LOADING_VM_WITH_ID, false, false), with project id, ' + - 'results in state SHOWING_WITH_ID', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.LOADING_VM_WITH_ID - }; - const action = onLoadedProject(initialState.loadingState, false, false); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); - expect(resultState.projectId).toBe('100'); -}); - -// case where we started out viewing a project with default projectId, then -// started to load one with an id, such as in standalone mode when user adds -// '#PROJECT_ID_NUMBER' to the URI; but loading fails. We go back to -// showing the original project. -test('onLoadedProject(LOADING_VM_WITH_ID, false, false), with no project id, ' + - 'results in state SHOWING_WITHOUT_ID', () => { - const initialState = { - projectId: '0', - loadingState: LoadingState.LOADING_VM_WITH_ID - }; - const action = onLoadedProject(initialState.loadingState, false, false); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID); - expect(resultState.projectId).toBe('0'); -}); - -// onLoadedProject: LOADING_VM_FILE_UPLOAD - -test('onLoadedProject(LOADING_VM_FILE_UPLOAD, true, true) prepares to save', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.LOADING_VM_FILE_UPLOAD - }; - const action = onLoadedProject(initialState.loadingState, true, true); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.AUTO_UPDATING); - expect(resultState.projectId).toBe('100'); -}); - -test('onLoadedProject(LOADING_VM_FILE_UPLOAD, false, true) results in state SHOWING_WITHOUT_ID', () => { - const initialState = { - projectId: '0', - loadingState: LoadingState.LOADING_VM_FILE_UPLOAD - }; - const action = onLoadedProject(initialState.loadingState, false, true); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID); - expect(resultState.projectId).toBe('0'); -}); - -test('onLoadedProject(LOADING_VM_FILE_UPLOAD, false, false), when we know project id, ' + - 'results in state SHOWING_WITH_ID', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.LOADING_VM_FILE_UPLOAD - }; - const action = onLoadedProject(initialState.loadingState, false, false); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); - expect(resultState.projectId).toBe('100'); -}); - -test('onLoadedProject(LOADING_VM_FILE_UPLOAD, false, false), when we ' + - 'don\'t know project id, results in state SHOWING_WITHOUT_ID', () => { - const initialState = { - projectId: '0', - loadingState: LoadingState.LOADING_VM_FILE_UPLOAD - }; - const action = onLoadedProject(initialState.loadingState, false, false); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID); - expect(resultState.projectId).toBe('0'); -}); - -// onLoadedProject: LOADING_VM_NEW_DEFAULT - -test('onLoadedProject(LOADING_VM_NEW_DEFAULT, true, true) results in state SHOWING_WITHOUT_ID', () => { - const initialState = { - projectId: '0', - loadingState: LoadingState.LOADING_VM_NEW_DEFAULT - }; - const action = onLoadedProject(initialState.loadingState, true, true); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID); - expect(resultState.projectId).toBe('0'); -}); - -test('onLoadedProject(LOADING_VM_NEW_DEFAULT, false, true) results in state SHOWING_WITHOUT_ID', () => { - const initialState = { - projectId: '0', - loadingState: LoadingState.LOADING_VM_NEW_DEFAULT - }; - const action = onLoadedProject(initialState.loadingState, false, true); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID); - expect(resultState.projectId).toBe('0'); -}); - -test('onLoadedProject(LOADING_VM_NEW_DEFAULT, false, false) results in ERROR state', () => { - const initialState = { - projectId: '0', - loadingState: LoadingState.LOADING_VM_NEW_DEFAULT - }; - const action = onLoadedProject(initialState.loadingState, false, false); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.ERROR); - expect(resultState.projectId).toBe('0'); -}); - -// doneUpdatingProject - -test('doneUpdatingProject with id results in state SHOWING_WITH_ID', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.MANUAL_UPDATING - }; - const action = doneUpdatingProject(initialState.loadingState); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); - expect(resultState.projectId).toBe('100'); -}); - -test('doneUpdatingProject with id, before copy occurs, results in state CREATING_COPY', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.UPDATING_BEFORE_COPY - }; - const action = doneUpdatingProject(initialState.loadingState); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.CREATING_COPY); - expect(resultState.projectId).toBe('100'); -}); - -test('doneUpdatingProject with id, before new, results in state FETCHING_NEW_DEFAULT', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.UPDATING_BEFORE_NEW - }; - const action = doneUpdatingProject(initialState.loadingState); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.FETCHING_NEW_DEFAULT); - expect(resultState.projectId).toBe('0'); // resets id -}); - -test('calling setProjectId, using with same id as already showing, ' + - 'results in state SHOWING_WITH_ID', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.SHOWING_WITH_ID - }; - const action = setProjectId('100'); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); - expect(resultState.projectId).toBe('100'); -}); - -test('calling setProjectId, using different id from project already showing, ' + - 'results in state FETCHING_WITH_ID', () => { - const initialState = { - projectId: 99, - loadingState: LoadingState.SHOWING_WITH_ID - }; - const action = setProjectId('100'); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.FETCHING_WITH_ID); - expect(resultState.projectId).toBe('100'); -}); - -test('setProjectId, with same id as before, but not same type, ' + - 'results in FETCHING_WITH_ID because the two projectIds are not strictly equal', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.SHOWING_WITH_ID - }; - const action = setProjectId(100); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.FETCHING_WITH_ID); - expect(resultState.projectId).toBe(100); -}); - -test('requestNewProject, when can\'t create/save, results in FETCHING_NEW_DEFAULT', () => { - const initialState = { - projectId: '0', - loadingState: LoadingState.SHOWING_WITHOUT_ID - }; - const action = requestNewProject(false); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.FETCHING_NEW_DEFAULT); - expect(resultState.projectId).toBe('0'); -}); - -test('requestNewProject, when can create/save, results in UPDATING_BEFORE_NEW ' + - '(in order to save before fetching default project)', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.SHOWING_WITH_ID - }; - const action = requestNewProject(true); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.UPDATING_BEFORE_NEW); - expect(resultState.projectId).toBe('100'); -}); - -test('requestProjectUpload when project not loaded results in state LOADING_VM_FILE_UPLOAD', () => { - const initialState = { - projectId: null, - loadingState: LoadingState.NOT_LOADED - }; - const action = requestProjectUpload(initialState.loadingState); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.LOADING_VM_FILE_UPLOAD); - expect(resultState.projectId).toBe(null); -}); - -test('requestProjectUpload when showing project with id results in state LOADING_VM_FILE_UPLOAD', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.SHOWING_WITH_ID - }; - const action = requestProjectUpload(initialState.loadingState); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.LOADING_VM_FILE_UPLOAD); - expect(resultState.projectId).toBe('100'); -}); - -test('requestProjectUpload when showing project without id results in state LOADING_VM_FILE_UPLOAD', () => { - const initialState = { - projectId: null, - loadingState: LoadingState.SHOWING_WITHOUT_ID - }; - const action = requestProjectUpload(initialState.loadingState); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.LOADING_VM_FILE_UPLOAD); - expect(resultState.projectId).toBe(null); -}); - -test('manualUpdateProject should prepare to update', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.SHOWING_WITH_ID - }; - const action = manualUpdateProject(); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.MANUAL_UPDATING); - expect(resultState.projectId).toBe('100'); -}); - -test('autoUpdateProject should prepare to update', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.SHOWING_WITH_ID - }; - const action = autoUpdateProject(); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.AUTO_UPDATING); - expect(resultState.projectId).toBe('100'); -}); - -test('saveProjectAsCopy should save, before preparing to save as a copy', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.SHOWING_WITH_ID - }; - const action = saveProjectAsCopy(); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.UPDATING_BEFORE_COPY); - expect(resultState.projectId).toBe('100'); -}); - -test('remixProject should prepare to remix', () => { - const initialState = { - projectId: '100', - loadingState: LoadingState.SHOWING_WITH_ID - }; - const action = remixProject(); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.REMIXING); - expect(resultState.projectId).toBe('100'); -}); - -test('projectError from various states should show error', () => { - const startStates = [ - LoadingState.AUTO_UPDATING, - LoadingState.CREATING_NEW, - LoadingState.FETCHING_NEW_DEFAULT, - LoadingState.FETCHING_WITH_ID, - LoadingState.LOADING_VM_NEW_DEFAULT, - LoadingState.LOADING_VM_WITH_ID, - LoadingState.MANUAL_UPDATING, - LoadingState.REMIXING, - LoadingState.CREATING_COPY, - LoadingState.UPDATING_BEFORE_NEW - ]; - for (const startState of startStates) { - const initialState = { - error: null, - projectId: '100', - loadingState: startState - }; - const action = projectError('Error string'); - const resultState = projectStateReducer(initialState, action); - expect(resultState.error).toEqual('Error string'); - expect(resultState.projectId).toBe('100'); - } -}); - -test('fatal projectError should show error state', () => { - const startStates = [ - LoadingState.FETCHING_NEW_DEFAULT, - LoadingState.FETCHING_WITH_ID, - LoadingState.LOADING_VM_NEW_DEFAULT, - LoadingState.LOADING_VM_WITH_ID - ]; - for (const startState of startStates) { - const initialState = { - error: null, - projectId: '100', - loadingState: startState - }; - const action = projectError('Error string'); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.ERROR); - expect(resultState.projectId).toBe('100'); - } -}); - -test('non-fatal projectError should show normal state', () => { - const startStates = [ - LoadingState.AUTO_UPDATING, - LoadingState.CREATING_COPY, - LoadingState.MANUAL_UPDATING, - LoadingState.REMIXING, - LoadingState.UPDATING_BEFORE_NEW - ]; - for (const startState of startStates) { - const initialState = { - error: null, - projectId: '100', - loadingState: startState - }; - const action = projectError('Error string'); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); - expect(resultState.projectId).toBe('100'); - } -}); - -test('projectError when creating new while viewing project with id should ' + - 'go back to state SHOWING_WITH_ID', () => { - const initialState = { - error: null, - loadingState: LoadingState.CREATING_NEW, - projectId: '12345' - }; - const action = projectError('Error string'); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITH_ID); - expect(resultState.projectId).toBe('12345'); -}); - -test('projectError when creating new while logged out, looking at default project ' + - 'should go back to state SHOWING_WITHOUT_ID', () => { - const initialState = { - error: null, - loadingState: LoadingState.CREATING_NEW, - projectId: '0' - }; - const action = projectError('Error string'); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.SHOWING_WITHOUT_ID); - expect(resultState.projectId).toBe('0'); -}); - -test('projectError encountered while in state FETCHING_WITH_ID results in ' + - 'ERROR state', () => { - const initialState = { - error: null, - projectId: null, - loadingState: LoadingState.FETCHING_WITH_ID - }; - const action = projectError('Error string'); - const resultState = projectStateReducer(initialState, action); - expect(resultState.loadingState).toBe(LoadingState.ERROR); - expect(resultState.projectId).toBe(null); - expect(resultState.error).toEqual('Error string'); -}); diff --git a/test/unit/reducers/workspace-metrics-reducer.test.js b/test/unit/reducers/workspace-metrics-reducer.test.js deleted file mode 100644 index f1cf1a70de4..00000000000 --- a/test/unit/reducers/workspace-metrics-reducer.test.js +++ /dev/null @@ -1,25 +0,0 @@ -/* eslint-env jest */ -import workspaceMetricsReducer, {updateMetrics} from '../../../src/reducers/workspace-metrics'; - -test('initialState', () => { - let defaultState; - /* workspaceMetricsReducer(state, action) */ - expect(workspaceMetricsReducer(defaultState, {type: 'anything'})).toBeDefined(); - expect(workspaceMetricsReducer(defaultState, {type: 'anything'})).toEqual({targets: {}}); -}); - -test('updateMetrics action creator', () => { - let defaultState; - const action = updateMetrics({ - targetID: 'abcde', - scrollX: 225, - scrollY: 315, - scale: 1.25 - }); - const resultState = workspaceMetricsReducer(defaultState, action); - expect(Object.keys(resultState.targets).length).toBe(1); - expect(resultState.targets.abcde).toBeDefined(); - expect(resultState.targets.abcde.scrollX).toBe(225); - expect(resultState.targets.abcde.scrollY).toBe(315); - expect(resultState.targets.abcde.scale).toBe(1.25); -}); diff --git a/test/unit/util/audio-context.test.js b/test/unit/util/audio-context.test.js deleted file mode 100644 index c46d1317ddb..00000000000 --- a/test/unit/util/audio-context.test.js +++ /dev/null @@ -1,30 +0,0 @@ -/* global WebAudioTestAPI */ -import 'web-audio-test-api'; -WebAudioTestAPI.setState({ - 'AudioContext#resume': 'enabled' -}); - -import SharedAudioContext from '../../../src/lib/audio/shared-audio-context'; - -describe('Shared Audio Context', () => { - const audioContext = new AudioContext(); - - test('returns empty object without user gesture', () => { - const sharedAudioContext = new SharedAudioContext(); - expect(sharedAudioContext).toMatchObject({}); - }); - - test('returns AudioContext when mousedown is triggered', () => { - const sharedAudioContext = new SharedAudioContext(); - const event = new Event('mousedown'); - document.dispatchEvent(event); - expect(sharedAudioContext).toMatchObject(audioContext); - }); - - test('returns AudioContext when touchstart is triggered', () => { - const sharedAudioContext = new SharedAudioContext(); - const event = new Event('touchstart'); - document.dispatchEvent(event); - expect(sharedAudioContext).toMatchObject(audioContext); - }); -}); diff --git a/test/unit/util/audio-effects.test.js b/test/unit/util/audio-effects.test.js deleted file mode 100644 index 330fe12a18f..00000000000 --- a/test/unit/util/audio-effects.test.js +++ /dev/null @@ -1,91 +0,0 @@ -/* global WebAudioTestAPI */ -import 'web-audio-test-api'; -WebAudioTestAPI.setState({ - 'OfflineAudioContext#startRendering': 'promise' -}); - -import AudioEffects from '../../../src/lib/audio/audio-effects'; -import RobotEffect from '../../../src/lib/audio/effects/robot-effect'; -import EchoEffect from '../../../src/lib/audio/effects/echo-effect'; -import VolumeEffect from '../../../src/lib/audio/effects/volume-effect'; - -describe('Audio Effects manager', () => { - const audioContext = new AudioContext(); - const audioBuffer = audioContext.createBuffer(1, 400, 44100); - - test('changes buffer length and playback rate for faster effect', () => { - const audioEffects = new AudioEffects(audioBuffer, 'faster', 0, 1); - expect(audioEffects.audioContext._.length).toBeLessThan(400); - }); - - test('changes buffer length and playback rate for slower effect', () => { - const audioEffects = new AudioEffects(audioBuffer, 'slower', 0, 1); - expect(audioEffects.audioContext._.length).toBeGreaterThan(400); - }); - - test('changes buffer length for echo effect', () => { - const audioEffects = new AudioEffects(audioBuffer, 'echo', 0, 1); - expect(audioEffects.audioContext._.length).toBeGreaterThan(400); - }); - - test('updates the trim positions after an effect has changed the length of selection', () => { - const slowerEffect = new AudioEffects(audioBuffer, 'slower', 0.25, 0.75); - expect(slowerEffect.adjustedTrimStartSeconds).toEqual(slowerEffect.trimStartSeconds); - expect(slowerEffect.adjustedTrimEndSeconds).toBeGreaterThan(slowerEffect.trimEndSeconds); - - const fasterEffect = new AudioEffects(audioBuffer, 'faster', 0.25, 0.75); - expect(fasterEffect.adjustedTrimStartSeconds).toEqual(fasterEffect.trimStartSeconds); - expect(fasterEffect.adjustedTrimEndSeconds).toBeLessThan(fasterEffect.trimEndSeconds); - - // Some effects do not change the length of the selection - const fadeEffect = new AudioEffects(audioBuffer, 'fade in', 0.25, 0.75); - expect(fadeEffect.adjustedTrimStartSeconds).toEqual(fadeEffect.trimStartSeconds); - // Should be within one millisecond (flooring can change the duration by one sample) - expect(fadeEffect.adjustedTrimEndSeconds).toBeCloseTo(fadeEffect.trimEndSeconds, 3); - }); - - test.skip('process starts the offline rendering context and returns a promise', () => { - // @todo haven't been able to get web audio test api to actually run render - }); - - test('reverse effect strictly reverses the samples', () => { - const fakeSound = [1, 2, 3, 4, 5, 6, 7, 8]; - - const fakeBuffer = audioContext.createBuffer(1, 8, 44100); - const bufferData = fakeBuffer.getChannelData(0); - fakeSound.forEach((sample, index) => { - bufferData[index] = sample; - }); - - // Reverse the entire sound - const reverseAll = new AudioEffects(fakeBuffer, 'reverse', 0, 1); - expect(Array.from(reverseAll.buffer.getChannelData(0))).toEqual(fakeSound.reverse()); - - // Reverse part of the sound - const reverseSelection = new AudioEffects(fakeBuffer, 'reverse', 0.25, 0.75); - const selectionReversed = [1, 2, 6, 5, 4, 3, 7, 8]; - expect(Array.from(reverseSelection.buffer.getChannelData(0))).toEqual(selectionReversed); - }); -}); - -describe('Effects', () => { - let audioContext; - - beforeEach(() => { - audioContext = new AudioContext(); - }); - - test('all effects provide an input and output that are connected', () => { - const robotEffect = new RobotEffect(audioContext, 0, 1); - expect(robotEffect.input).toBeInstanceOf(AudioNode); - expect(robotEffect.output).toBeInstanceOf(AudioNode); - - const echoEffect = new EchoEffect(audioContext, 0, 1); - expect(echoEffect.input).toBeInstanceOf(AudioNode); - expect(echoEffect.output).toBeInstanceOf(AudioNode); - - const volumeEffect = new VolumeEffect(audioContext, 0.5, 0, 1); - expect(volumeEffect.input).toBeInstanceOf(AudioNode); - expect(volumeEffect.output).toBeInstanceOf(AudioNode); - }); -}); diff --git a/test/unit/util/audio-util.test.js b/test/unit/util/audio-util.test.js deleted file mode 100644 index e571c0513d3..00000000000 --- a/test/unit/util/audio-util.test.js +++ /dev/null @@ -1,102 +0,0 @@ -import { - computeRMS, - computeChunkedRMS, - downsampleIfNeeded, - dropEveryOtherSample -} from '../../../src/lib/audio/audio-util'; - -describe('computeRMS', () => { - test('returns 0 when given no samples', () => { - expect(computeRMS([])).toEqual(0); - }); - test('returns the RMS scaled by the given unity value and square rooted', () => { - const unity = 0.5; - const samples = [3, 2, 1]; - expect(computeRMS(samples, unity)).toEqual( - Math.sqrt(Math.sqrt(((3 * 3) + (2 * 2) + (1 * 1)) / 3) / 0.5) - ); - }); - test('uses a default unity value of 0.55', () => { - const samples = [1, 1, 1]; - // raw rms is 1, scaled to (1 / 0.55) and square rooted - expect(computeRMS(samples)).toEqual(Math.sqrt(1 / 0.55)); - }); -}); - - -describe('computeChunkedRMS', () => { - test('computes the rms for each chunk based on chunk size', () => { - const samples = [2, 1, 3, 2, 5]; - const chunkedLevels = computeChunkedRMS(samples, 2); - // chunked to [2, 0], [3, 0], [5] - // rms scaled with default unity of 0.55 - expect(chunkedLevels.length).toEqual(3); - expect(chunkedLevels).toEqual([ - Math.sqrt(Math.sqrt(((2 * 2) + (1 * 1)) / 2) / 0.55), - Math.sqrt(Math.sqrt(((3 * 3) + (2 * 2)) / 2) / 0.55), - Math.sqrt(Math.sqrt((5 * 5) / 1) / 0.55) - ]); - }); - test('chunk size larger than sample size creates single chunk', () => { - const samples = [1, 1, 1]; - const chunkedLevels = computeChunkedRMS(samples, 7); - // chunked to [1, 1, 1] - // rms scaled with default unity of 0.55 - expect(chunkedLevels.length).toEqual(1); - expect(chunkedLevels).toEqual([Math.sqrt(1 / 0.55)]); - }); - test('chunk size as multiple is handled correctly', () => { - const samples = [1, 1, 1, 1, 1, 1]; - const chunkedLevels = computeChunkedRMS(samples, 3); - // chunked to [1, 1, 1], [1, 1, 1] - // rms scaled with default unity of 0.55 - expect(chunkedLevels.length).toEqual(2); - expect(chunkedLevels).toEqual([Math.sqrt(1 / 0.55), Math.sqrt(1 / 0.55)]); - }); -}); - -describe('downsampleIfNeeded', () => { - const samples = {length: 1}; - const sampleRate = 44100; - test('returns given data when no downsampling needed', async () => { - samples.length = 1; - const res = await downsampleIfNeeded({samples, sampleRate}, null); - expect(res.samples).toEqual(samples); - expect(res.sampleRate).toEqual(sampleRate); - }); - test('downsamples to 22050 if that puts it under the limit', async () => { - samples.length = 44100 * 3 * 60; - const resampler = jest.fn(() => 'TEST'); - const res = await downsampleIfNeeded({samples, sampleRate}, resampler); - expect(resampler).toHaveBeenCalledWith({samples, sampleRate}, 22050); - expect(res).toEqual('TEST'); - }); - // TW: We allow resampling even if it would exceed the limit because our GUI handles this better. - test.skip('fails if resampling would not put it under the limit', async () => { - samples.length = 44100 * 4 * 60; - try { - await downsampleIfNeeded({samples, sampleRate}, null); - } catch (e) { - expect(e.message).toEqual('Sound too large to save, refusing to edit'); - } - }); -}); - -describe('dropEveryOtherSample', () => { - const buffer = { - samples: [1, 0, 2, 0, 3, 0], - sampleRate: 2 - }; - test('result is half the length', () => { - const {samples} = dropEveryOtherSample(buffer); - expect(samples.length).toEqual(Math.floor(buffer.samples.length / 2)); - }); - test('result contains only even-index items', () => { - const {samples} = dropEveryOtherSample(buffer); - expect(samples).toEqual(new Float32Array([1, 2, 3])); - }); - test('result sampleRate is given sampleRate / 2', () => { - const {sampleRate} = dropEveryOtherSample(buffer); - expect(sampleRate).toEqual(buffer.sampleRate / 2); - }); -}); diff --git a/test/unit/util/cloud-manager-hoc.test.jsx b/test/unit/util/cloud-manager-hoc.test.jsx deleted file mode 100644 index 773fb38494c..00000000000 --- a/test/unit/util/cloud-manager-hoc.test.jsx +++ /dev/null @@ -1,401 +0,0 @@ -import 'web-audio-test-api'; - -import React from 'react'; -import configureStore from 'redux-mock-store'; -import {mountWithIntl} from '../../helpers/intl-helpers.jsx'; -import VM from 'scratch-vm'; -import {LoadingState} from '../../../src/reducers/project-state'; -import CloudProvider from '../../../src/lib/cloud-provider'; -const mockCloudProviderInstance = { - connection: true, - requestCloseConnection: jest.fn() -}; -jest.mock('../../../src/lib/cloud-provider', () => - jest.fn().mockImplementation(() => mockCloudProviderInstance) -); - -import cloudManagerHOC from '../../../src/lib/cloud-manager-hoc.jsx'; - -describe.skip('CloudManagerHOC', () => { - const mockStore = configureStore(); - let store; - let vm; - let stillLoadingStore; - - beforeEach(() => { - store = mockStore({ - scratchGui: { - projectState: { - projectId: '1234', - loadingState: LoadingState.SHOWING_WITH_ID - }, - mode: { - hasEverEnteredEditor: false - }, - tw: {} - } - }); - stillLoadingStore = mockStore({ - scratchGui: { - projectState: { - projectId: '1234', - loadingState: LoadingState.LOADING_WITH_ID - }, - mode: { - hasEverEnteredEditor: false - } - } - }); - vm = new VM(); - vm.setCloudProvider = jest.fn(); - vm.runtime = { - hasCloudData: jest.fn(() => true) - }; - vm.extensionManager = { - isExtensionLoaded: jest.fn(() => false) - }; - CloudProvider.mockClear(); - mockCloudProviderInstance.requestCloseConnection.mockClear(); - }); - test('when it mounts, the cloud provider is set on the vm', () => { - const Component = () => (
    ); - const WrappedComponent = cloudManagerHOC(Component); - const onShowCloudInfo = jest.fn(); - - mountWithIntl( - - ); - expect(vm.setCloudProvider.mock.calls.length).toBe(1); - expect(CloudProvider).toHaveBeenCalledTimes(1); - expect(vm.setCloudProvider).toHaveBeenCalledWith(mockCloudProviderInstance); - expect(onShowCloudInfo).not.toHaveBeenCalled(); - }); - - test('when cloudHost is missing, the cloud provider is not set on the vm', () => { - const Component = () => (
    ); - const WrappedComponent = cloudManagerHOC(Component); - mountWithIntl( - - ); - expect(vm.setCloudProvider.mock.calls.length).toBe(0); - expect(CloudProvider).not.toHaveBeenCalled(); - - }); - - test('when projectID is missing, the cloud provider is not set on the vm', () => { - - const Component = () => (
    ); - const WrappedComponent = cloudManagerHOC(Component); - mountWithIntl( - - ); - expect(vm.setCloudProvider.mock.calls.length).toBe(0); - expect(CloudProvider).not.toHaveBeenCalled(); - }); - - test('when project is not showingWithId, the cloud provider is not set on the vm', () => { - - const Component = () => (
    ); - const WrappedComponent = cloudManagerHOC(Component); - mountWithIntl( - - ); - expect(vm.setCloudProvider.mock.calls.length).toBe(0); - expect(CloudProvider).not.toHaveBeenCalled(); - }); - - test('when hasCloudPermission is false, the cloud provider is not set on the vm', () => { - const Component = () =>
    ; - const WrappedComponent = cloudManagerHOC(Component); - mountWithIntl( - - ); - - expect(vm.setCloudProvider.mock.calls.length).toBe(0); - expect(CloudProvider).not.toHaveBeenCalled(); - }); - - test('when videoSensing extension is active, the cloud provider is not set on the vm', () => { - const Component = () =>
    ; - const WrappedComponent = cloudManagerHOC(Component); - vm.extensionManager.isExtensionLoaded = jest.fn(extension => extension === 'videoSensing'); - - mount( - - ); - - expect(vm.setCloudProvider.mock.calls.length).toBe(0); - expect(CloudProvider).not.toHaveBeenCalled(); - }); - - test('if the isShowingWithId prop becomes true, it sets the cloud provider on the vm', () => { - const Component = () =>
    ; - const WrappedComponent = cloudManagerHOC(Component); - const onShowCloudInfo = jest.fn(); - vm.runtime.hasCloudData = jest.fn(() => false); - - const mounted = mountWithIntl( - - ); - expect(onShowCloudInfo).not.toHaveBeenCalled(); - - vm.runtime.hasCloudData = jest.fn(() => true); - vm.emit('HAS_CLOUD_DATA_UPDATE', true); - - mounted.setProps({ - isShowingWithId: true, - loadingState: LoadingState.SHOWING_WITH_ID - }); - expect(vm.setCloudProvider.mock.calls.length).toBe(1); - expect(CloudProvider).toHaveBeenCalledTimes(1); - expect(vm.setCloudProvider).toHaveBeenCalledWith(mockCloudProviderInstance); - expect(onShowCloudInfo).not.toHaveBeenCalled(); - }); - - test('projectId change should not trigger cloudProvider connection unless isShowingWithId becomes true', () => { - const Component = () =>
    ; - const WrappedComponent = cloudManagerHOC(Component); - const mounted = mountWithIntl( - - ); - mounted.setProps({ - projectId: 'a different id' - }); - expect(vm.setCloudProvider.mock.calls.length).toBe(0); - expect(CloudProvider).not.toHaveBeenCalled(); - mounted.setProps({ - isShowingWithId: true, - loadingState: LoadingState.SHOWING_WITH_ID - }); - expect(vm.setCloudProvider.mock.calls.length).toBe(1); - expect(CloudProvider).toHaveBeenCalledTimes(1); - expect(vm.setCloudProvider).toHaveBeenCalledWith(mockCloudProviderInstance); - }); - - test('when it unmounts, the cloud provider is reset to null on the vm', () => { - const Component = () => (
    ); - const WrappedComponent = cloudManagerHOC(Component); - const mounted = mountWithIntl( - - ); - - expect(CloudProvider).toHaveBeenCalled(); - const requestCloseConnection = mockCloudProviderInstance.requestCloseConnection; - - mounted.unmount(); - - // vm.setCloudProvider is called twice, - // once during mount and once during unmount - expect(vm.setCloudProvider.mock.calls.length).toBe(2); - expect(vm.setCloudProvider).toHaveBeenCalledWith(null); - expect(requestCloseConnection).toHaveBeenCalledTimes(1); - }); - - test('projectId changing should trigger cloudProvider disconnection', () => { - const Component = () =>
    ; - const WrappedComponent = cloudManagerHOC(Component); - const mounted = mountWithIntl( - - ); - - expect(CloudProvider).toHaveBeenCalled(); - const requestCloseConnection = mockCloudProviderInstance.requestCloseConnection; - - mounted.setProps({ - projectId: 'a different id' - }); - - expect(vm.setCloudProvider.mock.calls.length).toBe(2); - expect(vm.setCloudProvider).toHaveBeenCalledWith(null); - expect(requestCloseConnection).toHaveBeenCalledTimes(1); - - }); - - test('username changing should trigger cloudProvider disconnection', () => { - const Component = () =>
    ; - const WrappedComponent = cloudManagerHOC(Component); - const mounted = mountWithIntl( - - ); - - expect(CloudProvider).toHaveBeenCalled(); - const requestCloseConnection = mockCloudProviderInstance.requestCloseConnection; - - mounted.setProps({ - username: 'a different user' - }); - - expect(vm.setCloudProvider.mock.calls.length).toBe(3); // tw: the test is wrong. - expect(vm.setCloudProvider).toHaveBeenCalledWith(null); - expect(requestCloseConnection).toHaveBeenCalledTimes(1); - - }); - - test('project without cloud data should not trigger cloud connection', () => { - // Mock the vm runtime function so that has cloud data is not - // initially true - vm.runtime.hasCloudData = jest.fn(() => false); - - const Component = () =>
    ; - const WrappedComponent = cloudManagerHOC(Component); - mountWithIntl( - - ); - expect(vm.setCloudProvider.mock.calls.length).toBe(0); - expect(CloudProvider).not.toHaveBeenCalled(); - }); - - test('projectHasCloudData becoming true should trigger a cloud connection', () => { - // Mock the vm runtime function so that has cloud data is not - // initially true - vm.runtime.hasCloudData = jest.fn(() => false); - const onShowCloudInfo = jest.fn(); - - const Component = () =>
    ; - const WrappedComponent = cloudManagerHOC(Component); - mountWithIntl( - - ); - expect(vm.setCloudProvider.mock.calls.length).toBe(0); - expect(CloudProvider).not.toHaveBeenCalled(); - expect(onShowCloudInfo).not.toHaveBeenCalled(); - - // Mock VM hasCloudData becoming true and emitting an update - vm.runtime.hasCloudData = jest.fn(() => true); - vm.emit('HAS_CLOUD_DATA_UPDATE', true); - - expect(vm.setCloudProvider.mock.calls.length).toBe(1); - expect(CloudProvider).toHaveBeenCalledTimes(1); - expect(vm.setCloudProvider).toHaveBeenCalledWith(mockCloudProviderInstance); - expect(onShowCloudInfo).toHaveBeenCalled(); - }); - - test('projectHasCloudDataUpdate becoming false should trigger cloudProvider disconnection', () => { - const Component = () =>
    ; - const WrappedComponent = cloudManagerHOC(Component); - mountWithIntl( - - ); - - expect(CloudProvider).toHaveBeenCalled(); - const requestCloseConnection = mockCloudProviderInstance.requestCloseConnection; - - vm.runtime.hasCloudData = jest.fn(() => false); - vm.emit('HAS_CLOUD_DATA_UPDATE', false); - - expect(vm.setCloudProvider.mock.calls.length).toBe(2); - expect(vm.setCloudProvider).toHaveBeenCalledWith(null); - expect(requestCloseConnection).toHaveBeenCalledTimes(1); - }); - - // Editor Mode Connection/Disconnection Tests - test('Entering editor mode and can\'t save project should disconnect cloud provider', () => { - const Component = () =>
    ; - const WrappedComponent = cloudManagerHOC(Component); - const mounted = mountWithIntl( - - ); - - expect(CloudProvider).toHaveBeenCalled(); - const requestCloseConnection = mockCloudProviderInstance.requestCloseConnection; - - mounted.setProps({ - canModifyCloudData: false - }); - - expect(vm.setCloudProvider.mock.calls.length).toBe(2); - expect(vm.setCloudProvider).toHaveBeenCalledWith(null); - expect(requestCloseConnection).toHaveBeenCalledTimes(1); - }); -}); diff --git a/test/unit/util/cloud-provider.test.js b/test/unit/util/cloud-provider.test.js deleted file mode 100644 index a63c688cf67..00000000000 --- a/test/unit/util/cloud-provider.test.js +++ /dev/null @@ -1,211 +0,0 @@ -import CloudProvider from '../../../src/lib/cloud-provider'; - -let websocketConstructorCount = 0; - -// Stub the global websocket so we can call open/close/error/send on it -global.WebSocket = function (url) { - this._url = url; - this._sentMessages = []; - - // These are not real websocket methods, but used to trigger callbacks - this._open = () => this.onopen(); - this._error = e => this.onerror(e); - this._receive = msg => this.onmessage(msg); - - // Stub the real websocket.send to store sent messages - this.send = msg => this._sentMessages.push(msg); - this.close = () => this.onclose(); - - websocketConstructorCount++; -}; -global.WebSocket.CLOSING = 'CLOSING'; -global.WebSocket.CLOSED = 'CLOSED'; - -describe('CloudProvider', () => { - let cloudProvider = null; - let vmIOData = []; - let timeout = 0; - beforeEach(() => { - vmIOData = []; - cloudProvider = new CloudProvider(); - // Stub vm - cloudProvider.vm = { - postIOData: (_namespace, data) => { - vmIOData.push(data); - } - }; - // Stub setTimeout so this can run instantly. - cloudProvider.setTimeout = (fn, after) => { - timeout = after; - fn(); - }; - // Stub randomize to make it consistent for testing. - cloudProvider.randomizeDuration = t => t; - }); - - test('createVariable', () => { - cloudProvider.createVariable('hello', 1); - const obj = JSON.parse(cloudProvider.connection._sentMessages[0]); - expect(obj.method).toEqual('create'); - expect(obj.name).toEqual('hello'); - expect(obj.value).toEqual(1); - }); - - test('updateVariable', () => { - cloudProvider.updateVariable('hello', 1); - const obj = JSON.parse(cloudProvider.connection._sentMessages[0]); - expect(obj.method).toEqual('set'); - expect(obj.name).toEqual('hello'); - expect(obj.value).toEqual(1); - }); - - test('updateVariable with falsey value', () => { - cloudProvider.updateVariable('hello', 0); - const obj = JSON.parse(cloudProvider.connection._sentMessages[0]); - expect(obj.method).toEqual('set'); - expect(obj.name).toEqual('hello'); - expect(obj.value).toEqual(0); - }); - - test('renameVariable', () => { - cloudProvider.renameVariable('oldName', 'newName'); - const obj = JSON.parse(cloudProvider.connection._sentMessages[0]); - expect(obj.method).toEqual('rename'); - expect(obj.name).toEqual('oldName'); - expect(typeof obj.value).toEqual('undefined'); - expect(obj.new_name).toEqual('newName'); - }); - - test('deleteVariable', () => { - cloudProvider.deleteVariable('hello'); - const obj = JSON.parse(cloudProvider.connection._sentMessages[0]); - expect(obj.method).toEqual('delete'); - expect(obj.name).toEqual('hello'); - expect(typeof obj.value).toEqual('undefined'); - }); - - - test('onMessage set', () => { - const msg = JSON.stringify({ - method: 'set', - name: 'name', - value: 'value' - }); - cloudProvider.connection._receive({data: msg}); - expect(vmIOData[0].varUpdate.name).toEqual('name'); - expect(vmIOData[0].varUpdate.value).toEqual('value'); - }); - - test('onMessage with newline at the end', () => { - const msg1 = JSON.stringify({ - method: 'set', - name: 'name1', - value: 'value' - }); - cloudProvider.onMessage({data: `${msg1}\n`}); - expect(vmIOData[0].varUpdate.name).toEqual('name1'); - }); - - test('onMessage with multiple commands', () => { - const msg1 = JSON.stringify({ - method: 'set', - name: 'name1', - value: 'value' - }); - const msg2 = JSON.stringify({ - method: 'set', - name: 'name2', - value: 'value2' - }); - cloudProvider.connection._receive({data: `${msg1}\n${msg2}`}); - expect(vmIOData[0].varUpdate.name).toEqual('name1'); - expect(vmIOData[1].varUpdate.name).toEqual('name2'); - }); - - test('connnection attempts set back to 1 when socket is opened', () => { - cloudProvider.connectionAttempts = 100; - cloudProvider.connection._open(); - expect(cloudProvider.connectionAttempts).toBe(1); - }); - - test('disconnect waits for a period equal to 2^k-1 before trying again', () => { - websocketConstructorCount = 1; // This is global, so set it back to 1 to start - // Constructor attempts to open connection, so attempts is initially 1 - expect(cloudProvider.connectionAttempts).toBe(1); - - // Make sure a close without a previous OPEN still waits 1s before reconnecting - cloudProvider.connection.close(); - expect(timeout).toEqual(1 * 1000); // 2^1 - 1 - expect(websocketConstructorCount).toBe(2); - expect(cloudProvider.connectionAttempts).toBe(2); - - cloudProvider.connection.close(); - expect(timeout).toEqual(3 * 1000); // 2^2 - 1 - expect(websocketConstructorCount).toBe(3); - expect(cloudProvider.connectionAttempts).toBe(3); - - cloudProvider.connection.close(); - expect(timeout).toEqual(7 * 1000); // 2^3 - 1 - expect(websocketConstructorCount).toBe(4); - expect(cloudProvider.connectionAttempts).toBe(4); - - cloudProvider.connection.close(); - expect(timeout).toEqual(15 * 1000); // 2^4 - 1 - expect(websocketConstructorCount).toBe(5); - expect(cloudProvider.connectionAttempts).toBe(5); - - cloudProvider.connection.close(); - expect(timeout).toEqual(31 * 1000); // 2^5 - 1 - expect(websocketConstructorCount).toBe(6); - expect(cloudProvider.connectionAttempts).toBe(6); - - cloudProvider.connection.close(); - expect(timeout).toEqual(31 * 1000); // maxed out at 2^5 - 1 - expect(websocketConstructorCount).toBe(7); - expect(cloudProvider.connectionAttempts).toBe(7); - }); - - test('close after connection is opened waits 1s before reconnecting', () => { - // This test is basically to check that opening the connection does not impact - // the time until reconnection for the first reconnect. - // It is easy to introduce a bug that causes reconnection time to be different - // based on whether an initial connection was made. - websocketConstructorCount = 1; - cloudProvider.connection._open(); - cloudProvider.connection.close(); - expect(timeout).toEqual(1 * 1000); // 2^1 - 1 - expect(websocketConstructorCount).toBe(2); - expect(cloudProvider.connectionAttempts).toBe(2); - }); - - test('exponentialTimeout caps connection attempt number', () => { - cloudProvider.connectionAttempts = 1000; - expect(cloudProvider.exponentialTimeout()).toEqual(31 * 1000); - }); - - test('requestCloseConnection does not try to reconnect', () => { - websocketConstructorCount = 1; // This is global, so set it back to 1 to start - cloudProvider.requestCloseConnection(); - expect(websocketConstructorCount).toBe(1); // No reconnection attempts - }); - - test('close with code 4002 triggers invalid username', () => { - cloudProvider.onInvalidUsername = jest.fn(); - cloudProvider.onClose({code: 4002}); - expect(cloudProvider.onInvalidUsername).toHaveBeenCalledTimes(1); - }); - - test('close with normal code does not trigger invalid username', () => { - cloudProvider.username = 'aaa'; - cloudProvider.onInvalidUsername = jest.fn(); - cloudProvider.onClose({code: 1000}); - expect(cloudProvider.onInvalidUsername).not.toHaveBeenCalled(); - }); -}); - -test('username anonymization', () => { - const anonymized = new CloudProvider('', null, 'player1234', ''); - expect(anonymized.username).toBe('player'); - const verbatim = new CloudProvider('', null, 'abcdef', ''); - expect(verbatim.username).toBe('abcdef'); -}); diff --git a/test/unit/util/code-payload.test.js b/test/unit/util/code-payload.test.js deleted file mode 100644 index 16264f5eb04..00000000000 --- a/test/unit/util/code-payload.test.js +++ /dev/null @@ -1,19 +0,0 @@ -jest.mock('../../../src/lib/backpack/block-to-image', () => () => Promise.resolve('block-image')); -jest.mock('../../../src/lib/backpack/thumbnail', () => () => Promise.resolve('thumbnail')); - -import codePayload from '../../../src/lib/backpack/code-payload'; -import {Base64} from 'js-base64'; - -describe('codePayload', () => { - test('base64 encodes the blocks as json', () => { - const blocks = '☁︎❤️🐻'; - const payload = codePayload({ - blockObjects: blocks - }); - return payload.then(p => { - expect( - JSON.parse(Base64.decode(p.body)) - ).toEqual(blocks); - }); - }); -}); diff --git a/test/unit/util/default-project.test.js b/test/unit/util/default-project.test.js deleted file mode 100644 index 726519c4160..00000000000 --- a/test/unit/util/default-project.test.js +++ /dev/null @@ -1,21 +0,0 @@ -import defaultProjectGenerator from '../../../src/lib/default-project/index.js'; - -describe('defaultProject', () => { - // This test ensures that the assets referenced in the default project JSON - // do not get out of sync with the raw assets that are included alongside. - // see https://github.com/LLK/scratch-gui/issues/4844 - test('assets referenced by the project are included', () => { - const translatorFn = () => ''; - const defaultProject = defaultProjectGenerator(translatorFn); - const includedAssetIds = defaultProject.map(obj => obj.id); - const projectData = JSON.parse(defaultProject[0].data); - projectData.targets.forEach(target => { - target.costumes.forEach(costume => { - expect(includedAssetIds.includes(costume.assetId)).toBe(true); - }); - target.sounds.forEach(sound => { - expect(includedAssetIds.includes(sound.assetId)).toBe(true); - }); - }); - }); -}); diff --git a/test/unit/util/define-dynamic-block.test.js b/test/unit/util/define-dynamic-block.test.js deleted file mode 100644 index 257e5529bef..00000000000 --- a/test/unit/util/define-dynamic-block.test.js +++ /dev/null @@ -1,199 +0,0 @@ -import defineDynamicBlock from '../../../src/lib/define-dynamic-block'; - -import BlockType from 'scratch-vm/src/extension-support/block-type'; - -const MockScratchBlocks = { - OUTPUT_SHAPE_HEXAGONAL: 1, - OUTPUT_SHAPE_ROUND: 2, - OUTPUT_SHAPE_SQUARE: 3 -}; - -const categoryInfo = { - name: 'test category', - color1: '#111', - color2: '#222', - color3: '#333' -}; - -const penIconURI = 'data:image/svg+xml;base64,fake_pen_icon_svg_base64_data'; - -const testBlockInfo = { - commandWithIcon: { - blockType: BlockType.COMMAND, - blockIconURI: penIconURI, - text: 'command with icon' - }, - commandWithoutIcon: { - blockType: BlockType.COMMAND, - text: 'command without icon' - }, - terminalCommand: { - blockType: BlockType.COMMAND, - isTerminal: true, - text: 'terminal command' - }, - reporter: { - blockType: BlockType.REPORTER, - text: 'reporter' - }, - boolean: { - blockType: BlockType.BOOLEAN, - text: 'Boolean' - }, - hat: { - blockType: BlockType.HAT, - text: 'hat' - } -}; - -// similar to goog.mixin from the Closure library -const mixin = function (target, source) { - for (const x in source) { - target[x] = source[x]; - } -}; - -class MockBlock { - constructor (blockInfo, extendedOpcode) { - // mimic Closure-style inheritance by mixing in `defineDynamicBlock` output as this instance's prototype - // see also the `Blockly.Block` constructor - const prototype = defineDynamicBlock(MockScratchBlocks, categoryInfo, blockInfo, extendedOpcode); - mixin(this, prototype); - this.init(); - - // bootstrap the mutation<->DOM cycle - this.blockInfoText = JSON.stringify(blockInfo); - const xmlElement = this.mutationToDom(); - - // parse blockInfo from XML to fill dynamic properties - this.domToMutation(xmlElement); - } - - jsonInit (json) { - this.result = Object.assign({}, json); - } - interpolate_ () { - // TODO: add tests for this? - } - setCheckboxInFlyout (isEnabled) { - this.result.checkboxInFlyout_ = isEnabled; - } - setOutput (isEnabled) { - this.result.outputConnection = isEnabled; // Blockly calls `makeConnection_` here - } - setOutputShape (outputShape) { - this.result.outputShape_ = outputShape; - } - setNextStatement (isEnabled) { - this.result.nextConnection = isEnabled; // Blockly calls `makeConnection_` here - } - setPreviousStatement (isEnabled) { - this.result.previousConnection = isEnabled; // Blockly calls `makeConnection_` here - } -} - -describe('defineDynamicBlock', () => { - test('is a function', () => { - expect(typeof defineDynamicBlock).toBe('function'); - }); - test('can define a command block with an icon', () => { - const extendedOpcode = 'test.commandWithIcon'; - const block = new MockBlock(testBlockInfo.commandWithIcon, extendedOpcode); - expect(block.result).toEqual({ - category: categoryInfo.name, - colour: categoryInfo.color1, - colourSecondary: categoryInfo.color2, - colourTertiary: categoryInfo.color3, - extensions: ['scratch_extension'], - inputsInline: true, - nextConnection: true, - outputShape_: MockScratchBlocks.OUTPUT_SHAPE_SQUARE, - previousConnection: true, - type: extendedOpcode - }); - }); - test('can define a command block without an icon', () => { - const extendedOpcode = 'test.commandWithoutIcon'; - const block = new MockBlock(testBlockInfo.commandWithoutIcon, extendedOpcode); - expect(block.result).toEqual({ - category: categoryInfo.name, - colour: categoryInfo.color1, - colourSecondary: categoryInfo.color2, - colourTertiary: categoryInfo.color3, - // extensions: undefined, // no icon means no extension - inputsInline: true, - nextConnection: true, - outputShape_: MockScratchBlocks.OUTPUT_SHAPE_SQUARE, - previousConnection: true, - type: extendedOpcode - }); - }); - test('can define a terminal command', () => { - const extendedOpcode = 'test.terminal'; - const block = new MockBlock(testBlockInfo.terminalCommand, extendedOpcode); - expect(block.result).toEqual({ - category: categoryInfo.name, - colour: categoryInfo.color1, - colourSecondary: categoryInfo.color2, - colourTertiary: categoryInfo.color3, - // extensions: undefined, // no icon means no extension - inputsInline: true, - nextConnection: false, // terminal - outputShape_: MockScratchBlocks.OUTPUT_SHAPE_SQUARE, - previousConnection: true, - type: extendedOpcode - }); - }); - test('can define a reporter', () => { - const extendedOpcode = 'test.reporter'; - const block = new MockBlock(testBlockInfo.reporter, extendedOpcode); - expect(block.result).toEqual({ - category: categoryInfo.name, - checkboxInFlyout_: true, - colour: categoryInfo.color1, - colourSecondary: categoryInfo.color2, - colourTertiary: categoryInfo.color3, - // extensions: undefined, // no icon means no extension - inputsInline: true, - // nextConnection: undefined, // reporter - outputConnection: true, // reporter - outputShape_: MockScratchBlocks.OUTPUT_SHAPE_ROUND, // reporter - // previousConnection: undefined, // reporter - type: extendedOpcode - }); - }); - test('can define a Boolean', () => { - const extendedOpcode = 'test.boolean'; - const block = new MockBlock(testBlockInfo.boolean, extendedOpcode); - expect(block.result).toEqual({ - category: categoryInfo.name, - // checkboxInFlyout_: undefined, - colour: categoryInfo.color1, - colourSecondary: categoryInfo.color2, - colourTertiary: categoryInfo.color3, - // extensions: undefined, // no icon means no extension - inputsInline: true, - // nextConnection: undefined, // reporter - outputConnection: true, // reporter - outputShape_: MockScratchBlocks.OUTPUT_SHAPE_HEXAGONAL, // Boolean - // previousConnection: undefined, // reporter - type: extendedOpcode - }); - }); - test('can define a hat', () => { - const extendedOpcode = 'test.hat'; - const block = new MockBlock(testBlockInfo.hat, extendedOpcode); - expect(block.result).toEqual({ - category: categoryInfo.name, - colour: categoryInfo.color1, - colourSecondary: categoryInfo.color2, - colourTertiary: categoryInfo.color3, - // extensions: undefined, // no icon means no extension - inputsInline: true, - nextConnection: true, - outputShape_: MockScratchBlocks.OUTPUT_SHAPE_SQUARE, - // previousConnection: undefined, // hat - type: extendedOpcode - }); - }); -}); diff --git a/test/unit/util/detect-locale.test.js b/test/unit/util/detect-locale.test.js deleted file mode 100644 index f9b1f63fcea..00000000000 --- a/test/unit/util/detect-locale.test.js +++ /dev/null @@ -1,86 +0,0 @@ -import {detectLocale} from '../../../src/lib/detect-locale.js'; - -const supportedLocales = ['en', 'es', 'pt-br', 'de', 'it']; - -Object.defineProperty(window.location, - 'search', - {value: '?name=val', configurable: true} -); -Object.defineProperty(window.navigator, - 'language', - {value: 'en-US', configurable: true} -); - -describe('detectLocale', () => { - test('uses locale from the URL when present', () => { - Object.defineProperty(window.location, - 'search', - {value: '?locale=pt-br'} - ); - expect(detectLocale(supportedLocales)).toEqual('pt-br'); - }); - - test('is case insensitive', () => { - Object.defineProperty(window.location, - 'search', - {value: '?locale=pt-BR'} - ); - expect(detectLocale(supportedLocales)).toEqual('pt-br'); - }); - - test('also accepts lang from the URL when present', () => { - Object.defineProperty(window.location, - 'search', - {value: '?lang=it'} - ); - expect(detectLocale(supportedLocales)).toEqual('it'); - }); - - test('ignores unsupported locales', () => { - Object.defineProperty(window.location, - 'search', - {value: '?lang=sv'} - ); - expect(detectLocale(supportedLocales)).toEqual('en'); - }); - - test('ignores other parameters', () => { - Object.defineProperty(window.location, - 'search', - {value: '?enable=language'} - ); - expect(detectLocale(supportedLocales)).toEqual('en'); - }); - - test('uses navigator language property for default if supported', () => { - Object.defineProperty(window.navigator, - 'language', - {value: 'pt-BR'} - ); - expect(detectLocale(supportedLocales)).toEqual('pt-br'); - }); - - test('ignores navigator language property if unsupported', () => { - Object.defineProperty(window.navigator, - 'language', - {value: 'da'} - ); - expect(detectLocale(supportedLocales)).toEqual('en'); - }); - - test('works with an empty locale', () => { - Object.defineProperty(window.location, - 'search', - {value: '?locale='} - ); - expect(detectLocale(supportedLocales)).toEqual('en'); - }); - - test('if multiple, uses the first locale', () => { - Object.defineProperty(window.location, - 'search', - {value: '?locale=de&locale=en'} - ); - expect(detectLocale(supportedLocales)).toEqual('de'); - }); -}); diff --git a/test/unit/util/drag-recognizer.test.js b/test/unit/util/drag-recognizer.test.js deleted file mode 100644 index 5a24b579b40..00000000000 --- a/test/unit/util/drag-recognizer.test.js +++ /dev/null @@ -1,120 +0,0 @@ -import DragRecognizer from '../../../src/lib/drag-recognizer'; - -describe('DragRecognizer', () => { - let onDrag; - let onDragEnd; - let dragRecognizer; - - beforeEach(() => { - onDrag = jest.fn(); - onDragEnd = jest.fn(); - dragRecognizer = new DragRecognizer({onDrag, onDragEnd}); - }); - - afterEach(() => { - dragRecognizer.reset(); - }); - - test('start -> small drag', () => { - dragRecognizer.start({clientX: 100, clientY: 100}); - window.dispatchEvent(new MouseEvent('mousemove', {clientX: 101, clientY: 101})); - expect(onDrag).not.toHaveBeenCalled(); - }); - - test('start -> large vertical touch move -> scroll, not drag', () => { - dragRecognizer.start({clientX: 100, clientY: 100}); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: 106, clientY: 150})); - expect(onDrag).not.toHaveBeenCalled(); - }); - - test('start -> large vertical mouse move -> mouse moves always drag)', () => { - dragRecognizer.start({clientX: 100, clientY: 100}); - window.dispatchEvent(new MouseEvent('mousemove', {clientX: 100, clientY: 150})); - expect(onDrag).toHaveBeenCalled(); - }); - - test('start -> large horizontal touch move -> drag', () => { - dragRecognizer.start({clientX: 100, clientY: 100}); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: 150, clientY: 106})); - expect(onDrag).toHaveBeenCalled(); - }); - - test('after starting a scroll, it cannot become a drag', () => { - dragRecognizer.start({clientX: 100, clientY: 100}); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: 100, clientY: 110})); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: 100, clientY: 100})); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: 110, clientY: 100})); - expect(onDrag).not.toHaveBeenCalled(); - }); - - test('start -> end unbinds', () => { - dragRecognizer.start({clientX: 100, clientY: 100}); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: 150, clientY: 106})); - expect(onDrag).toHaveBeenCalledTimes(1); - window.dispatchEvent(new MouseEvent('touchend', {clientX: 150, clientY: 106})); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: 150, clientY: 106})); - expect(onDrag).toHaveBeenCalledTimes(1); // Still 1 - }); - - test('start -> end calls dragEnd callback after resetting internal state', done => { - onDragEnd = () => { - expect(dragRecognizer.gestureInProgress()).toBe(false); - done(); - }; - dragRecognizer = new DragRecognizer({onDrag, onDragEnd}); - dragRecognizer.start({clientX: 100, clientY: 100}); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: 150, clientY: 106})); - window.dispatchEvent(new MouseEvent('touchend', {clientX: 150, clientY: 106})); - }); - - test('start -> reset unbinds', () => { - dragRecognizer.start({clientX: 100, clientY: 100}); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: 150, clientY: 106})); - expect(onDrag).toHaveBeenCalledTimes(1); - dragRecognizer.reset(); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: 150, clientY: 106})); - expect(onDrag).toHaveBeenCalledTimes(1); // Still 1 - }); - - test('scrolls do not call prevent default', () => { - dragRecognizer.start({clientX: 100, clientY: 100}); - const event = new MouseEvent('touchmove', {clientX: 100, clientY: 110}); - event.preventDefault = jest.fn(); - window.dispatchEvent(event); - expect(event.preventDefault).toHaveBeenCalledTimes(0); - }); - - test('confirmed drags have preventDefault called on them', () => { - dragRecognizer.start({clientX: 100, clientY: 100}); - const event = new MouseEvent('touchmove', {clientX: 150, clientY: 106}); - event.preventDefault = jest.fn(); - window.dispatchEvent(event); - expect(event.preventDefault).toHaveBeenCalled(); - }); - - test('multiple horizontal drag angles', () => { - // +45 from horizontal => drag - dragRecognizer.start({clientX: 0, clientY: 0}); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: 10, clientY: 10})); - expect(onDrag).toHaveBeenCalledTimes(1); - dragRecognizer.reset(); - - // -45 from horizontal => drag - dragRecognizer.start({clientX: 0, clientY: 0}); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: 10, clientY: -10})); - expect(onDrag).toHaveBeenCalledTimes(2); - dragRecognizer.reset(); - - // +135 from horizontal => drag - dragRecognizer.start({clientX: 0, clientY: 0}); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: -10, clientY: 10})); - expect(onDrag).toHaveBeenCalledTimes(3); - dragRecognizer.reset(); - - // -135 from horizontal => drag - dragRecognizer.start({clientX: 0, clientY: 0}); - window.dispatchEvent(new MouseEvent('touchmove', {clientX: -10, clientY: -10})); - expect(onDrag).toHaveBeenCalledTimes(4); - dragRecognizer.reset(); - }); -}); diff --git a/test/unit/util/drag-utils.test.js b/test/unit/util/drag-utils.test.js deleted file mode 100644 index e7fe2797f9a..00000000000 --- a/test/unit/util/drag-utils.test.js +++ /dev/null @@ -1,74 +0,0 @@ -import {indexForPositionOnList} from '../../../src/lib/drag-utils'; - -const box = (top, right, bottom, left) => ({top, right, bottom, left}); - -describe('indexForPositionOnList', () => { - test('returns null when not given any boxes', () => { - expect(indexForPositionOnList({x: 0, y: 0}, [])).toEqual(null); - }); - - test('wrapped list with incomplete last row LTR', () => { - const boxes = [ - box(0, 100, 100, 0), // index: 0 - box(0, 200, 100, 100), // index: 1 - box(0, 300, 100, 200), // index: 2 - box(100, 100, 200, 0), // index: 3 (second row) - box(100, 200, 200, 100) // index: 4 (second row, left incomplete intentionally) - ]; - - // Inside the second box. - expect(indexForPositionOnList({x: 150, y: 50}, boxes, false)).toEqual(1); - - // On the border edge of the first and second box. Given to the first box. - expect(indexForPositionOnList({x: 100, y: 50}, boxes, false)).toEqual(0); - - // Off the top/left edge. - expect(indexForPositionOnList({x: -100, y: -100}, boxes, false)).toEqual(0); - - // Off the left edge, in the second row. - expect(indexForPositionOnList({x: -100, y: 175}, boxes, false)).toEqual(3); - - // Off the right edge, in the first row. - expect(indexForPositionOnList({x: 400, y: 75}, boxes, false)).toEqual(2); - - // Off the top edge, middle of second item. - expect(indexForPositionOnList({x: 150, y: -75}, boxes, false)).toEqual(1); - - // Within the right edge bounds, but on the second (incomplete) row. - // This tests that wrapped lists with incomplete final rows work correctly. - expect(indexForPositionOnList({x: 375, y: 175}, boxes, false)).toEqual(4); - }); - - test('wrapped list with incomplete last row RTL', () => { - const boxes = [ - box(0, 0, 100, -100), // index: 0 - box(0, -100, 100, -200), // index: 1 - box(0, -200, 100, -300), // index: 2 - box(100, 0, 200, -100), // index: 3 (second row) - box(100, -100, 200, -200) // index: 4 (second row, left incomplete intentionally) - ]; - - // Inside the second box. - expect(indexForPositionOnList({x: -150, y: 50}, boxes, true)).toEqual(1); - - // On the border edge of the first and second box. Given to the first box. - expect(indexForPositionOnList({x: -100, y: 50}, boxes, true)).toEqual(0); - - // Off the top/right edge. - expect(indexForPositionOnList({x: 100, y: -100}, boxes, true)).toEqual(0); - - // Off the right edge, in the second row. - expect(indexForPositionOnList({x: 100, y: 175}, boxes, true)).toEqual(3); - - // Off the left edge, in the first row. - expect(indexForPositionOnList({x: -400, y: 75}, boxes, true)).toEqual(2); - - // Off the top edge, middle of second item. - expect(indexForPositionOnList({x: -150, y: -75}, boxes, true)).toEqual(1); - - // Within the left edge bounds, but on the second (incomplete) row. - // This tests that wrapped lists with incomplete final rows work correctly. - expect(indexForPositionOnList({x: -375, y: 175}, boxes, true)).toEqual(4); - }); - -}); diff --git a/test/unit/util/get-costume-url.test.js b/test/unit/util/get-costume-url.test.js deleted file mode 100644 index 93154acca26..00000000000 --- a/test/unit/util/get-costume-url.test.js +++ /dev/null @@ -1,11 +0,0 @@ -import {HAS_FONT_REGEXP} from '../../../src/lib/get-costume-url'; - -describe('SVG Font Parsing', () => { - test('Has font regexp works', () => { - expect('font-family="Sans Serif"'.match(HAS_FONT_REGEXP)).toBeTruthy(); - expect('font-family="none" font-family="Sans Serif"'.match(HAS_FONT_REGEXP)).toBeTruthy(); - expect('font-family = "Sans Serif"'.match(HAS_FONT_REGEXP)).toBeTruthy(); - - expect('font-family="none"'.match(HAS_FONT_REGEXP)).toBeFalsy(); - }); -}); diff --git a/test/unit/util/hash-project-loader-hoc.test.jsx b/test/unit/util/hash-project-loader-hoc.test.jsx deleted file mode 100644 index 208d1db16df..00000000000 --- a/test/unit/util/hash-project-loader-hoc.test.jsx +++ /dev/null @@ -1,81 +0,0 @@ -import React from 'react'; -import configureStore from 'redux-mock-store'; -import {mount} from 'enzyme'; - -import HashParserHOC from '../../../src/lib/hash-parser-hoc.jsx'; - -jest.mock('react-ga'); - -describe('HashParserHOC', () => { - const mockStore = configureStore(); - let store; - - beforeEach(() => { - store = mockStore({ - scratchGui: { - projectState: {} - } - }); - }); - - test('when there is a hash, it passes the hash as projectId', () => { - const Component = ({projectId}) =>
    {projectId}
    ; - const WrappedComponent = HashParserHOC(Component); - window.location.hash = '#1234567'; - const mockSetProjectIdFunc = jest.fn(); - mount( - - ); - expect(mockSetProjectIdFunc.mock.calls[0][0]).toBe('1234567'); - }); - - test('when there is no hash, it passes 0 as the projectId', () => { - const Component = ({projectId}) =>
    {projectId}
    ; - const WrappedComponent = HashParserHOC(Component); - window.location.hash = ''; - const mockSetProjectIdFunc = jest.fn(); - mount( - - ); - expect(mockSetProjectIdFunc.mock.calls[0][0]).toBe('0'); - }); - - test('when the hash is not a number, it passes 0 as projectId', () => { - const Component = ({projectId}) =>
    {projectId}
    ; - const WrappedComponent = HashParserHOC(Component); - window.location.hash = '#winning'; - const mockSetProjectIdFunc = jest.fn(); - mount( - - ); - expect(mockSetProjectIdFunc.mock.calls[0][0]).toBe('0'); - }); - - test('when hash change happens, the projectId state is changed', () => { - const Component = ({projectId}) =>
    {projectId}
    ; - const WrappedComponent = HashParserHOC(Component); - window.location.hash = ''; - const mockSetProjectIdFunc = jest.fn(); - const mounted = mount( - - ); - window.location.hash = '#1234567'; - mounted - .childAt(0) - .instance() - .handleHashChange(); - expect(mockSetProjectIdFunc.mock.calls.length).toBe(2); - }); -}); diff --git a/test/unit/util/opcode-labels.test.js b/test/unit/util/opcode-labels.test.js deleted file mode 100644 index 78bdfeaa7ad..00000000000 --- a/test/unit/util/opcode-labels.test.js +++ /dev/null @@ -1,15 +0,0 @@ -import opcodeLabels from '../../../src/lib/opcode-labels'; - -describe('Opcode Labels', () => { - test('day of week label', () => { - const labelFun = opcodeLabels.getLabel('sensing_current').labelFn; - expect(labelFun({CURRENTMENU: 'dayofweek'})).toBe('day of week'); - expect(labelFun({CURRENTMENU: 'DAYOFWEEK'})).toBe('day of week'); - }); - - test('unspecified opcodes default to extension category and opcode as label', () => { - const labelInfo = opcodeLabels.getLabel('music_getTempo'); - expect(labelInfo.label).toBe('music_getTempo'); - expect(labelInfo.category).toBe('extension'); - }); -}); diff --git a/test/unit/util/project-fetcher-hoc.test.jsx b/test/unit/util/project-fetcher-hoc.test.jsx deleted file mode 100644 index 0b34bafc8a9..00000000000 --- a/test/unit/util/project-fetcher-hoc.test.jsx +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react'; -import configureStore from 'redux-mock-store'; - -import {mountWithIntl} from '../../helpers/intl-helpers.jsx'; - -import ProjectFetcherHOC from '../../../src/lib/project-fetcher-hoc.jsx'; -import storage from '../../../src/lib/storage'; -import {LoadingState} from '../../../src/reducers/project-state'; - -jest.mock('react-ga'); - -describe('ProjectFetcherHOC', () => { - const mockStore = configureStore(); - let store; - - beforeEach(() => { - store = mockStore({ - scratchGui: { - projectState: {}, - vm: { - clear: () => {}, - stop: () => {} - } - } - }); - }); - - test.skip('when there is an id, it tries to update the store with that id', () => { - const Component = ({projectId}) =>
    {projectId}
    ; - const WrappedComponent = ProjectFetcherHOC(Component); - const mockSetProjectIdFunc = jest.fn(); - mountWithIntl( - - ); - expect(mockSetProjectIdFunc.mock.calls[0][0]).toBe('100'); - }); - test.skip('when there is a reduxProjectId and isFetchingWithProjectId is true, it loads the project', () => { - const mockedOnFetchedProject = jest.fn(); - const originalLoad = storage.load; - storage.load = jest.fn((type, id) => Promise.resolve({data: id})); - const Component = ({projectId}) =>
    {projectId}
    ; - const WrappedComponent = ProjectFetcherHOC(Component); - const mounted = mountWithIntl( - - ); - mounted.setProps({ - reduxProjectId: '100', - isFetchingWithId: true, - loadingState: LoadingState.FETCHING_WITH_ID - }); - expect(storage.load).toHaveBeenLastCalledWith( - storage.AssetType.Project, '100', storage.DataFormat.JSON - ); - storage.load = originalLoad; - // nextTick needed since storage.load is async, and onFetchedProject is called in its then() - process.nextTick( - () => expect(mockedOnFetchedProject) - .toHaveBeenLastCalledWith('100', LoadingState.FETCHING_WITH_ID) - ); - }); -}); diff --git a/test/unit/util/project-saver-hoc.test.jsx b/test/unit/util/project-saver-hoc.test.jsx deleted file mode 100644 index f5ac7b680e6..00000000000 --- a/test/unit/util/project-saver-hoc.test.jsx +++ /dev/null @@ -1,491 +0,0 @@ -import 'web-audio-test-api'; - -import React from 'react'; -import configureStore from 'redux-mock-store'; -import {mount} from 'enzyme'; -import {LoadingState} from '../../../src/reducers/project-state'; -import VM from 'scratch-vm'; - -import projectSaverHOC from '../../../src/lib/project-saver-hoc.jsx'; - -describe('projectSaverHOC', () => { - const mockStore = configureStore(); - let store; - let vm; - - beforeEach(() => { - store = mockStore({ - scratchGui: { - projectChanged: false, - projectState: {}, - projectTitle: 'Scratch Project', - timeout: { - autoSaveTimeoutId: null - } - }, - locales: { - locale: 'en' - } - }); - vm = new VM(); - jest.useFakeTimers(); - }); - - test('if canSave becomes true when showing a project with an id, project will be saved', () => { - const mockedUpdateProject = jest.fn(); - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mounted = mount( - - ); - mounted.setProps({ - canSave: true, - isShowingSaveable: true - }); - expect(mockedUpdateProject).toHaveBeenCalled(); - }); - - test('if canSave is already true and we show a project with an id, project will NOT be saved', () => { - const mockedSaveProject = jest.fn(); - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mounted = mount( - - ); - mounted.setProps({ - canSave: true, - isShowingWithId: true, - loadingState: LoadingState.SHOWING_WITH_ID - }); - expect(mockedSaveProject).not.toHaveBeenCalled(); - }); - - test('if canSave is false when showing a project without an id, project will NOT be created', () => { - const mockedCreateProject = jest.fn(); - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mounted = mount( - - ); - mounted.setProps({ - isShowingWithoutId: true, - loadingState: LoadingState.SHOWING_WITHOUT_ID - }); - expect(mockedCreateProject).not.toHaveBeenCalled(); - }); - - test('if canCreateNew becomes true when showing a project without an id, project will be created', () => { - const mockedCreateProject = jest.fn(); - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mounted = mount( - - ); - mounted.setProps({ - canCreateNew: true - }); - expect(mockedCreateProject).toHaveBeenCalled(); - }); - - test('if canCreateNew is true and we transition to showing new project, project will be created', () => { - const mockedCreateProject = jest.fn(); - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mounted = mount( - - ); - mounted.setProps({ - isShowingWithoutId: true, - loadingState: LoadingState.SHOWING_WITHOUT_ID - }); - expect(mockedCreateProject).toHaveBeenCalled(); - }); - - test('if we enter creating new state, vm project should be requested', () => { - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mockedStoreProject = jest.fn(() => Promise.resolve()); - // The first wrapper is redux's Connect HOC - WrappedComponent.WrappedComponent.prototype.storeProject = mockedStoreProject; - const mounted = mount( - - ); - mounted.setProps({ - isCreatingNew: true, - loadingState: LoadingState.CREATING_NEW - }); - expect(mockedStoreProject).toHaveBeenCalled(); - }); - - test('if we enter remixing state, vm project should be requested, and alert should show', () => { - const mockedShowCreatingRemixAlert = jest.fn(); - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mockedStoreProject = jest.fn(() => Promise.resolve()); - // The first wrapper is redux's Connect HOC - WrappedComponent.WrappedComponent.prototype.storeProject = mockedStoreProject; - const mounted = mount( - - ); - mounted.setProps({ - isRemixing: true, - loadingState: LoadingState.REMIXING - }); - expect(mockedStoreProject).toHaveBeenCalled(); - expect(mockedShowCreatingRemixAlert).toHaveBeenCalled(); - }); - - test('if we enter creating copy state, vm project should be requested, and alert should show', () => { - const mockedShowCreatingCopyAlert = jest.fn(); - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mockedStoreProject = jest.fn(() => Promise.resolve()); - // The first wrapper is redux's Connect HOC - WrappedComponent.WrappedComponent.prototype.storeProject = mockedStoreProject; - const mounted = mount( - - ); - mounted.setProps({ - isCreatingCopy: true, - loadingState: LoadingState.CREATING_COPY - }); - expect(mockedStoreProject).toHaveBeenCalled(); - expect(mockedShowCreatingCopyAlert).toHaveBeenCalled(); - }); - - test('if we enter updating/saving state, vm project should be requested', () => { - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mockedStoreProject = jest.fn(() => Promise.resolve()); - // The first wrapper is redux's Connect HOC - WrappedComponent.WrappedComponent.prototype.storeProject = mockedStoreProject; - const mounted = mount( - - ); - mounted.setProps({ - isUpdating: true, - loadingState: LoadingState.MANUAL_UPDATING - }); - expect(mockedStoreProject).toHaveBeenCalled(); - }); - - test('if we are already in updating/saving state, vm project ' + - 'should NOT requested, alert should NOT show', () => { - const mockedShowCreatingAlert = jest.fn(); - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mockedStoreProject = jest.fn(() => Promise.resolve()); - // The first wrapper is redux's Connect HOC - WrappedComponent.WrappedComponent.prototype.storeProject = mockedStoreProject; - const mounted = mount( - - ); - mounted.setProps({ - isUpdating: true, - loadingState: LoadingState.AUTO_UPDATING, - reduxProjectId: '99' // random change to force a re-render and componentDidUpdate - }); - expect(mockedStoreProject).not.toHaveBeenCalled(); - expect(mockedShowCreatingAlert).not.toHaveBeenCalled(); - }); - - test('if user saves, inline saving alert should show', () => { - const mockedShowSavingAlert = jest.fn(); - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mounted = mount( - - ); - mounted.setProps({ - isManualUpdating: true, - isUpdating: true - }); - expect(mockedShowSavingAlert).toHaveBeenCalled(); - }); - - test('if project is changed, it should autosave after interval', () => { - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mockedAutoUpdate = jest.fn(() => Promise.resolve()); - const mounted = mount( - - ); - mounted.setProps({ - projectChanged: true - }); - // Fast-forward until all timers have been executed - jest.runAllTimers(); - expect(mockedAutoUpdate).toHaveBeenCalled(); - }); - - test('if project is changed several times in a row, it should only autosave once', () => { - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mockedAutoUpdate = jest.fn(() => Promise.resolve()); - const mounted = mount( - - ); - mounted.setProps({ - projectChanged: true, - reduxProjectTitle: 'a' - }); - mounted.setProps({ - projectChanged: true, - reduxProjectTitle: 'b' - }); - mounted.setProps({ - projectChanged: true, - reduxProjectTitle: 'c' - }); - // Fast-forward until all timers have been executed - jest.runAllTimers(); - expect(mockedAutoUpdate).toHaveBeenCalledTimes(1); - }); - - test('if project is not changed, it should not autosave after interval', () => { - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const mockedAutoUpdate = jest.fn(() => Promise.resolve()); - const mounted = mount( - - ); - mounted.setProps({ - projectChanged: false - }); - // Fast-forward until all timers have been executed - jest.runAllTimers(); - expect(mockedAutoUpdate).not.toHaveBeenCalled(); - }); - - test('when starting to remix, onRemixing should be called with param true', () => { - const mockedOnRemixing = jest.fn(); - const mockedStoreProject = jest.fn(() => Promise.resolve()); - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - WrappedComponent.WrappedComponent.prototype.storeProject = mockedStoreProject; - const mounted = mount( - - ); - mounted.setProps({ - isRemixing: true - }); - expect(mockedOnRemixing).toHaveBeenCalledWith(true); - }); - - test('when starting to remix, onRemixing should be called with param false', () => { - const mockedOnRemixing = jest.fn(); - const mockedStoreProject = jest.fn(() => Promise.resolve()); - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - WrappedComponent.WrappedComponent.prototype.storeProject = mockedStoreProject; - const mounted = mount( - - ); - mounted.setProps({ - isRemixing: false - }); - expect(mockedOnRemixing).toHaveBeenCalledWith(false); - }); - - test('uses onSetProjectThumbnailer on mount/unmount', () => { - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const setThumb = jest.fn(); - const mounted = mount( - - ); - // Set project thumbnailer should be called on mount - expect(setThumb).toHaveBeenCalledTimes(1); - - // And it should not pass that function on to wrapped element - expect(mounted.find(Component).props().onSetProjectThumbnailer).toBeUndefined(); - - // Unmounting should call it again with null - mounted.unmount(); - expect(setThumb).toHaveBeenCalledTimes(2); - expect(setThumb.mock.calls[1][0]).toBe(null); - }); - - test('uses onSetProjectSaver on mount/unmount', () => { - const Component = () =>
    ; - const WrappedComponent = projectSaverHOC(Component); - const setSaver = jest.fn(); - const mounted = mount( - - ); - // Set project saver should be called on mount - expect(setSaver).toHaveBeenCalledTimes(1); - - // And it should not pass that function on to wrapped element - expect(mounted.find(Component).props().onSetProjectSaver).toBeUndefined(); - - // Unmounting should call it again with null - mounted.unmount(); - expect(setSaver).toHaveBeenCalledTimes(2); - expect(setSaver.mock.calls[1][0]).toBe(null); - }); -}); diff --git a/test/unit/util/sb-file-uploader-hoc.test.jsx b/test/unit/util/sb-file-uploader-hoc.test.jsx deleted file mode 100644 index ab286ed4432..00000000000 --- a/test/unit/util/sb-file-uploader-hoc.test.jsx +++ /dev/null @@ -1,110 +0,0 @@ -import 'web-audio-test-api'; - -import React from 'react'; -import configureStore from 'redux-mock-store'; -import {mountWithIntl, shallowWithIntl} from '../../helpers/intl-helpers.jsx'; -import {LoadingState} from '../../../src/reducers/project-state'; -import VM from 'scratch-vm'; - -import SBFileUploaderHOC from '../../../src/lib/sb-file-uploader-hoc.jsx'; - -describe('SBFileUploaderHOC', () => { - const mockStore = configureStore(); - let store; - let vm; - - // Wrap this in a function so it gets test specific states and can be reused. - const getContainer = function () { - const Component = () =>
    ; - return SBFileUploaderHOC(Component); - }; - - const shallowMountWithContext = component => ( - shallowWithIntl(component, {context: {store}}) - ); - - const unwrappedInstance = () => { - const WrappedComponent = getContainer(); - // default starting state: looking at a project you created, not logged in - const wrapper = shallowMountWithContext( - - ); - return wrapper - .dive() // unwrap intl - .dive() // unwrap redux Connect(SBFileUploaderComponent) - .instance(); // SBFileUploaderComponent - }; - - beforeEach(() => { - vm = new VM(); - store = mockStore({ - scratchGui: { - projectState: { - loadingState: LoadingState.SHOWING_WITHOUT_ID - }, - vm: {} - }, - locales: { - locale: 'en' - } - }); - }); - - test('correctly sets title with .sb3 filename', () => { - const projectName = unwrappedInstance().getProjectTitleFromFilename('my project is great.sb3'); - expect(projectName).toBe('my project is great'); - }); - - test('correctly sets title with .sb2 filename', () => { - const projectName = unwrappedInstance().getProjectTitleFromFilename('my project is great.sb2'); - expect(projectName).toBe('my project is great'); - }); - - test('correctly sets title with .sb filename', () => { - const projectName = unwrappedInstance().getProjectTitleFromFilename('my project is great.sb'); - expect(projectName).toBe('my project is great'); - }); - - test('sets blank title with filename with no extension', () => { - const projectName = unwrappedInstance().getProjectTitleFromFilename('my project is great'); - expect(projectName).toBe(''); - }); - - /* tw: test is broken by flag required to fix issues with multiple instances - test('if isLoadingUpload becomes true, without fileToUpload set, will call cancelFileUpload', () => { - const mockedCancelFileUpload = jest.fn(); - const WrappedComponent = getContainer(); - const mounted = mountWithIntl( - - ); - mounted.setProps({ - isLoadingUpload: true - }); - expect(mockedCancelFileUpload).toHaveBeenCalled(); - }); - */ -}); diff --git a/test/unit/util/themes.test.js b/test/unit/util/themes.test.js deleted file mode 100644 index a815f9c5986..00000000000 --- a/test/unit/util/themes.test.js +++ /dev/null @@ -1,165 +0,0 @@ -import { - DARK_THEME, - defaultColors, - DEFAULT_THEME, - getColorsForTheme, - HIGH_CONTRAST_THEME -} from '../../../src/lib/themes'; -import {injectExtensionBlockTheme, injectExtensionCategoryTheme} from '../../../src/lib/themes/blockHelpers'; -import {detectTheme, persistTheme} from '../../../src/lib/themes/themePersistance'; - -jest.mock('../../../src/lib/themes/default'); -jest.mock('../../../src/lib/themes/dark'); - -describe('themes', () => { - let serializeToString; - - describe('core functionality', () => { - test('provides the default theme colors', () => { - expect(defaultColors.motion.primary).toEqual('#111111'); - }); - - test('returns the dark mode', () => { - const colors = getColorsForTheme(DARK_THEME); - - expect(colors.motion.primary).toEqual('#AAAAAA'); - }); - - test('uses default theme colors when not specified', () => { - const colors = getColorsForTheme(DARK_THEME); - - expect(colors.motion.secondary).toEqual('#222222'); - }); - }); - - describe('block helpers', () => { - beforeEach(() => { - serializeToString = jest.fn(() => 'mocked xml'); - - global.XMLSerializer = () => ({ - serializeToString - }); - }); - - test('updates extension block colors based on theme', () => { - const blockInfoJson = { - type: 'dummy_block', - colour: '#0FBD8C', - colourSecondary: '#0DA57A', - colourTertiary: '#0B8E69' - }; - - const updated = injectExtensionBlockTheme(blockInfoJson, DARK_THEME); - - expect(updated).toEqual({ - type: 'dummy_block', - colour: '#FFFFFF', - colourSecondary: '#EEEEEE', - colourTertiary: '#DDDDDD' - }); - // The original value was not modified - expect(blockInfoJson.colour).toBe('#0FBD8C'); - }); - - test('updates extension block icon based on theme', () => { - const blockInfoJson = { - type: 'pen_block', - args0: [ - { - type: 'field_image', - src: 'original' - } - ], - colour: '#0FBD8C', - colourSecondary: '#0DA57A', - colourTertiary: '#0B8E69' - }; - - const updated = injectExtensionBlockTheme(blockInfoJson, DARK_THEME); - - expect(updated).toEqual({ - type: 'pen_block', - args0: [ - { - type: 'field_image', - src: 'darkPenIcon' - } - ], - colour: '#FFFFFF', - colourSecondary: '#EEEEEE', - colourTertiary: '#DDDDDD' - }); - // The original value was not modified - expect(blockInfoJson.args0[0].src).toBe('original'); - }); - - test('bypasses updates if using the default theme', () => { - const blockInfoJson = { - type: 'dummy_block', - colour: '#0FBD8C', - colourSecondary: '#0DA57A', - colourTertiary: '#0B8E69' - }; - - const updated = injectExtensionBlockTheme(blockInfoJson, DEFAULT_THEME); - - expect(updated).toEqual({ - type: 'dummy_block', - colour: '#0FBD8C', - colourSecondary: '#0DA57A', - colourTertiary: '#0B8E69' - }); - }); - - test('updates extension category based on theme', () => { - const dynamicBlockXML = [ - { - id: 'pen', - xml: '' - } - ]; - - injectExtensionCategoryTheme(dynamicBlockXML, DARK_THEME); - - // XMLSerializer is not available outside the browser. - // Verify the mocked XMLSerializer.serializeToString is called with updated colors. - expect(serializeToString.mock.calls[0][0].documentElement.getAttribute('colour')).toBe('#FFFFFF'); - expect(serializeToString.mock.calls[0][0].documentElement.getAttribute('secondaryColour')).toBe('#DDDDDD'); - expect(serializeToString.mock.calls[0][0].documentElement.getAttribute('iconURI')).toBe('darkPenIcon'); - }); - }); - - describe('theme persistance', () => { - test('returns the theme stored in a cookie', () => { - window.document.cookie = `scratchtheme=${HIGH_CONTRAST_THEME}`; - - const theme = detectTheme(); - - expect(theme).toEqual(HIGH_CONTRAST_THEME); - }); - - test('returns the system theme when no cookie', () => { - window.document.cookie = 'scratchtheme='; - - const theme = detectTheme(); - - expect(theme).toEqual(DEFAULT_THEME); - }); - - test('persists theme to cookie', () => { - window.document.cookie = 'scratchtheme='; - - persistTheme(HIGH_CONTRAST_THEME); - - expect(window.document.cookie).toEqual(`scratchtheme=${HIGH_CONTRAST_THEME}`); - }); - - test('clears theme when matching system preferences', () => { - window.document.cookie = `scratchtheme=${HIGH_CONTRAST_THEME}`; - - persistTheme(DEFAULT_THEME); - - expect(window.document.cookie).toEqual('scratchtheme='); - }); - }); -}); diff --git a/test/unit/util/throttled-property-hoc.test.jsx b/test/unit/util/throttled-property-hoc.test.jsx deleted file mode 100644 index c24f937a357..00000000000 --- a/test/unit/util/throttled-property-hoc.test.jsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; -import {mount} from 'enzyme'; - -import ThrottledPropertyHOC from '../../../src/lib/throttled-property-hoc.jsx'; - -describe('VMListenerHOC', () => { - let mounted; - const throttleTime = 500; - beforeEach(() => { - const Component = ({propToThrottle, doNotThrottle}) => ( - - ); - const WrappedComponent = ThrottledPropertyHOC('propToThrottle', throttleTime)(Component); - - global.Date.now = () => 0; - - mounted = mount( - - ); - }); - - test('it passes the props on initial render ', () => { - expect(mounted.find('[value=0]').exists()).toEqual(true); - expect(mounted.find('[name="oldvalue"]').exists()).toEqual(true); - }); - - test('it does not rerender if throttled prop is updated too soon', () => { - global.Date.now = () => throttleTime / 2; - mounted.setProps({propToThrottle: 1}); - mounted.update(); - expect(mounted.find('[value=0]').exists()).toEqual(true); - }); - - test('it does rerender if throttled prop is updated after throttle timeout', () => { - global.Date.now = () => throttleTime * 2; - mounted.setProps({propToThrottle: 1}); - mounted.update(); - expect(mounted.find('[value=1]').exists()).toEqual(true); - }); - - test('it does rerender if a non-throttled prop is changed', () => { - global.Date.now = () => throttleTime / 2; - mounted.setProps({doNotThrottle: 'newvalue', propToThrottle: 2}); - mounted.update(); - expect(mounted.find('[name="newvalue"]').exists()).toEqual(true); - expect(mounted.find('[value=2]').exists()).toEqual(true); - }); -}); diff --git a/test/unit/util/translate-video.test.js b/test/unit/util/translate-video.test.js deleted file mode 100644 index 27d92d8425d..00000000000 --- a/test/unit/util/translate-video.test.js +++ /dev/null @@ -1,25 +0,0 @@ -describe('no-op', () => { - test('no-op', () => {}); -}); -// tw: we intentionally break this test -/* -import {translateVideo} from '../../../src/lib/libraries/decks/translate-video.js'; - -describe('translateVideo', () => { - test('returns the id if it is not found', () => { - expect(translateVideo('not-a-key', 'en')).toEqual('not-a-key'); - }); - - test('returns the expected id for Japanese', () => { - expect(translateVideo('intro-move-sayhello', 'ja')).toEqual('v2c2f3y2sc'); - }); - - test('returns the expected id for English', () => { - expect(translateVideo('intro-move-sayhello', 'en')).toEqual('rpjvs3v9gj'); - }); - - test('returns the English id for non-existent locales', () => { - expect(translateVideo('intro-move-sayhello', 'yum')).toEqual('rpjvs3v9gj'); - }); -}); -*/ diff --git a/test/unit/util/tutorial-from-url.test.js b/test/unit/util/tutorial-from-url.test.js deleted file mode 100644 index 454bc8725c9..00000000000 --- a/test/unit/util/tutorial-from-url.test.js +++ /dev/null @@ -1,47 +0,0 @@ -jest.mock('../../../src/lib/analytics.js', () => ({ - event: () => {} -})); - -jest.mock('../../../src/lib/libraries/decks/index.jsx', () => ({ - noUrlId: {}, - foo: {urlId: 'one'}, - noUrlIdSandwich: {} -})); - -import queryString from 'query-string'; -import {detectTutorialId} from '../../../src/lib/tutorial-from-url.js'; - -test('returns the tutorial ID if the urlId matches', () => { - const queryParams = queryString.parse('?tutorial=one'); - expect(detectTutorialId(queryParams)).toBe('foo'); -}); - -test('returns null if no matching urlId', () => { - const queryParams = queryString.parse('?tutorial=10'); - expect(detectTutorialId(queryParams)).toBe(null); -}); - -test('returns null if empty template', () => { - const queryParams = queryString.parse('?tutorial='); - expect(detectTutorialId(queryParams)).toBe(null); -}); - -test('returns null if no query param', () => { - const queryParams = queryString.parse(''); - expect(detectTutorialId(queryParams)).toBe(null); -}); - -test('returns null if unrecognized template', () => { - const queryParams = queryString.parse('?tutorial=asdf'); - expect(detectTutorialId(queryParams)).toBe(null); -}); - -test('takes the first of multiple', () => { - const queryParams = queryString.parse('?tutorial=one&tutorial=two'); - expect(detectTutorialId(queryParams)).toBe('foo'); -}); - -test('returns all for the tutorial library shortcut', () => { - const queryParams = queryString.parse('?tutorial=all'); - expect(detectTutorialId(queryParams)).toBe('all'); -}); diff --git a/test/unit/util/vm-listener-hoc.test.jsx b/test/unit/util/vm-listener-hoc.test.jsx deleted file mode 100644 index 407573c0bdd..00000000000 --- a/test/unit/util/vm-listener-hoc.test.jsx +++ /dev/null @@ -1,186 +0,0 @@ -import React from 'react'; -import configureStore from 'redux-mock-store'; -import {mount} from 'enzyme'; -import VM from 'scratch-vm'; - -import vmListenerHOC from '../../../src/lib/vm-listener-hoc.jsx'; - -describe('VMListenerHOC', () => { - const mockStore = configureStore(); - let store; - let vm; - - beforeEach(() => { - vm = new VM(); - store = mockStore({ - scratchGui: { - mode: {}, - modals: {}, - vm: vm, - tw: {hasCloudVariables: false} - } - }); - }); - - test('vm green flag event is bound to the passed in prop callback', () => { - const Component = () => (
    ); - const WrappedComponent = vmListenerHOC(Component); - const onGreenFlag = jest.fn(); - mount( - - ); - expect(onGreenFlag).not.toHaveBeenCalled(); - vm.emit('PROJECT_START'); - expect(onGreenFlag).toHaveBeenCalled(); - }); - - test('onGreenFlag is not passed to the children', () => { - const Component = () => (
    ); - const WrappedComponent = vmListenerHOC(Component); - const wrapper = mount( - - ); - const child = wrapper.find(Component); - expect(child.props().onGreenFlag).toBeUndefined(); - }); - - test('targetsUpdate event from vm triggers targets update action', () => { - const Component = () => (
    ); - const WrappedComponent = vmListenerHOC(Component); - mount( - - ); - const targetList = []; - const editingTarget = 'id'; - vm.emit('targetsUpdate', {targetList, editingTarget}); - const actions = store.getActions(); - expect(actions[0].type).toEqual('scratch-gui/targets/UPDATE_TARGET_LIST'); - expect(actions[0].targets).toEqual(targetList); - expect(actions[0].editingTarget).toEqual(editingTarget); - }); - - test('targetsUpdate does not dispatch if the sound recorder is visible', () => { - const Component = () => (
    ); - const WrappedComponent = vmListenerHOC(Component); - store = mockStore({ - scratchGui: { - mode: {}, - modals: {soundRecorder: true}, - vm: vm, - tw: {hasCloudVariables: false} - } - }); - mount( - - ); - const targetList = []; - const editingTarget = 'id'; - vm.emit('targetsUpdate', {targetList, editingTarget}); - const actions = store.getActions(); - expect(actions.length).toEqual(0); - }); - - test('PROJECT_CHANGED does dispatch if the sound recorder is visible', () => { - const Component = () => (
    ); - const WrappedComponent = vmListenerHOC(Component); - store = mockStore({ - scratchGui: { - mode: {}, - modals: {soundRecorder: true}, - vm: vm, - tw: {hasCloudVariables: false} - } - }); - mount( - - ); - vm.emit('PROJECT_CHANGED'); - const actions = store.getActions(); - expect(actions.length).toEqual(1); - }); - - test('PROJECT_CHANGED does not dispatch if in fullscreen mode', () => { - const Component = () => (
    ); - const WrappedComponent = vmListenerHOC(Component); - store = mockStore({ - scratchGui: { - mode: {isFullScreen: true}, - modals: {soundRecorder: true}, - vm: vm, - tw: {hasCloudVariables: false} - } - }); - mount( - - ); - vm.emit('PROJECT_CHANGED'); - const actions = store.getActions(); - expect(actions.length).toEqual(0); - }); - - test('keypresses go to the vm', () => { - const Component = () => (
    ); - const WrappedComponent = vmListenerHOC(Component); - - // Mock document.addEventListener so we can trigger keypresses manually - // Cannot use the enzyme simulate method because that only works on synthetic events - const eventTriggers = {}; - document.addEventListener = jest.fn((event, cb) => { - eventTriggers[event] = cb; - }); - - vm.postIOData = jest.fn(); - - store = mockStore({ - scratchGui: { - mode: {isFullScreen: true}, - modals: {soundRecorder: true}, - vm: vm, - tw: {hasCloudVariables: false} - } - }); - mount( - - ); - - // keyboard events that do not target the document or body are ignored - eventTriggers.keydown({key: 'A', target: null}); - expect(vm.postIOData).not.toHaveBeenLastCalledWith('keyboard', {key: 'A', isDown: true}); - - // keydown/up with target as the document are sent to the vm via postIOData - eventTriggers.keydown({key: 'A', target: document}); - expect(vm.postIOData).toHaveBeenLastCalledWith('keyboard', {key: 'A', isDown: true}); - - eventTriggers.keyup({key: 'A', target: document}); - expect(vm.postIOData).toHaveBeenLastCalledWith('keyboard', {key: 'A', isDown: false}); - - // When key is 'Dead' e.g. bluetooth keyboards on iOS, it sends keyCode instead - // because the VM can process both named keys or keyCodes as the `key` property - eventTriggers.keyup({key: 'Dead', keyCode: 10, target: document}); - expect(vm.postIOData).toHaveBeenLastCalledWith('keyboard', {key: 10, isDown: false, keyCode: 10}); - }); -}); diff --git a/test/unit/util/vm-manager-hoc.test.jsx b/test/unit/util/vm-manager-hoc.test.jsx deleted file mode 100644 index 17941c053b8..00000000000 --- a/test/unit/util/vm-manager-hoc.test.jsx +++ /dev/null @@ -1,199 +0,0 @@ -/* global WebAudioTestAPI */ -import 'web-audio-test-api'; -WebAudioTestAPI.setState({ - 'AudioContext#resume': 'enabled' -}); - -import React from 'react'; -import configureStore from 'redux-mock-store'; -import {mount} from 'enzyme'; -import VM from 'scratch-vm'; -import {LoadingState} from '../../../src/reducers/project-state'; - -import vmManagerHOC from '../../../src/lib/vm-manager-hoc.jsx'; - -describe('VMManagerHOC', () => { - const mockStore = configureStore(); - let store; - let vm; - - beforeEach(() => { - store = mockStore({ - scratchGui: { - projectState: {}, - mode: {}, - vmStatus: {} - }, - locales: { - locale: '', - messages: {} - } - }); - vm = new VM(); - vm.attachAudioEngine = jest.fn(); - vm.setCompatibilityMode = jest.fn(); - vm.setLocale = jest.fn(); - vm.start = jest.fn(); - }); - test('when it mounts in player mode, the vm is initialized but not started', () => { - const Component = () => (
    ); - const WrappedComponent = vmManagerHOC(Component); - mount( - - ); - expect(vm.attachAudioEngine.mock.calls.length).toBe(1); - expect(vm.setLocale.mock.calls.length).toBe(1); - expect(vm.initialized).toBe(true); - - // But vm should not be started automatically - expect(vm.start).not.toHaveBeenCalled(); - }); - test('when it mounts in editor mode, the vm is initialized and started', () => { - const Component = () => (
    ); - const WrappedComponent = vmManagerHOC(Component); - mount( - - ); - expect(vm.attachAudioEngine.mock.calls.length).toBe(1); - expect(vm.setLocale.mock.calls.length).toBe(1); - expect(vm.initialized).toBe(true); - - expect(vm.start).toHaveBeenCalled(); - }); - test('if it mounts with an initialized vm, it does not reinitialize the vm but will start it', () => { - const Component = () =>
    ; - const WrappedComponent = vmManagerHOC(Component); - vm.initialized = true; - mount( - - ); - expect(vm.attachAudioEngine.mock.calls.length).toBe(0); - expect(vm.setLocale.mock.calls.length).toBe(0); - expect(vm.initialized).toBe(true); - - expect(vm.start).toHaveBeenCalled(); - }); - - test('if it mounts without starting the VM, it can be started by switching to editor mode', () => { - const Component = () =>
    ; - const WrappedComponent = vmManagerHOC(Component); - vm.initialized = true; - const mounted = mount( - - ); - expect(vm.start).not.toHaveBeenCalled(); - mounted.setProps({ - isPlayerOnly: false - }); - expect(vm.start).toHaveBeenCalled(); - }); - test('if it mounts with an initialized and started VM, it does not start again', () => { - const Component = () =>
    ; - const WrappedComponent = vmManagerHOC(Component); - vm.initialized = true; - const mounted = mount( - - ); - expect(vm.start).not.toHaveBeenCalled(); - mounted.setProps({ - isPlayerOnly: false - }); - expect(vm.start).not.toHaveBeenCalled(); - }); - test('if the isLoadingWithId prop becomes true, it loads project data into the vm', () => { - vm.loadProject = jest.fn(() => Promise.resolve()); - const mockedOnLoadedProject = jest.fn(); - const Component = () =>
    ; - const WrappedComponent = vmManagerHOC(Component); - const mounted = mount( - - ); - mounted.setProps({ - canSave: true, - isLoadingWithId: true, - loadingState: LoadingState.LOADING_VM_WITH_ID, - projectData: '100' - }); - expect(vm.loadProject).toHaveBeenLastCalledWith('100'); - // nextTick needed since vm.loadProject is async, and we have to wait for it :/ - process.nextTick(() => ( - expect(mockedOnLoadedProject).toHaveBeenLastCalledWith(LoadingState.LOADING_VM_WITH_ID, true) - )); - }); - test('if the fontsLoaded prop becomes true, it loads project data into the vm', () => { - vm.loadProject = jest.fn(() => Promise.resolve()); - const mockedOnLoadedProject = jest.fn(); - const Component = () =>
    ; - const WrappedComponent = vmManagerHOC(Component); - const mounted = mount( - - ); - mounted.setProps({ - canSave: false, - fontsLoaded: true, - loadingState: LoadingState.LOADING_VM_WITH_ID, - projectData: '100' - }); - expect(vm.loadProject).toHaveBeenLastCalledWith('100'); - // nextTick needed since vm.loadProject is async, and we have to wait for it :/ - process.nextTick(() => ( - expect(mockedOnLoadedProject).toHaveBeenLastCalledWith(LoadingState.LOADING_VM_WITH_ID, false) - )); - }); - test('if the fontsLoaded prop is false, project data is never loaded', () => { - vm.loadProject = jest.fn(() => Promise.resolve()); - const mockedOnLoadedProject = jest.fn(); - const Component = () =>
    ; - const WrappedComponent = vmManagerHOC(Component); - const mounted = mount( - - ); - mounted.setProps({ - loadingState: LoadingState.LOADING_VM_WITH_ID, - projectData: '100' - }); - expect(vm.loadProject).toHaveBeenCalledTimes(0); - process.nextTick(() => expect(mockedOnLoadedProject).toHaveBeenCalledTimes(0)); - }); -});