From 9bb5a9ecc8d2dc91f15d6ad1acc4180e458d5bce Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 20 Feb 2024 16:30:00 +0900 Subject: [PATCH 01/39] =?UTF-8?q?docs=20REQUIREMENTS.md=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: kdb070970@gmail.com <00kang> --- docs/REQUIREMENTS.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/REQUIREMENTS.md diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md new file mode 100644 index 0000000000..9daeafb986 --- /dev/null +++ b/docs/REQUIREMENTS.md @@ -0,0 +1 @@ +test From 656df6c2eca49c16c6b132858296930efee8e76a Mon Sep 17 00:00:00 2001 From: dabin Date: Tue, 20 Feb 2024 16:35:32 +0900 Subject: [PATCH 02/39] docs: test --- docs/REQUIREMENTS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index 9daeafb986..d87cf09cf0 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -1 +1,4 @@ test + + +dabin \ No newline at end of file From 85feae01174bf94bbc1acbb0f19faea6becb21e4 Mon Sep 17 00:00:00 2001 From: dabin Date: Tue, 20 Feb 2024 16:46:52 +0900 Subject: [PATCH 03/39] =?UTF-8?q?docs:=20test=20=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 테스트중입니다 Co-authored-by: vi-wolhwa --- docs/REQUIREMENTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index d87cf09cf0..304bd8ffe0 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -1,4 +1,4 @@ test -dabin \ No newline at end of file +new \ No newline at end of file From a1f435542e87d30269d6e5a81ff770a1a6979cbd Mon Sep 17 00:00:00 2001 From: dabin Date: Tue, 20 Feb 2024 19:11:00 +0900 Subject: [PATCH 04/39] =?UTF-8?q?docs:=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: vi-wolhwa --- docs/REQUIREMENTS.md | 50 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index 304bd8ffe0..b218c8cfb1 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -1,4 +1,50 @@ -test +## 기능 목록 +### 구입 금액 입력 +- [ ] 금액 입력 : 힌트 +- [ ] 전처리 : trim +- [ ] 유효성검사 : 정수, 1000이상 -new \ No newline at end of file +### 구입 금액만큼 로또 발행 +- 발행 수량 + - [ ] 발행 수량 계산 + - [ ] 발행 수량 출력 +- 로또 발행 + - [ ] 1~45 중 난수 6개 추출 : 중복x + - [ ] 오름차순 정렬 + - [ ] 로또 번호 출력 + +### 당첨 번호 입력 +- [ ] 당첨 번호 입력 : 힌트 +- [ ] 전처리 : split(','), trim +- [ ] 유효성검사 : 공백문자열, 개수, 정수, 1~45, 중복x + +### 보너스 번호 입력 +- [ ] 보너스 번호 입력 : 힌트 +- [ ] 전처리 : trim +- [ ] 유효성검사 : 정수, 1~45, excluded(당첨번호) + +### 당첨 결과 분석 +- [ ] 당첨 여부 판단 (등수 별 개수) + - [ ] 로또번호, 당첨번호 비교 + - [ ] 보너스번호 포함 여부 +- [ ] 수익률 계산 +- [ ] 당첨 결과, 수익률 출력 + +### 재시작 여부 +- [ ] 재시작 여부 입력 + - [ ] 전처리 : trim + - [ ] 유효성검사 : included(yYnN) +- [ ] 프로그램 재시작 + +### 예외처리 +- [ ] 예외 발생 시 해당 위치부터 재입력 + +``` +당첨은 1등부터 5등까지 있다. 당첨 기준과 금액은 아래와 같다. +1등: 6개 번호 일치 / 2,000,000,000원 +2등: 5개 번호 + 보너스 번호 일치 / 30,000,000원 +3등: 5개 번호 일치 / 1,500,000원 +4등: 4개 번호 일치 / 50,000원 +5등: 3개 번호 일치 / 5,000원 +``` \ No newline at end of file From e8c8231a78545ac902fd2481adec1dfb4c90e58a Mon Sep 17 00:00:00 2001 From: dabin Date: Tue, 20 Feb 2024 21:06:40 +0900 Subject: [PATCH 05/39] =?UTF-8?q?chore:=20eslint,=20prettier=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20package=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: vi-wolhwa --- .eslintrc.json | 42 +- .prettierrc | 9 + package-lock.json | 11587 +++++++++++++++++++++++++++++--------------- package.json | 14 +- 4 files changed, 7803 insertions(+), 3849 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index e64c369327..4e7e895038 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,5 +1,45 @@ { - "rules": {}, + "rules": { + "max-depth": ["error", 3], + "max-lines-per-function": ["error", { "max": 10 }], + "import/extensions": ["error", { "js": "ignorePackages" }], + "import/order": [ + "error", + { + "groups": [ + "builtin", + "external", + "internal", + ["parent", "sibling"], + "index", + "object", + "type", + "unknown" + ], + "pathGroups": [ + { + "pattern": "next", + "group": "builtin", + "position": "before" + }, + { + "pattern": "@/core/**", + "group": "unknown" + }, + { + "pattern": "**/*.css.ts", + "group": "unknown", + "position": "after" + } + ], + "newlines-between": "always", + "alphabetize": { + "order": "asc", + "caseInsensitive": true + } + } + ] + }, "env": { "es6": true, "node": true diff --git a/.prettierrc b/.prettierrc index 168d9d2a0c..834ffc014f 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,3 +1,12 @@ { + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "trailingComma": "none", + "bracketSpacing": true, + "arrowParens": "always", + "proseWrap": "never", "endOfLine": "auto" } diff --git a/package-lock.json b/package-lock.json index 35ba10f935..3b36dde367 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,28 +1,69 @@ { "name": "javascript-lotto", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@ampproject/remapping": { + "packages": { + "": { + "name": "javascript-lotto", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "@babel/cli": "^7.20.7", + "@babel/core": "^7.20.12", + "@babel/preset-env": "^7.20.2", + "@types/jest": "^29.2.5", + "babel-jest": "^29.3.1", + "babel-loader": "^9.1.2", + "clean-webpack-plugin": "^4.0.0", + "css-loader": "^6.6.0", + "eslint": "^8.2.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0", + "esm": "^3.2.25", + "html-webpack-plugin": "^5.5.0", + "jest": "^29.3.1", + "prettier": "^3.2.5", + "style-loader": "^3.3.1", + "webpack": "^5.75.0", + "webpack-cli": "^5.0.1", + "webpack-dev-server": "^4.7.4" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/cli": { + "node_modules/@babel/cli": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.20.7.tgz", "integrity": "sha512-WylgcELHB66WwQqItxNILsMlaTd8/SO6SgTTjMp4uCI7P4QyH1r3nqgFmO3BfM4AtfniHgFMH3EpYFj/zynBkQ==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/trace-mapping": "^0.3.8", - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", - "chokidar": "^3.4.0", "commander": "^4.0.1", "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.1.0", @@ -30,42 +71,67 @@ "make-dir": "^2.1.0", "slash": "^2.0.0" }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } + "bin": { + "babel": "bin/babel.js", + "babel-external-helpers": "bin/babel-external-helpers.js" + }, + "engines": { + "node": ">=6.9.0" + }, + "optionalDependencies": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", + "chokidar": "^3.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "node_modules/@babel/cli/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, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@babel/cli/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/compat-data": { + "node_modules/@babel/compat-data": { "version": "7.20.14", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/core": { + "node_modules/@babel/core": { "version": "7.20.12", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", "dev": true, - "requires": { + "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.20.7", @@ -82,100 +148,126 @@ "json5": "^2.2.2", "semver": "^6.3.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "requires": { - "@babel/types": "^7.20.7", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/helper-annotate-as-pure": { + "node_modules/@babel/helper-annotate-as-pure": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-compilation-targets": { + "node_modules/@babel/helper-compilation-targets": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", "lru-cache": "^5.1.1", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } + "yallist": "^3.0.2" } }, - "@babel/helper-create-class-features-plugin": { + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.20.12", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz", "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", @@ -184,24 +276,36 @@ "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-regexp-features-plugin": { + "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "regexpu-core": "^5.2.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-define-polyfill-provider": { + "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", "debug": "^4.1.1", @@ -209,73 +313,95 @@ "resolve": "^1.14.2", "semver": "^6.1.2" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "peerDependencies": { + "@babel/core": "^7.4.0-0" } }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-explode-assignable-expression": { + "node_modules/@babel/helper-explode-assignable-expression": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-member-expression-to-functions": { + "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-imports": { + "node_modules/@babel/helper-module-imports": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-transforms": { + "node_modules/@babel/helper-module-transforms": { "version": "7.20.11", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-simple-access": "^7.20.2", @@ -284,528 +410,795 @@ "@babel/template": "^7.20.7", "@babel/traverse": "^7.20.10", "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-optimise-call-expression": { + "node_modules/@babel/helper-optimise-call-expression": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-plugin-utils": { + "node_modules/@babel/helper-plugin-utils": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-remap-async-to-generator": { + "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-wrap-function": "^7.18.9", "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-replace-supers": { + "node_modules/@babel/helper-replace-supers": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", "@babel/template": "^7.20.7", "@babel/traverse": "^7.20.7", "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-simple-access": { + "node_modules/@babel/helper-simple-access": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-skip-transparent-expression-wrappers": { + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-option": { + "node_modules/@babel/helper-validator-option": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-wrap-function": { + "node_modules/@babel/helper-wrap-function": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", "@babel/traverse": "^7.20.5", "@babel/types": "^7.20.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helpers": { + "node_modules/@babel/helpers": { "version": "7.20.13", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", "dev": true, - "requires": { + "dependencies": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.20.13", "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/parser": { - "version": "7.20.15", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", - "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", - "dev": true + "node_modules/@babel/parser": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-proposal-optional-chaining": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "@babel/plugin-proposal-async-generator-functions": { + "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-class-properties": { + "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-class-static-block": { + "node_modules/@babel/plugin-proposal-class-static-block": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.20.7", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "@babel/plugin-proposal-dynamic-import": { + "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-export-namespace-from": { + "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-json-strings": { + "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-logical-assignment-operators": { + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-numeric-separator": { + "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-catch-binding": { + "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-chaining": { + "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-private-methods": { + "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-private-property-in-object": { + "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-create-class-features-plugin": "^7.20.5", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-unicode-property-regex": { + "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-async-generators": { + "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-bigint": { + "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, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-properties": { + "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", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-static-block": { + "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-dynamic-import": { + "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-export-namespace-from": { + "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-import-assertions": { + "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-import-meta": { + "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, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-json-strings": { + "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", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-jsx": { + "node_modules/@babel/plugin-syntax-jsx": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-numeric-separator": { + "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-object-rest-spread": { + "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-catch-binding": { + "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-chaining": { + "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-private-property-in-object": { + "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-top-level-await": { + "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-typescript": { + "node_modules/@babel/plugin-syntax-typescript": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-arrow-functions": { + "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-async-to-generator": { + "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoped-functions": { + "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoping": { + "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.20.15", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.15.tgz", "integrity": "sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-classes": { + "node_modules/@babel/plugin-transform-classes": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", @@ -815,274 +1208,442 @@ "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-computed-properties": { + "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/template": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-destructuring": { + "node_modules/@babel/plugin-transform-destructuring": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-dotall-regex": { + "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-duplicate-keys": { + "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-exponentiation-operator": { + "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" - } + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "@babel/plugin-transform-for-of": { + "node_modules/@babel/plugin-transform-for-of": { "version": "7.18.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-function-name": { + "node_modules/@babel/plugin-transform-function-name": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-literals": { + "node_modules/@babel/plugin-transform-literals": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-member-expression-literals": { + "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-amd": { + "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.20.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.20.11", "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-commonjs": { + "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.20.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.20.11", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-simple-access": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-systemjs": { + "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.20.11", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-module-transforms": "^7.20.11", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-umd": { + "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.20.5", "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-new-target": { + "node_modules/@babel/plugin-transform-new-target": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-super": { + "node_modules/@babel/plugin-transform-object-super": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-parameters": { + "node_modules/@babel/plugin-transform-parameters": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-property-literals": { + "node_modules/@babel/plugin-transform-property-literals": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-regenerator": { + "node_modules/@babel/plugin-transform-regenerator": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-reserved-words": { + "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-shorthand-properties": { + "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-spread": { + "node_modules/@babel/plugin-transform-spread": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-sticky-regex": { + "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-template-literals": { + "node_modules/@babel/plugin-transform-template-literals": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-typeof-symbol": { + "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-escapes": { + "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-regex": { + "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-env": { + "node_modules/@babel/preset-env": { "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.20.1", "@babel/helper-compilation-targets": "^7.20.0", "@babel/helper-plugin-utils": "^7.20.2", @@ -1159,101 +1720,145 @@ "core-js-compat": "^3.25.1", "semver": "^6.3.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "@babel/preset-modules": { + "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/regjsgen": { + "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", "dev": true }, - "@babel/runtime": { + "node_modules/@babel/runtime": { "version": "7.20.13", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", "dev": true, - "requires": { + "dependencies": { "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "node_modules/@babel/runtime-corejs3": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz", + "integrity": "sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ==", "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "node_modules/@babel/runtime-corejs3/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/@babel/template": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", - "debug": "^4.1.0", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", + "debug": "^4.3.1", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "node_modules/@babel/types": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@bcoe/v8-coverage": { + "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 }, - "@discoveryjs/json-ext": { + "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true + "dev": true, + "engines": { + "node": ">=10.0.0" + } }, - "@eslint/eslintrc": { + "node_modules/@eslint/eslintrc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, - "requires": { + "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.4.0", @@ -1264,99 +1869,128 @@ "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "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 - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@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, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "engines": { + "node": ">= 4" } }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "@humanwhocodes/object-schema": { + "node_modules/@humanwhocodes/config-array": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "@istanbuljs/load-nyc-config": { + "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, - "requires": { + "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" } }, - "@istanbuljs/schema": { + "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==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "@jest/console": { + "node_modules/@jest/console": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.2.tgz", "integrity": "sha512-0I/rEJwMpV9iwi9cDEnT71a5nNGK9lj8Z4+1pRAU2x/thVXCDnaTGrvxyK+cAqZTFVFCiR+hfVrP4l2m+dCmQg==", "dev": true, - "requires": { + "dependencies": { "@jest/types": "^29.4.2", "@types/node": "*", "chalk": "^4.0.0", @@ -1364,64 +1998,86 @@ "jest-util": "^29.4.2", "slash": "^3.0.0" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" } }, - "@jest/core": { + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.2.tgz", "integrity": "sha512-KGuoQah0P3vGNlaS/l9/wQENZGNKGoWb+OPxh3gz+YzG7/XExvYu34MzikRndQCdM2S0tzExN4+FL37i6gZmCQ==", "dev": true, - "requires": { + "dependencies": { "@jest/console": "^29.4.2", "@jest/reporters": "^29.4.2", "@jest/test-result": "^29.4.2", @@ -1451,121 +2107,166 @@ "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "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 } } }, - "@jest/environment": { + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@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, + "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/@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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.2.tgz", "integrity": "sha512-JKs3VUtse0vQfCaFGJRX1bir9yBdtasxziSyu+pIiEllAQOe4oQhdCYIf3+Lx+nGglFktSKToBnRJfD5QKp+NQ==", "dev": true, - "requires": { + "dependencies": { "@jest/fake-timers": "^29.4.2", "@jest/types": "^29.4.2", "@types/node": "*", "jest-mock": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@jest/expect": { + "node_modules/@jest/expect": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.2.tgz", "integrity": "sha512-NUAeZVApzyaeLjfWIV/64zXjA2SS+NuUPHpAlO7IwVMGd5Vf9szTl9KEDlxY3B4liwLO31os88tYNHl6cpjtKQ==", "dev": true, - "requires": { + "dependencies": { "expect": "^29.4.2", "jest-snapshot": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@jest/expect-utils": { + "node_modules/@jest/expect-utils": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.2.tgz", "integrity": "sha512-Dd3ilDJpBnqa0GiPN7QrudVs0cczMMHtehSo2CSTjm3zdHx0RcpmhFNVEltuEFeqfLIyWKFI224FsMSQ/nsJQA==", "dev": true, - "requires": { + "dependencies": { "jest-get-type": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@jest/fake-timers": { + "node_modules/@jest/fake-timers": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.2.tgz", "integrity": "sha512-Ny1u0Wg6kCsHFWq7A/rW/tMhIedq2siiyHyLpHCmIhP7WmcAmd2cx95P+0xtTZlj5ZbJxIRQi4OPydZZUoiSQQ==", "dev": true, - "requires": { + "dependencies": { "@jest/types": "^29.4.2", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", "jest-message-util": "^29.4.2", "jest-mock": "^29.4.2", "jest-util": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@jest/globals": { + "node_modules/@jest/globals": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.2.tgz", "integrity": "sha512-zCk70YGPzKnz/I9BNFDPlK+EuJLk21ur/NozVh6JVM86/YYZtZHqxFFQ62O9MWq7uf3vIZnvNA0BzzrtxD9iyg==", "dev": true, - "requires": { + "dependencies": { "@jest/environment": "^29.4.2", "@jest/expect": "^29.4.2", "@jest/types": "^29.4.2", "jest-mock": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@jest/reporters": { + "node_modules/@jest/reporters": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.2.tgz", "integrity": "sha512-10yw6YQe75zCgYcXgEND9kw3UZZH5tJeLzWv4vTk/2mrS1aY50A37F+XT2hPO5OqQFFnUWizXD8k1BMiATNfUw==", "dev": true, - "requires": { + "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.4.2", "@jest/test-result": "^29.4.2", @@ -1591,108 +2292,150 @@ "strip-ansi": "^6.0.0", "v8-to-istanbul": "^9.0.1" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "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 } } }, - "@jest/schemas": { + "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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.2.tgz", "integrity": "sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g==", "dev": true, - "requires": { + "dependencies": { "@sinclair/typebox": "^0.25.16" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@jest/source-map": { + "node_modules/@jest/source-map": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.2.tgz", "integrity": "sha512-tIoqV5ZNgYI9XCKXMqbYe5JbumcvyTgNN+V5QW4My033lanijvCD0D4PI9tBw4pRTqWOc00/7X3KVvUh+qnF4Q==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/trace-mapping": "^0.3.15", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@jest/test-result": { + "node_modules/@jest/test-result": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.2.tgz", "integrity": "sha512-HZsC3shhiHVvMtP+i55MGR5bPcc3obCFbA5bzIOb8pCjwBZf11cZliJncCgaVUbC5yoQNuGqCkC0Q3t6EItxZA==", "dev": true, - "requires": { + "dependencies": { "@jest/console": "^29.4.2", "@jest/types": "^29.4.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@jest/test-sequencer": { + "node_modules/@jest/test-sequencer": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.2.tgz", "integrity": "sha512-9Z2cVsD6CcObIVrWigHp2McRJhvCxL27xHtrZFgNC1RwnoSpDx6fZo8QYjJmziFlW9/hr78/3sxF54S8B6v8rg==", "dev": true, - "requires": { + "dependencies": { "@jest/test-result": "^29.4.2", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.4.2", "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "@jest/transform": { + "node_modules/@jest/transform": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.2.tgz", "integrity": "sha512-kf1v5iTJHn7p9RbOsBuc/lcwyPtJaZJt5885C98omWz79NIeD3PfoiiaPSu7JyCyFzNOIzKhmMhQLUhlTL9BvQ==", "dev": true, - "requires": { + "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.4.2", "@jridgewell/trace-mapping": "^0.3.15", @@ -1709,70 +2452,92 @@ "slash": "^3.0.0", "write-file-atomic": "^4.0.2" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "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==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/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==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@jest/types": { + "node_modules/@jest/types": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.2.tgz", "integrity": "sha512-CKlngyGP0fwlgC1BRUtPZSiWLBhyS9dKwKmyGxk8Z6M82LBEGB2aLQSg+U1MyLsU+M7UjnlLllBM2BLWKVm/Uw==", "dev": true, - "requires": { + "dependencies": { "@jest/schemas": "^29.4.2", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -1780,182 +2545,206 @@ "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" } }, - "@jridgewell/gen-mapping": { + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" } }, - "@jridgewell/resolve-uri": { + "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/set-array": { + "node_modules/@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" - }, + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@jridgewell/sourcemap-codec": { + "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "@nicolo-ribaudo/chokidar-2": { + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "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==", "dev": true, "optional": true }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "@sinclair/typebox": { + "node_modules/@sinclair/typebox": { "version": "0.25.21", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz", "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==", "dev": true }, - "@sinonjs/commons": { + "node_modules/@sinonjs/commons": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, - "requires": { + "dependencies": { "type-detect": "4.0.8" } }, - "@sinonjs/fake-timers": { + "node_modules/@sinonjs/fake-timers": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", "dev": true, - "requires": { + "dependencies": { "@sinonjs/commons": "^2.0.0" } }, - "@types/babel__core": { + "node_modules/@types/babel__core": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", "dev": true, - "requires": { + "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", @@ -1963,652 +2752,882 @@ "@types/babel__traverse": "*" } }, - "@types/babel__generator": { + "node_modules/@types/babel__generator": { "version": "7.6.4", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.0.0" } }, - "@types/babel__template": { + "node_modules/@types/babel__template": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, - "requires": { + "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, - "@types/babel__traverse": { + "node_modules/@types/babel__traverse": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.3.0" } }, - "@types/body-parser": { + "node_modules/@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, - "requires": { + "dependencies": { "@types/connect": "*", "@types/node": "*" } }, - "@types/bonjour": { + "node_modules/@types/bonjour": { "version": "3.5.10", "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/connect": { + "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/connect-history-api-fallback": { + "node_modules/@types/connect-history-api-fallback": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", "dev": true, - "requires": { + "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" } }, - "@types/eslint": { + "node_modules/@types/eslint": { "version": "8.21.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.0.tgz", "integrity": "sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==", "dev": true, - "requires": { + "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, - "@types/eslint-scope": { + "node_modules/@types/eslint-scope": { "version": "3.7.4", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, - "requires": { + "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, - "@types/express": { + "node_modules/@types/express": { "version": "4.17.13", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, - "requires": { + "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", "@types/qs": "*", "@types/serve-static": "*" } }, - "@types/express-serve-static-core": { + "node_modules/@types/express-serve-static-core": { "version": "4.17.28", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*" } }, - "@types/glob": { + "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, - "requires": { + "dependencies": { "@types/minimatch": "*", "@types/node": "*" } }, - "@types/graceful-fs": { + "node_modules/@types/graceful-fs": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/html-minifier-terser": { + "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, - "@types/http-proxy": { + "node_modules/@types/http-proxy": { "version": "1.17.8", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/istanbul-lib-coverage": { + "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", "dev": true }, - "@types/istanbul-lib-report": { + "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, - "requires": { + "dependencies": { "@types/istanbul-lib-coverage": "*" } }, - "@types/istanbul-reports": { + "node_modules/@types/istanbul-reports": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, - "requires": { + "dependencies": { "@types/istanbul-lib-report": "*" } }, - "@types/jest": { + "node_modules/@types/jest": { "version": "29.4.0", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", "dev": true, - "requires": { + "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" } }, - "@types/json-schema": { + "node_modules/@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "@types/mime": { + "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 + }, + "node_modules/@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, - "@types/minimatch": { + "node_modules/@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, - "@types/node": { + "node_modules/@types/node": { "version": "17.0.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz", "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==", "dev": true }, - "@types/prettier": { + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", "dev": true }, - "@types/qs": { + "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, - "@types/range-parser": { + "node_modules/@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, - "@types/retry": { + "node_modules/@types/retry": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", "dev": true }, - "@types/serve-index": { + "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, - "requires": { + "dependencies": { "@types/express": "*" } }, - "@types/serve-static": { + "node_modules/@types/serve-static": { "version": "1.13.10", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, - "requires": { + "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, - "@types/sockjs": { + "node_modules/@types/sockjs": { "version": "0.3.33", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/stack-utils": { + "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, - "@types/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-ahRJZquUYCdOZf/rCsWg88S0/+cb9wazUBHv6HZEe3XdYaBe2zr/slM8J28X07Hn88Pnm4ezo7N8/ofnOgrPVQ==", + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/yargs": { + "node_modules/@types/yargs": { "version": "17.0.22", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", "dev": true, - "requires": { + "dependencies": { "@types/yargs-parser": "*" } }, - "@types/yargs-parser": { + "node_modules/@types/yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", "dev": true }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, - "requires": { + "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, - "requires": { + "dependencies": { "@xtuc/long": "4.2.2" } }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, - "@webpack-cli/configtest": { + "node_modules/@webpack-cli/configtest": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.1.tgz", "integrity": "sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A==", - "dev": true + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } }, - "@webpack-cli/info": { + "node_modules/@webpack-cli/info": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.1.tgz", "integrity": "sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==", - "dev": true + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } }, - "@webpack-cli/serve": { + "node_modules/@webpack-cli/serve": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.1.tgz", "integrity": "sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==", - "dev": true + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } }, - "@xtuc/ieee754": { + "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "@xtuc/long": { + "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "accepts": { + "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, - "requires": { + "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } }, - "acorn-jsx": { + "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 - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "ajv": { + "node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "requires": { + "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "ajv-formats": { + "node_modules/ajv-formats": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "requires": { + "dependencies": { "ajv": "^8.0.0" }, - "dependencies": { + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "optional": true } } }, - "ajv-keywords": { + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "requires": { + "dependencies": { "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" } }, - "ansi-escapes": { + "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "requires": { + "dependencies": { "type-fest": "^0.21.3" }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } + "engines": { + "node": ">=8" + }, + "funding": { + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "ansi-html-community": { + "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } }, - "ansi-regex": { + "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 + "dev": true, + "engines": { + "node": ">=8" + } }, - "ansi-styles": { + "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, - "requires": { + "dependencies": { "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "anymatch": { + "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, - "requires": { + "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "argparse": { + "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, - "requires": { + "dependencies": { "sprintf-js": "~1.0.2" } }, - "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 + "node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "array-union": { + "node_modules/array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, - "requires": { + "dependencies": { "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "array-uniq": { + "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "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==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.4.tgz", + "integrity": "sha512-CZLSKisu/bhJ2awW4kJndluz2HLZYIHh5Uy1+ZwDRkJi69811xgIXXfdU9HSLX0Th+ILrHj8qfL/5wzamsFtQg==", "dev": true, - "requires": { - "lodash": "^4.17.14" + "engines": { + "node": ">=4" } }, - "babel-jest": { + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "node_modules/babel-jest": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.2.tgz", "integrity": "sha512-vcghSqhtowXPG84posYkkkzcZsdayFkubUgbE3/1tuGbX7AQtwCkkNA/wIbB0BMjuCPoqTkiDyKN7Ty7d3uwNQ==", "dev": true, - "requires": { + "dependencies": { "@jest/transform": "^29.4.2", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", @@ -2617,137 +3636,185 @@ "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_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, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, + "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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "babel-loader": { + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", "dev": true, - "requires": { + "dependencies": { "find-cache-dir": "^3.3.2", "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" } }, - "babel-plugin-istanbul": { + "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, - "requires": { + "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" } }, - "babel-plugin-jest-hoist": { + "node_modules/babel-plugin-jest-hoist": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.2.tgz", "integrity": "sha512-5HZRCfMeWypFEonRbEkwWXtNS1sQK159LhRVyRuLzyfVBxDy/34Tr/rg4YVi0SScSJ4fqeaR/OIeceJ/LaQ0pQ==", "dev": true, - "requires": { + "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" } }, - "babel-plugin-polyfill-corejs2": { + "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "babel-plugin-polyfill-corejs3": { + "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3", "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "babel-plugin-polyfill-regenerator": { + "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "babel-preset-current-node-syntax": { + "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, - "requires": { + "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", "@babel/plugin-syntax-class-properties": "^7.8.3", @@ -2760,42 +3827,54 @@ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "babel-preset-jest": { + "node_modules/babel-preset-jest": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.2.tgz", "integrity": "sha512-ecWdaLY/8JyfUDr0oELBMpj3R5I1L6ZqG+kRJmwqfHtLWuPrJStR0LUkvUhfykJWTsXXMnohsayN/twltBbDrQ==", "dev": true, - "requires": { + "dependencies": { "babel-plugin-jest-hoist": "^29.4.2", "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" } }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "batch": { + "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "binary-extensions": { + "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "body-parser": { + "node_modules/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", "dev": true, - "requires": { + "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", @@ -2807,303 +3886,400 @@ "raw-body": "2.4.3", "type-is": "~1.6.18" }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "ms": "2.0.0" } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, - "boolbase": { + "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { + "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "requires": { + "dependencies": { "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "bser": { + "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==", "dev": true, - "requires": { + "dependencies": { "node-int64": "^0.4.0" } }, - "buffer-from": { + "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "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 - }, - "bytes": { + "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "callsites": { + "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 + "dev": true, + "engines": { + "node": ">=6" + } }, - "camel-case": { + "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, - "requires": { + "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" } }, - "camelcase": { + "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 + "dev": true, + "engines": { + "node": ">=6" + } }, - "caniuse-lite": { - "version": "1.0.30001451", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz", - "integrity": "sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==", - "dev": true + "node_modules/caniuse-lite": { + "version": "1.0.30001588", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz", + "integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, - "chalk": { + "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "char-regex": { + "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 + "dev": true, + "engines": { + "node": ">=10" + } }, - "chokidar": { + "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "chrome-trace-event": { + "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0" + } }, - "ci-info": { + "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, - "cjs-module-lexer": { + "node_modules/cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "clean-css": { + "node_modules/clean-css": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", "dev": true, - "requires": { + "dependencies": { "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "clean-webpack-plugin": { + "node_modules/clean-webpack-plugin": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", "dev": true, - "requires": { + "dependencies": { "del": "^4.1.1" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": ">=4.0.0 <6.0.0" } }, - "cliui": { + "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, - "requires": { + "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "clone-deep": { + "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "requires": { + "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "co": { + "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 + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } }, - "collect-v8-coverage": { + "node_modules/collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, - "color-convert": { + "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, - "requires": { + "dependencies": { "color-name": "1.1.3" } }, - "color-name": { + "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 }, - "colorette": { + "node_modules/colorette": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, - "commander": { + "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true + "dev": true, + "engines": { + "node": ">= 12" + } }, - "commondir": { + "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, - "compressible": { + "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, - "requires": { + "dependencies": { "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "compression": { + "node_modules/compression": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, - "requires": { + "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", "compressible": "~2.0.16", @@ -3112,109 +4288,158 @@ "safe-buffer": "5.1.2", "vary": "~1.1.2" }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "ms": "2.0.0" } }, - "concat-map": { + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "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==", + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true }, - "content-disposition": { + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "5.2.1" }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "engines": { + "node": ">= 0.6" } }, - "content-type": { + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "convert-source-map": { + "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, - "cookie": { + "node_modules/cookie": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "cookie-signature": { + "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, - "core-js-compat": { + "node_modules/core-js-compat": { "version": "3.27.2", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.2.tgz", "integrity": "sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg==", "dev": true, - "requires": { + "dependencies": { "browserslist": "^4.21.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.0.tgz", + "integrity": "sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "core-util-is": { + "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "cross-spawn": { + "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "requires": { + "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "css-loader": { + "node_modules/css-loader": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.6.0.tgz", "integrity": "sha512-FK7H2lisOixPT406s5gZM1S3l8GrfhEBT3ZiL2UX1Ng1XWs0y2GPllz/OTyvbaHe12VgQrIXIzuEGVlbUhodqg==", "dev": true, - "requires": { + "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.5", "postcss-modules-extract-imports": "^3.0.0", @@ -3224,114 +4449,177 @@ "postcss-value-parser": "^4.2.0", "semver": "^7.3.5" }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "css-select": { + "node_modules/css-select": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "dev": true, - "requires": { + "dependencies": { "boolbase": "^1.0.0", "css-what": "^5.1.0", "domhandler": "^4.3.0", "domutils": "^2.8.0", "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "css-what": { + "node_modules/css-what": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } }, - "cssesc": { + "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==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, - "debug": { + "node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, - "requires": { + "dependencies": { "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "dedent": { + "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { + "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "deepmerge": { + "node_modules/deepmerge": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "default-gateway": { + "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, - "requires": { + "dependencies": { "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "define-lazy-prop": { + "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "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==", "dev": true, - "requires": { - "object-keys": "^1.0.12" + "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" } }, - "del": { + "node_modules/del": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, - "requires": { + "dependencies": { "@types/glob": "^7.1.1", "globby": "^6.1.0", "is-path-cwd": "^2.0.0", @@ -3340,540 +4628,1100 @@ "pify": "^4.0.1", "rimraf": "^2.6.3" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "depd": { + "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "destroy": { + "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, - "detect-newline": { + "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 + "dev": true, + "engines": { + "node": ">=8" + } }, - "detect-node": { + "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 }, - "diff-sequences": { + "node_modules/diff-sequences": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.2.tgz", "integrity": "sha512-R6P0Y6PrsH3n4hUXxL3nns0rbRk6Q33js3ygJBeEpbzLzgcNuJ61+u0RXasFpTKISw99TxUzFnumSnRLsjhLaw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "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, - "requires": { - "buffer-indexof": "^1.0.0" + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" } }, - "doctrine": { + "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { + "dependencies": { "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "dom-converter": { + "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, - "requires": { + "dependencies": { "utila": "~0.4" } }, - "dom-serializer": { + "node_modules/dom-serializer": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, - "requires": { + "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "domelementtype": { + "node_modules/domelementtype": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "domhandler": { + "node_modules/domhandler": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, - "requires": { + "dependencies": { "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "domutils": { + "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, - "requires": { + "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "dot-case": { + "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, - "requires": { + "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, - "ee-first": { + "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "electron-to-chromium": { - "version": "1.4.295", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz", - "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==", + "node_modules/electron-to-chromium": { + "version": "1.4.676", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.676.tgz", + "integrity": "sha512-uHt4FB8SeYdhcOsj2ix/C39S7sPSNFJpzShjxGOm1KdF4MHyGqGi389+T5cErsodsijojXilYaHIKKqJfqh7uQ==", "dev": true }, - "emittery": { + "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 + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } }, - "emoji-regex": { + "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 }, - "encodeurl": { + "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" } }, - "entities": { + "node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "envinfo": { + "node_modules/envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } }, - "error-ex": { + "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { + "dependencies": { "is-arrayish": "^0.2.1" } }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "node_modules/es-abstract": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", + "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.1", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", "dev": true }, - "escalade": { + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "escape-html": { + "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "eslint": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", - "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", + "node_modules/eslint": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.2.0.tgz", + "integrity": "sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw==", "dev": true, - "requires": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", + "dependencies": { + "@eslint/eslintrc": "^1.0.4", + "@humanwhocodes/config-array": "^0.6.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", + "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", + "eslint-scope": "^6.0.0", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", + "progress": "^2.0.0", "regexpp": "^3.2.0", + "semver": "^7.2.1", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "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 - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "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, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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 - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + }, + "engines": { + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" } }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "esm": { - "version": "3.2.25", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", - "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", - "dev": true + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "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==", "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "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 + "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, + "dependencies": { + "ms": "^2.1.1" + } }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "requires": { - "estraverse": "^5.1.0" + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, - "requires": { - "estraverse": "^5.2.0" + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "estraverse": { - "version": "5.3.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, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.25.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz", + "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.1", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.11.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.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, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.16.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.4", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.3.5", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", + "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "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, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "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, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "esutils": { + "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "etag": { + "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "eventemitter3": { + "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, - "events": { + "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.x" + } }, - "execa": { + "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "requires": { + "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", @@ -3883,33 +5731,45 @@ "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" } }, - "exit": { + "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 + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "expect": { + "node_modules/expect": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.2.tgz", "integrity": "sha512-+JHYg9O3hd3RlICG90OPVjRkPBoiUH7PxvDVMnRiaq1g6JUgZStX514erMl0v2Dc5SkfVbm7ztqbd6qHHPn+mQ==", "dev": true, - "requires": { + "dependencies": { "@jest/expect-utils": "^29.4.2", "jest-get-type": "^29.4.2", "jest-matcher-utils": "^29.4.2", "jest-message-util": "^29.4.2", "jest-util": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "express": { + "node_modules/express": { "version": "4.17.3", "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", "dev": true, - "requires": { + "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.19.2", @@ -3941,124 +5801,135 @@ "utils-merge": "1.0.1", "vary": "~1.1.2" }, + "engines": { + "node": ">= 0.10.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": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ] }, - "fast-deep-equal": { + "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true }, - "fast-json-stable-stringify": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "fast-levenshtein": { + "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "fastest-levenshtein": { + "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, - "requires": { - "reusify": "^1.0.4" + "engines": { + "node": ">= 4.9.1" } }, - "faye-websocket": { + "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, - "requires": { + "dependencies": { "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "fb-watchman": { + "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==", "dev": true, - "requires": { + "dependencies": { "bser": "2.1.1" } }, - "file-entry-cache": { + "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, - "requires": { + "dependencies": { "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "fill-range": { + "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "requires": { + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "finalhandler": { + "node_modules/finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, - "requires": { + "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -4067,319 +5938,553 @@ "statuses": "~1.5.0", "unpipe": "~1.0.0" }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "ms": "2.0.0" } }, - "find-cache-dir": { + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "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==", "dev": true, - "requires": { + "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "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==", + "dev": true, "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "find-up": { + "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, - "requires": { + "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "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, - "requires": { - "flatted": "^3.1.0", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, - "follow-redirects": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", - "dev": true + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } }, - "forwarded": { + "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "fresh": { + "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "fs-monkey": { + "node_modules/fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", "dev": true }, - "fs-readdir-recursive": { + "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==", "dev": true }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { + "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "optional": true + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, - "gensync": { + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "get-caller-file": { + "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 + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "get-package-type": { + "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==", - "dev": true + "dev": true, + "engines": { + "node": ">=8.0.0" + } }, - "get-stream": { + "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 + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "glob": { + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "requires": { + "dependencies": { "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "glob-to-regexp": { + "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "globals": { + "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "globby": { + "node_modules/globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, - "requires": { + "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/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "graceful-fs": { + "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "handle-thing": { + "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 }, - "has": { + "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-flag": { + "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "has-symbols": { + "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, - "requires": { - "has-symbols": "^1.0.2" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "he": { + "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 + "dev": true, + "bin": { + "he": "bin/he" + } }, - "hpack.js": { + "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", "readable-stream": "^2.0.1", "wbuf": "^1.1.0" - }, + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "html-entities": { + "node_modules/html-entities": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", "dev": true }, - "html-escaper": { + "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 }, - "html-minifier-terser": { + "node_modules/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, - "requires": { + "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", "commander": "^8.3.0", @@ -4387,548 +6492,823 @@ "param-case": "^3.0.4", "relateurl": "^0.2.7", "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" } }, - "html-webpack-plugin": { + "node_modules/html-webpack-plugin": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", "dev": true, - "requires": { + "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", "lodash": "^4.17.21", "pretty-error": "^4.0.0", "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" } }, - "htmlparser2": { + "node_modules/htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, - "requires": { + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", "domutils": "^2.5.2", "entities": "^2.0.0" } }, - "http-deceiver": { + "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", "dev": true }, - "http-errors": { + "node_modules/http-errors": { "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, - "requires": { + "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" } }, - "http-parser-js": { + "node_modules/http-parser-js": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", "dev": true }, - "http-proxy": { + "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, - "requires": { + "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "http-proxy-middleware": { + "node_modules/http-proxy-middleware": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", "dev": true, - "requires": { + "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, - "human-signals": { + "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 + "dev": true, + "engines": { + "node": ">=10.17.0" + } }, - "iconv-lite": { + "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, - "requires": { + "dependencies": { "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "icss-utils": { + "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } }, - "import-fresh": { + "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "requires": { + "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" } }, - "import-local": { + "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, - "requires": { + "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "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==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.19" + } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "interpret": { + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true + "dev": true, + "engines": { + "node": ">=10.13.0" + } }, - "ipaddr.js": { + "node_modules/ipaddr.js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true + "dev": true, + "engines": { + "node": ">= 10" + } }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "is-binary-path": { + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "requires": { + "dependencies": { "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, - "requires": { - "has": "^1.0.3" + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-date-object": { + "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-docker": { + "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "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 + "dev": true, + "engines": { + "node": ">=8" + } }, - "is-generator-fn": { + "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 + "dev": true, + "engines": { + "node": ">=6" + } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-path-cwd": { + "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 + "dev": true, + "engines": { + "node": ">=6" + } }, - "is-path-in-cwd": { + "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, - "requires": { + "dependencies": { "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" } }, - "is-path-inside": { + "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, - "requires": { + "dependencies": { "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" } }, - "is-plain-obj": { + "node_modules/is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-plain-object": { + "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "requires": { + "dependencies": { "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-regex": { + "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-stream": { + "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-wsl": { + "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, - "requires": { + "dependencies": { "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "isarray": { + "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { + "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "istanbul-lib-coverage": { + "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "istanbul-lib-instrument": { + "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, - "requires": { + "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" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "istanbul-lib-report": { + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, - "requires": { + "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "istanbul-lib-source-maps": { + "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, - "requires": { + "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" } }, - "istanbul-reports": { + "node_modules/istanbul-reports": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dev": true, - "requires": { + "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "jest": { + "node_modules/jest": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.2.tgz", "integrity": "sha512-+5hLd260vNIHu+7ZgMIooSpKl7Jp5pHKb51e73AJU3owd5dEo/RfVwHbA/na3C/eozrt3hJOLGf96c7EWwIAzg==", "dev": true, - "requires": { + "dependencies": { "@jest/core": "^29.4.2", "@jest/types": "^29.4.2", "import-local": "^3.0.2", "jest-cli": "^29.4.2" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-cli": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.2.tgz", - "integrity": "sha512-b+eGUtXq/K2v7SH3QcJvFvaUaCDS1/YAZBYz0m28Q/Ppyr+1qNaHmVYikOrbHVbZqYQs2IeI3p76uy6BWbXq8Q==", - "dev": true, - "requires": { - "@jest/core": "^29.4.2", - "@jest/test-result": "^29.4.2", - "@jest/types": "^29.4.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.4.2", - "jest-util": "^29.4.2", - "jest-validate": "^29.4.2", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "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 } } }, - "jest-changed-files": { + "node_modules/jest-changed-files": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.2.tgz", "integrity": "sha512-Qdd+AXdqD16PQa+VsWJpxR3kN0JyOCX1iugQfx5nUgAsI4gwsKviXkpclxOK9ZnwaY2IQVHz+771eAvqeOlfuw==", "dev": true, - "requires": { + "dependencies": { "execa": "^5.0.0", "p-limit": "^3.1.0" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "jest-circus": { + "node_modules/jest-circus": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.2.tgz", "integrity": "sha512-wW3ztp6a2P5c1yOc1Cfrt5ozJ7neWmqeXm/4SYiqcSriyisgq63bwFj1NuRdSR5iqS0CMEYwSZd89ZA47W9zUg==", "dev": true, - "requires": { + "dependencies": { "@jest/environment": "^29.4.2", "@jest/expect": "^29.4.2", "@jest/test-result": "^29.4.2", @@ -4949,73 +7329,101 @@ "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, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, + "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/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "jest-config": { + "node_modules/jest-config": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.2.tgz", "integrity": "sha512-919CtnXic52YM0zW4C1QxjG6aNueX1kBGthuMtvFtRTAxhKfJmiXC9qwHmi6o2josjbDz8QlWyY55F1SIVmCWA==", "dev": true, - "requires": { + "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.4.2", "@jest/types": "^29.4.2", @@ -5039,313 +7447,430 @@ "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "ts-node": { + "optional": true } } }, - "jest-diff": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.2.tgz", - "integrity": "sha512-EK8DSajVtnjx9sa1BkjZq3mqChm2Cd8rIzdXkQMA8e0wuXq53ypz6s5o5V8HRZkoEt2ywJ3eeNWFKWeYr8HK4g==", + "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==", "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.2", - "jest-get-type": "^29.4.2", - "pretty-format": "^29.4.2" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "jest-docblock": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.2.tgz", - "integrity": "sha512-dV2JdahgClL34Y5vLrAHde3nF3yo2jKRH+GIYJuCpfqwEJZcikzeafVTGAjbOfKPG17ez9iWXwUYp7yefeCRag==", + "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==", "dev": true, - "requires": { - "detect-newline": "^3.0.0" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "jest-each": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.2.tgz", + "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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "29.4.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.2.tgz", + "integrity": "sha512-EK8DSajVtnjx9sa1BkjZq3mqChm2Cd8rIzdXkQMA8e0wuXq53ypz6s5o5V8HRZkoEt2ywJ3eeNWFKWeYr8HK4g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.2", + "jest-get-type": "^29.4.2", + "pretty-format": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "29.4.2", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.2.tgz", + "integrity": "sha512-dV2JdahgClL34Y5vLrAHde3nF3yo2jKRH+GIYJuCpfqwEJZcikzeafVTGAjbOfKPG17ez9iWXwUYp7yefeCRag==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.4.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.2.tgz", "integrity": "sha512-trvKZb0JYiCndc55V1Yh0Luqi7AsAdDWpV+mKT/5vkpnnFQfuQACV72IoRV161aAr6kAVIBpmYzwhBzm34vQkA==", "dev": true, - "requires": { + "dependencies": { "@jest/types": "^29.4.2", "chalk": "^4.0.0", "jest-get-type": "^29.4.2", "jest-util": "^29.4.2", "pretty-format": "^29.4.2" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "jest-environment-node": { + "node_modules/jest-environment-node": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.2.tgz", "integrity": "sha512-MLPrqUcOnNBc8zTOfqBbxtoa8/Ee8tZ7UFW7hRDQSUT+NGsvS96wlbHGTf+EFAT9KC3VNb7fWEM6oyvmxtE/9w==", "dev": true, - "requires": { + "dependencies": { "@jest/environment": "^29.4.2", "@jest/fake-timers": "^29.4.2", "@jest/types": "^29.4.2", "@types/node": "*", "jest-mock": "^29.4.2", "jest-util": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "jest-get-type": { + "node_modules/jest-get-type": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.2.tgz", "integrity": "sha512-vERN30V5i2N6lqlFu4ljdTqQAgrkTFMC9xaIIfOPYBw04pufjXRty5RuXBiB1d72tGbURa/UgoiHB90ruOSivg==", - "dev": true + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "jest-haste-map": { + "node_modules/jest-haste-map": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.2.tgz", "integrity": "sha512-WkUgo26LN5UHPknkezrBzr7lUtV1OpGsp+NfXbBwHztsFruS3gz+AMTTBcEklvi8uPzpISzYjdKXYZQJXBnfvw==", "dev": true, - "requires": { + "dependencies": { "@jest/types": "^29.4.2", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.4.2", "jest-util": "^29.4.2", "jest-worker": "^29.4.2", "micromatch": "^4.0.4", "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "jest-leak-detector": { + "node_modules/jest-leak-detector": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.2.tgz", "integrity": "sha512-Wa62HuRJmWXtX9F00nUpWlrbaH5axeYCdyRsOs/+Rb1Vb6+qWTlB5rKwCCRKtorM7owNwKsyJ8NRDUcZ8ghYUA==", "dev": true, - "requires": { + "dependencies": { "jest-get-type": "^29.4.2", "pretty-format": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "jest-matcher-utils": { + "node_modules/jest-matcher-utils": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.2.tgz", "integrity": "sha512-EZaAQy2je6Uqkrm6frnxBIdaWtSYFoR8SVb2sNLAtldswlR/29JAgx+hy67llT3+hXBaLB0zAm5UfeqerioZyg==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.4.2", "jest-get-type": "^29.4.2", "pretty-format": "^29.4.2" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "jest-message-util": { + "node_modules/jest-message-util": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.2.tgz", "integrity": "sha512-SElcuN4s6PNKpOEtTInjOAA8QvItu0iugkXqhYyguRvQoXapg5gN+9RQxLAkakChZA7Y26j6yUCsFWN+hlKD6g==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.4.2", "@types/stack-utils": "^2.0.0", @@ -5356,87 +7881,126 @@ "slash": "^3.0.0", "stack-utils": "^2.0.3" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "jest-mock": { + "node_modules/jest-mock": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.2.tgz", "integrity": "sha512-x1FSd4Gvx2yIahdaIKoBjwji6XpboDunSJ95RpntGrYulI1ByuYQCKN/P7hvk09JB74IonU3IPLdkutEWYt++g==", "dev": true, - "requires": { + "dependencies": { "@jest/types": "^29.4.2", "@types/node": "*", "jest-util": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "jest-pnp-resolver": { + "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 + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } }, - "jest-regex-util": { + "node_modules/jest-regex-util": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.2.tgz", "integrity": "sha512-XYZXOqUl1y31H6VLMrrUL1ZhXuiymLKPz0BO1kEeR5xER9Tv86RZrjTm74g5l9bPJQXA/hyLdaVPN/sdqfteig==", - "dev": true + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "jest-resolve": { + "node_modules/jest-resolve": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.2.tgz", "integrity": "sha512-RtKWW0mbR3I4UdkOrW7552IFGLYQ5AF9YrzD0FnIOkDu0rAMlA5/Y1+r7lhCAP4nXSBTaE7ueeqj6IOwZpgoqw==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.4.2", @@ -5447,173 +8011,226 @@ "resolve.exports": "^2.0.0", "slash": "^3.0.0" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "jest-resolve-dependencies": { + "node_modules/jest-resolve-dependencies": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.2.tgz", "integrity": "sha512-6pL4ptFw62rjdrPk7rRpzJYgcRqRZNsZTF1VxVTZMishbO6ObyWvX57yHOaNGgKoADtAHRFYdHQUEvYMJATbDg==", "dev": true, - "requires": { + "dependencies": { "jest-regex-util": "^29.4.2", "jest-snapshot": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "jest-runner": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.2.tgz", - "integrity": "sha512-wqwt0drm7JGjwdH+x1XgAl+TFPH7poowMguPQINYxaukCqlczAcNLJiK+OLxUxQAEWMdy+e6nHZlFHO5s7EuRg==", + "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==", "dev": true, - "requires": { - "@jest/console": "^29.4.2", - "@jest/environment": "^29.4.2", - "@jest/test-result": "^29.4.2", - "@jest/transform": "^29.4.2", - "@jest/types": "^29.4.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.2", - "jest-environment-node": "^29.4.2", - "jest-haste-map": "^29.4.2", - "jest-leak-detector": "^29.4.2", - "jest-message-util": "^29.4.2", - "jest-resolve": "^29.4.2", - "jest-runtime": "^29.4.2", - "jest-util": "^29.4.2", - "jest-watcher": "^29.4.2", - "jest-worker": "^29.4.2", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "29.4.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.2.tgz", + "integrity": "sha512-wqwt0drm7JGjwdH+x1XgAl+TFPH7poowMguPQINYxaukCqlczAcNLJiK+OLxUxQAEWMdy+e6nHZlFHO5s7EuRg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.4.2", + "@jest/environment": "^29.4.2", + "@jest/test-result": "^29.4.2", + "@jest/transform": "^29.4.2", + "@jest/types": "^29.4.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.4.2", + "jest-environment-node": "^29.4.2", + "jest-haste-map": "^29.4.2", + "jest-leak-detector": "^29.4.2", + "jest-message-util": "^29.4.2", + "jest-resolve": "^29.4.2", + "jest-runtime": "^29.4.2", + "jest-util": "^29.4.2", + "jest-watcher": "^29.4.2", + "jest-worker": "^29.4.2", + "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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "jest-runtime": { + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.2.tgz", "integrity": "sha512-3fque9vtpLzGuxT9eZqhxi+9EylKK/ESfhClv4P7Y9sqJPs58LjVhTt8jaMp/pRO38agll1CkSu9z9ieTQeRrw==", "dev": true, - "requires": { + "dependencies": { "@jest/environment": "^29.4.2", "@jest/fake-timers": "^29.4.2", "@jest/globals": "^29.4.2", @@ -5638,73 +8255,101 @@ "slash": "^3.0.0", "strip-bom": "^4.0.0" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" } }, - "jest-snapshot": { + "node_modules/jest-runtime/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.2.tgz", "integrity": "sha512-PdfubrSNN5KwroyMH158R23tWcAXJyx4pvSvWls1dHoLCaUhGul9rsL3uVjtqzRpkxlkMavQjGuWG1newPgmkw==", "dev": true, - "requires": { + "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-jsx": "^7.7.2", @@ -5730,73 +8375,101 @@ "pretty-format": "^29.4.2", "semver": "^7.3.5" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, + "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/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "jest-util": { + "node_modules/jest-util": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.2.tgz", "integrity": "sha512-wKnm6XpJgzMUSRFB7YF48CuwdzuDIHenVuoIb1PLuJ6F+uErZsuDkU+EiExkChf6473XcawBrSfDSnXl+/YG4g==", "dev": true, - "requires": { + "dependencies": { "@jest/types": "^29.4.2", "@types/node": "*", "chalk": "^4.0.0", @@ -5804,1184 +8477,1815 @@ "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, + "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/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "29.4.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.2.tgz", + "integrity": "sha512-tto7YKGPJyFbhcKhIDFq8B5od+eVWD/ySZ9Tvcp/NGCvYA4RQbuzhbwYWtIjMT5W5zA2W0eBJwu4HVw34d5G6Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.4.2", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.2", + "leven": "^3.1.0", + "pretty-format": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "29.4.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.2.tgz", + "integrity": "sha512-onddLujSoGiMJt+tKutehIidABa175i/Ays+QvKxCqBwp7fvxP3ZhKsrIdOodt71dKxqk4sc0LN41mWLGIK44w==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.4.2", + "@jest/types": "^29.4.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.4.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "29.4.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.2.tgz", + "integrity": "sha512-VIuZA2hZmFyRbchsUCHEehoSf2HEl0YVF8SDJqtPnKorAaBuh42V8QsLnde0XP5F6TyCynGPEGgBOn3Fc+wZGw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.4.2", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/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, + "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/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "jest-validate": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.2.tgz", - "integrity": "sha512-tto7YKGPJyFbhcKhIDFq8B5od+eVWD/ySZ9Tvcp/NGCvYA4RQbuzhbwYWtIjMT5W5zA2W0eBJwu4HVw34d5G6Q==", + "node_modules/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "@jest/types": "^29.4.2", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.2", - "leven": "^3.1.0", - "pretty-format": "^29.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "engines": { + "node": ">=8" } }, - "jest-watcher": { + "node_modules/jest/node_modules/jest-cli": { "version": "29.4.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.2.tgz", - "integrity": "sha512-onddLujSoGiMJt+tKutehIidABa175i/Ays+QvKxCqBwp7fvxP3ZhKsrIdOodt71dKxqk4sc0LN41mWLGIK44w==", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.2.tgz", + "integrity": "sha512-b+eGUtXq/K2v7SH3QcJvFvaUaCDS1/YAZBYz0m28Q/Ppyr+1qNaHmVYikOrbHVbZqYQs2IeI3p76uy6BWbXq8Q==", "dev": true, - "requires": { + "dependencies": { + "@jest/core": "^29.4.2", "@jest/test-result": "^29.4.2", "@jest/types": "^29.4.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.13.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.4.2", "jest-util": "^29.4.2", - "string-length": "^4.0.1" + "jest-validate": "^29.4.2", + "prompts": "^2.0.1", + "yargs": "^17.3.1" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "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 } } }, - "jest-worker": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.2.tgz", - "integrity": "sha512-VIuZA2hZmFyRbchsUCHEehoSf2HEl0YVF8SDJqtPnKorAaBuh42V8QsLnde0XP5F6TyCynGPEGgBOn3Fc+wZGw==", + "node_modules/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, - "requires": { - "@types/node": "*", - "jest-util": "^29.4.2", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "dev": true - }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "js-yaml": { + "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "requires": { + "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsesc": { + "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, - "json-parse-even-better-errors": { + "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-schema-traverse": { + "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "json-stable-stringify-without-jsonify": { + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "json5": { + "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } }, - "kind-of": { + "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "kleur": { + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", "dev": true }, - "leven": { + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "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 + "dev": true, + "engines": { + "node": ">=6" + } }, - "levn": { + "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "lines-and-columns": { + "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 }, - "loader-runner": { + "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.11.5" + } }, - "locate-path": { + "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, - "requires": { + "dependencies": { "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "lodash": { + "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.debounce": { + "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "lodash.merge": { + "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lower-case": { + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, - "requires": { + "dependencies": { "tslib": "^2.0.3" } }, - "lru-cache": { + "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==", "dev": true, - "requires": { + "dependencies": { "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "make-dir": { + "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, - "requires": { + "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" } }, - "makeerror": { + "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "requires": { + "dependencies": { "tmpl": "1.0.5" } }, - "media-typer": { + "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "memfs": { + "node_modules/memfs": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", "dev": true, - "requires": { + "dependencies": { "fs-monkey": "1.0.3" + }, + "engines": { + "node": ">= 4.0.0" } }, - "merge-descriptors": { + "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "merge-stream": { + "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { + "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "micromatch": { + "node_modules/micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, - "requires": { + "dependencies": { "braces": "^3.0.1", "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" } }, - "mime": { + "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.34", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, - "requires": { + "dependencies": { "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" } }, - "mimic-fn": { + "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 + "dev": true, + "engines": { + "node": ">=6" + } }, - "minimalistic-assert": { + "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "minimatch": { + "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "requires": { - "minimist": "^1.2.5" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "ms": { + "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 }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, - "requires": { - "dns-packet": "^1.3.1", + "dependencies": { + "dns-packet": "^5.2.2", "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" } }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, - "natural-compare": { + "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "negotiator": { + "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 + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "neo-async": { + "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "no-case": { + "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, - "requires": { + "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, - "node-forge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", - "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", - "dev": true + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } }, - "node-int64": { + "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 }, - "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, - "normalize-path": { + "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "npm-run-path": { + "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, - "requires": { + "dependencies": { "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "nth-check": { + "node_modules/nth-check": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, - "requires": { + "dependencies": { "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "obuf": { + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, - "on-finished": { + "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, - "requires": { + "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "on-headers": { + "node_modules/on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "requires": { + "dependencies": { "wrappy": "1" } }, - "onetime": { + "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, - "requires": { + "dependencies": { "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "open": { + "node_modules/open": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, - "requires": { + "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "requires": { + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "p-limit": { + "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "requires": { + "dependencies": { "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-locate": { + "node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "requires": { + "dependencies": { "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "p-map": { + "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 + "dev": true, + "engines": { + "node": ">=6" + } }, - "p-retry": { + "node_modules/p-retry": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", "dev": true, - "requires": { + "dependencies": { "@types/retry": "^0.12.0", "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" } }, - "p-try": { + "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "param-case": { + "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, - "requires": { + "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, - "parent-module": { + "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "parse-json": { + "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, - "requires": { + "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" } }, - "parseurl": { + "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "pascal-case": { + "node_modules/pascal-case": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, - "requires": { + "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, - "path-exists": { + "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-is-inside": { + "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, - "path-key": { + "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-to-regexp": { + "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { + "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "pify": { + "node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "pinkie": { + "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "pinkie-promise": { + "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, - "requires": { + "dependencies": { "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "pirates": { + "node_modules/pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 6" + } }, - "pkg-dir": { + "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "requires": { + "dependencies": { "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "engines": { + "node": ">= 0.4" } }, - "postcss": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", - "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "dev": true, - "requires": { - "nanoid": "^3.2.0", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "postcss-modules-extract-imports": { + "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "postcss-modules-local-by-default": { + "node_modules/postcss-modules-local-by-default": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, - "requires": { + "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "postcss-modules-scope": { + "node_modules/postcss-modules-scope": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "postcss-modules-values": { + "node_modules/postcss-modules-values": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, - "requires": { + "dependencies": { "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "postcss-selector-parser": { + "node_modules/postcss-selector-parser": { "version": "6.0.9", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", "dev": true, - "requires": { + "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "postcss-value-parser": { + "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "prelude-ls": { + "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", - "dev": true + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } }, - "pretty-error": { + "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, - "requires": { + "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" } }, - "pretty-format": { + "node_modules/pretty-format": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.2.tgz", "integrity": "sha512-qKlHR8yFVCbcEWba0H0TOC8dnLlO4vPlyEjRPw31FZ2Rupy9nLa8ZLbYny8gWEl8CkEhJqAE6IzdNELTBVcBEg==", "dev": true, - "requires": { + "dependencies": { "@jest/schemas": "^29.4.2", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, - "dependencies": { - "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 - } + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "prompts": { + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/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, - "requires": { + "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", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "proxy-addr": { + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, - "requires": { + "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - } + "engines": { + "node": ">= 0.10" } }, - "punycode": { + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "qs": { + "node_modules/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "randombytes": { + "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "^5.1.0" } }, - "range-parser": { + "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "raw-body": { + "node_modules/raw-body": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", "dev": true, - "requires": { + "dependencies": { "bytes": "3.1.2", "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - } + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" } }, - "react-is": { + "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, - "readable-stream": { + "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "readdirp": { + "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "rechoir": { + "node_modules/rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, - "requires": { + "dependencies": { "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "regenerate": { + "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==", "dev": true }, - "regenerate-unicode-properties": { + "node_modules/regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, - "requires": { + "dependencies": { "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" } }, - "regenerator-runtime": { + "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, - "regenerator-transform": { + "node_modules/regenerator-transform": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dev": true, - "requires": { + "dependencies": { "@babel/runtime": "^7.8.4" } }, - "regexp.prototype.flags": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regexpp": { + "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } }, - "regexpu-core": { + "node_modules/regexpu-core": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.0.tgz", "integrity": "sha512-ZdhUQlng0RoscyW7jADnUZ25F5eVtHdMyXSb2PiwafvteRAOJUjFoUPEYZSIfP99fBIs3maLIRfpEddT78wAAQ==", "dev": true, - "requires": { + "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "regjsparser": { + "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "requires": { + "dependencies": { "jsesc": "~0.5.0" }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" } }, - "relateurl": { + "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "renderkid": { + "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, - "requires": { + "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", @@ -6989,137 +10293,207 @@ "strip-ansi": "^6.0.1" } }, - "require-directory": { + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "require-from-string": { + "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "requires-port": { + "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "resolve": { + "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, - "requires": { + "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-cwd": { + "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, - "requires": { + "dependencies": { "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "resolve-from": { + "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 + "dev": true, + "engines": { + "node": ">=8" + } }, - "resolve.exports": { + "node_modules/resolve.exports": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + } }, - "retry": { + "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "dev": true, + "engines": { + "node": ">= 4" + } }, - "rimraf": { + "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "requires": { + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/safe-array-concat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dev": true, - "requires": { - "queue-microtask": "^1.2.2" + "dependencies": { + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "safe-buffer": { + "node_modules/safe-array-concat/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 + }, + "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safer-buffer": { + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "schema-utils": { + "node_modules/schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, - "requires": { + "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "select-hose": { + "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", "dev": true }, - "selfsigned": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", - "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, - "requires": { - "node-forge": "^1.2.0" + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "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, + "bin": { + "semver": "bin/semver" + } }, - "send": { + "node_modules/send": { "version": "0.17.2", "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dev": true, - "requires": { + "dependencies": { "debug": "2.6.9", "depd": "~1.1.2", "destroy": "~1.0.4", @@ -7134,47 +10508,46 @@ "range-parser": "~1.2.1", "statuses": "~1.5.0" }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } + "ms": "2.0.0" } }, - "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "requires": { + "dependencies": { "randombytes": "^2.1.0" } }, - "serve-index": { + "node_modules/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, - "requires": { + "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", @@ -7183,160 +10556,247 @@ "mime-types": "~2.1.17", "parseurl": "~1.3.2" }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } + "ms": "2.0.0" + } + }, + "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": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "serve-static": { + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.2" + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "setprototypeof": { + "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, - "shallow-clone": { + "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "requires": { + "dependencies": { "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" } }, - "shebang-command": { + "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { + "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "signal-exit": { + "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "sisteransi": { + "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "slash": { + "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "sockjs": { + "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, - "requires": { + "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, - "source-map": { + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-js": { + "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-support": { + "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "requires": { + "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "spdy": { + "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, - "requires": { + "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", "http-deceiver": "^1.2.7", "select-hose": "^2.0.0", "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" } }, - "spdy-transport": { + "node_modules/spdy-transport": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, - "requires": { + "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", "hpack.js": "^2.1.6", @@ -7345,464 +10805,818 @@ "wbuf": "^1.7.3" } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "stack-utils": { + "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, - "requires": { + "dependencies": { "escape-string-regexp": "^2.0.0" }, - "dependencies": { - "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 - } + "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, + "engines": { + "node": ">=8" } }, - "statuses": { + "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } }, - "string-length": { + "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, - "requires": { + "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "string-width": { + "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, - "requires": { + "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "dev": true, - "requires": { - "safe-buffer": "~5.1.0" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "strip-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, - "requires": { + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-bom": { + "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 + "dev": true, + "engines": { + "node": ">=8" + } }, - "strip-final-newline": { + "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 + "dev": true, + "engines": { + "node": ">=6" + } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "style-loader": { + "node_modules/style-loader": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } }, - "supports-color": { + "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, - "requires": { + "dependencies": { "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } }, - "tapable": { + "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "node_modules/terser": { + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.2.tgz", + "integrity": "sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w==", "dev": true, - "requires": { + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", - "source-map": "~0.7.2", "source-map-support": "~0.5.20" }, - "dependencies": { - "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 - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, - "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.14", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@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" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "esbuild": { + "optional": true }, - "terser": { - "version": "5.16.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz", - "integrity": "sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } + "uglify-js": { + "optional": true } } }, - "test-exclude": { + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/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, - "requires": { + "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "thunky": { + "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, - "tmpl": { + "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 }, - "to-fast-properties": { + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "toidentifier": { + "node_modules/typed-array-byte-offset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.1.tgz", + "integrity": "sha512-tcqKMrTRXjqvHN9S3553NPCaGL0VPgFI92lXszmrE8DMhiDPLBYLlvo8Uu4WZAAX/aGqp/T1sbA4ph8EWjDF9Q==", "dev": true, - "requires": { - "prelude-ls": "^1.2.1" + "dependencies": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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 - }, - "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 + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "unicode-canonical-property-names-ecmascript": { + "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unicode-match-property-ecmascript": { + "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "requires": { + "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "unicode-match-property-value-ecmascript": { + "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unicode-property-aliases-ecmascript": { + "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==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "unpipe": { + "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "requires": { + "dependencies": { "punycode": "^2.1.0" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "utila": { + "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", "dev": true }, - "utils-merge": { + "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4.0" + } }, - "uuid": { + "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", "dev": true }, - "v8-to-istanbul": { + "node_modules/v8-to-istanbul": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" } }, - "vary": { + "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "walker": { + "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, - "requires": { + "dependencies": { "makeerror": "1.0.12" } }, - "watchpack": { + "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, - "requires": { + "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "wbuf": { + "node_modules/wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, - "requires": { + "dependencies": { "minimalistic-assert": "^1.0.0" } }, - "webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "node_modules/webpack": { + "version": "5.90.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", + "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", "dev": true, - "requires": { + "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -7811,72 +11625,34 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", + "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } } }, - "webpack-cli": { + "node_modules/webpack-cli": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.1.tgz", "integrity": "sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A==", "dev": true, - "requires": { + "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.0.1", "@webpack-cli/info": "^2.0.1", @@ -7891,345 +11667,458 @@ "rechoir": "^0.8.0", "webpack-merge": "^5.7.3" }, - "dependencies": { - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true } } }, - "webpack-dev-middleware": { + "node_modules/webpack-cli/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/webpack-dev-middleware": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", "dev": true, - "requires": { + "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.1", "mime-types": "^2.1.31", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "dev": true, "dependencies": { - "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "webpack-dev-server": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz", - "integrity": "sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A==", + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", "dev": true, - "requires": { + "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", "@types/express": "^4.17.13", "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", "@types/sockjs": "^0.3.33", - "@types/ws": "^8.2.2", + "@types/ws": "^8.5.5", "ansi-html-community": "^0.0.8", - "bonjour": "^3.5.0", + "bonjour-service": "^1.0.11", "chokidar": "^3.5.3", "colorette": "^2.0.10", "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", + "connect-history-api-fallback": "^2.0.0", "default-gateway": "^6.0.3", - "del": "^6.0.0", - "express": "^4.17.1", + "express": "^4.17.3", "graceful-fs": "^4.2.6", "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.0", + "http-proxy-middleware": "^2.0.3", "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", "open": "^8.0.9", "p-retry": "^4.5.0", - "portfinder": "^1.0.28", + "rimraf": "^3.0.2", "schema-utils": "^4.0.0", - "selfsigned": "^2.0.0", + "selfsigned": "^2.1.1", "serve-index": "^1.9.1", - "sockjs": "^0.3.21", + "sockjs": "^0.3.24", "spdy": "^4.0.2", - "strip-ansi": "^7.0.0", "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" + "ws": "^8.13.0" }, - "dependencies": { - "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dev": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "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 - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true }, - "ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true + "webpack-cli": { + "optional": true } } }, - "webpack-merge": { + "node_modules/webpack-merge": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, - "requires": { + "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "webpack-sources": { + "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "websocket-driver": { + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, - "requires": { + "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "websocket-extensions": { + "node_modules/websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "wildcard": { + "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { + "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, - "requires": { + "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-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } + "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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "wrappy": { + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write-file-atomic": { + "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, - "requires": { + "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": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "y18n": { + "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 + "dev": true, + "engines": { + "node": ">=10" + } }, - "yallist": { + "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "yargs": { + "node_modules/yargs": { "version": "17.6.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, - "requires": { + "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", @@ -8237,19 +12126,31 @@ "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "yargs-parser": { + "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 + "dev": true, + "engines": { + "node": ">=12" + } }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index 1aca1283bf..7ab31cf269 100644 --- a/package.json +++ b/package.json @@ -14,16 +14,20 @@ "@babel/core": "^7.20.12", "@babel/preset-env": "^7.20.2", "@types/jest": "^29.2.5", - "jest": "^29.3.1", "babel-jest": "^29.3.1", "babel-loader": "^9.1.2", "clean-webpack-plugin": "^4.0.0", - "html-webpack-plugin": "^5.5.0", "css-loader": "^6.6.0", - "style-loader": "^3.3.1", - "eslint": "^8.31.0", - "prettier": "^2.8.2", + "eslint": "^8.2.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-prettier": "^5.1.3", "esm": "^3.2.25", + "html-webpack-plugin": "^5.5.0", + "jest": "^29.3.1", + "prettier": "^3.2.5", + "style-loader": "^3.3.1", "webpack": "^5.75.0", "webpack-cli": "^5.0.1", "webpack-dev-server": "^4.7.4" From 812e848ac8c7a8b6bc2e54eef24002ce73628360 Mon Sep 17 00:00:00 2001 From: dabin Date: Tue, 20 Feb 2024 21:11:26 +0900 Subject: [PATCH 06/39] =?UTF-8?q?test:=20=EA=B5=AC=EC=9E=85=20=EA=B8=88?= =?UTF-8?q?=EC=95=A1=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=A1=9C=EB=98=90=20?= =?UTF-8?q?=EB=B0=9C=ED=96=89=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: vi-wolhwa --- __tests__/LottoMachine.test.js | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 __tests__/LottoMachine.test.js diff --git a/__tests__/LottoMachine.test.js b/__tests__/LottoMachine.test.js new file mode 100644 index 0000000000..b0b4d3ee0c --- /dev/null +++ b/__tests__/LottoMachine.test.js @@ -0,0 +1,32 @@ +import Lotto from '../src/domain/Lotto'; +import LottoMachine from '../src/domain/LottoMachine'; + +describe('구입 금액만큼 로또 발행', () => { + let lottoMachine; + + beforeEach(() => { + lottoMachine = new LottoMachine(); + }); + + test('구입 금액이 1000 미만이라면 에러를 발생시킨다.', () => { + const purchaseAmount = 999; + + expect(() => lottoMachine.publishLottos(purchaseAmount)).toThrow( + '구입금액은 1000 이상이어야 합니다.' + ); + }); + + test.each([ + [1000, 1], + [2000, 2], + [3000, 3] + ])( + '구입 금액이 1000 이상이라면 발행 수량만큼 로또를 발행한다.', + (purchaseAmount, quantity) => { + const lottos = lottoMachine.publishLottos(purchaseAmount); + + expect(lottos.length).toBe(quantity); + expect(lottos.every((lotto) => lotto instanceof Lotto)).toBe(true); + } + ); +}); From 8010ff6f7d549b6d44425505c328bd3c85dcff3f Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 21 Feb 2024 16:16:40 +0900 Subject: [PATCH 07/39] =?UTF-8?q?chore:=20eslint=20=ED=94=8C=EB=9F=AC?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=9E=AC=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 00kang --- .eslintrc.json | 36 ++-- package-lock.json | 421 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 + 3 files changed, 445 insertions(+), 14 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 4e7e895038..178ebff845 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,25 @@ { + "env": { + "es6": true, + "node": true, + "jest": true + }, + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "extends": [ + "airbnb", + "airbnb/hooks", + "prettier", + "plugin:jest/recommended", + "plugin:prettier/recommended", + "plugin:import/errors", + "plugin:import/warnings", + "eslint:recommended" + ], + "plugins": ["import", "jest", "prettier"], "rules": { - "max-depth": ["error", 3], "max-lines-per-function": ["error", { "max": 10 }], "import/extensions": ["error", { "js": "ignorePackages" }], "import/order": [ @@ -38,14 +57,9 @@ "caseInsensitive": true } } - ] - }, - "env": { - "es6": true, - "node": true - }, - "parserOptions": { - "ecmaVersion": "latest" - }, - "extends": ["eslint:recommended", "plugin:prettier/recommended"] + ], + "max-depth": ["error", { "max": 2 }], + "max-params": ["error", 3], + "class-methods-use-this": "off" + } } diff --git a/package-lock.json b/package-lock.json index 3b36dde367..57f88cc408 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "eslint-config-airbnb": "^19.0.4", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^27.9.0", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react": "^7.28.0", @@ -1853,6 +1854,21 @@ "node": ">=10.0.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", @@ -2703,6 +2719,41 @@ "dev": true, "optional": 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==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "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==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "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==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@pkgr/core": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", @@ -2998,6 +3049,12 @@ "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", "dev": true }, + "node_modules/@types/semver": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", + "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", + "dev": true + }, "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -3056,6 +3113,196 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/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, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", @@ -4522,9 +4769,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -4683,6 +4930,18 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", @@ -5255,6 +5514,31 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/eslint-plugin-jest": { + "version": "27.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", + "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^5.10.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", @@ -5858,6 +6142,22 @@ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -5879,6 +6179,15 @@ "node": ">= 4.9.1" } }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/faye-websocket": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", @@ -9174,6 +9483,15 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -9740,6 +10058,15 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -10084,6 +10411,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -10373,6 +10720,16 @@ "node": ">= 4" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -10388,6 +10745,29 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-array-concat": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", @@ -11295,6 +11675,27 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11407,6 +11808,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", diff --git a/package.json b/package.json index 7ab31cf269..8d4c72328f 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "우아한테크코스 웹 프론트엔드 레벨1 로또 미션", "license": "MIT", "scripts": { + "type": "module", "test": "jest --watch --no-cache", "build-step1": "webpack --config step1.config.js", "start-step1": "npm run build-step1 && node dist/step1-bundle.js", @@ -22,6 +23,7 @@ "eslint-config-airbnb": "^19.0.4", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^27.9.0", "eslint-plugin-prettier": "^5.1.3", "esm": "^3.2.25", "html-webpack-plugin": "^5.5.0", From 725f6900452a3c9664bc4d3a139743f47060e04f Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 21 Feb 2024 16:36:15 +0900 Subject: [PATCH 08/39] =?UTF-8?q?feat:=20=EA=B5=AC=EC=9E=85=EA=B8=88?= =?UTF-8?q?=EC=95=A1=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=B0=9C=ED=96=89=20?= =?UTF-8?q?=EC=88=98=EB=9F=89=20=EA=B3=84=EC=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 구입금액에 대한 발행 수량 반환 - 구입금액에 대한 유효성검사 (정수, 최솟값) Co-authored-by: 00kang --- __tests__/LottoMachine.test.js | 32 ++++++++++++------- docs/REQUIREMENTS.md | 13 ++++++-- src/constant/Messages.js | 10 ++++++ src/constant/Options.js | 7 ++++ src/domain/LottoMachine.js | 12 +++++++ .../validation/PurchaseAmountValidator.js | 28 ++++++++++++++++ src/util/validation/Validation.js | 11 +++++++ 7 files changed, 99 insertions(+), 14 deletions(-) create mode 100644 src/constant/Messages.js create mode 100644 src/constant/Options.js create mode 100644 src/domain/LottoMachine.js create mode 100644 src/util/validation/PurchaseAmountValidator.js create mode 100644 src/util/validation/Validation.js diff --git a/__tests__/LottoMachine.test.js b/__tests__/LottoMachine.test.js index b0b4d3ee0c..a8d2216f9d 100644 --- a/__tests__/LottoMachine.test.js +++ b/__tests__/LottoMachine.test.js @@ -1,32 +1,42 @@ -import Lotto from '../src/domain/Lotto'; +/* eslint-disable max-lines-per-function */ +import { ERROR_MESSAGE, VARIABLE_ALIAS } from '../src/constant/Messages.js'; +import OPTIONS from '../src/constant/Options.js'; import LottoMachine from '../src/domain/LottoMachine'; -describe('구입 금액만큼 로또 발행', () => { +describe('구입 금액에 따른 구입 가능 수량 계산 테스트', () => { let lottoMachine; beforeEach(() => { lottoMachine = new LottoMachine(); }); + test.each(['a', 1.1])( + '구입 금액이 정수가 아니라면 에러를 발생시킨다', + (purchaseAmount) => { + expect(() => lottoMachine.calculateIssueQuantity(purchaseAmount)).toThrow( + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(VARIABLE_ALIAS.purchaseAmount)}` + ); + } + ); + test('구입 금액이 1000 미만이라면 에러를 발생시킨다.', () => { const purchaseAmount = 999; - expect(() => lottoMachine.publishLottos(purchaseAmount)).toThrow( - '구입금액은 1000 이상이어야 합니다.' + expect(() => lottoMachine.calculateIssueQuantity(purchaseAmount)).toThrow( + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotAtLeast(VARIABLE_ALIAS.purchaseAmount, OPTIONS.LOTTO.price)}` ); }); test.each([ [1000, 1], - [2000, 2], - [3000, 3] + [1999, 1], + [2000, 2] ])( - '구입 금액이 1000 이상이라면 발행 수량만큼 로또를 발행한다.', + '구입 금액에 따른 발행 수량을 계산하여 반환한다.', (purchaseAmount, quantity) => { - const lottos = lottoMachine.publishLottos(purchaseAmount); - - expect(lottos.length).toBe(quantity); - expect(lottos.every((lotto) => lotto instanceof Lotto)).toBe(true); + expect(lottoMachine.calculateIssueQuantity(purchaseAmount)).toBe( + quantity + ); } ); }); diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index b218c8cfb1..a64d707177 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -1,13 +1,15 @@ ## 기능 목록 ### 구입 금액 입력 + - [ ] 금액 입력 : 힌트 - [ ] 전처리 : trim -- [ ] 유효성검사 : 정수, 1000이상 ### 구입 금액만큼 로또 발행 + - 발행 수량 - - [ ] 발행 수량 계산 + - [x] 발행 수량 계산 + - [x] 유효성검사 : 정수, 1000이상 - [ ] 발행 수량 출력 - 로또 발행 - [ ] 1~45 중 난수 6개 추출 : 중복x @@ -15,16 +17,19 @@ - [ ] 로또 번호 출력 ### 당첨 번호 입력 + - [ ] 당첨 번호 입력 : 힌트 - [ ] 전처리 : split(','), trim - [ ] 유효성검사 : 공백문자열, 개수, 정수, 1~45, 중복x ### 보너스 번호 입력 + - [ ] 보너스 번호 입력 : 힌트 - [ ] 전처리 : trim - [ ] 유효성검사 : 정수, 1~45, excluded(당첨번호) ### 당첨 결과 분석 + - [ ] 당첨 여부 판단 (등수 별 개수) - [ ] 로또번호, 당첨번호 비교 - [ ] 보너스번호 포함 여부 @@ -32,12 +37,14 @@ - [ ] 당첨 결과, 수익률 출력 ### 재시작 여부 + - [ ] 재시작 여부 입력 - [ ] 전처리 : trim - [ ] 유효성검사 : included(yYnN) - [ ] 프로그램 재시작 ### 예외처리 + - [ ] 예외 발생 시 해당 위치부터 재입력 ``` @@ -47,4 +54,4 @@ 3등: 5개 번호 일치 / 1,500,000원 4등: 4개 번호 일치 / 50,000원 5등: 3개 번호 일치 / 5,000원 -``` \ No newline at end of file +``` diff --git a/src/constant/Messages.js b/src/constant/Messages.js new file mode 100644 index 0000000000..1b0c1bff54 --- /dev/null +++ b/src/constant/Messages.js @@ -0,0 +1,10 @@ +export const VARIABLE_ALIAS = { + purchaseAmount: '구입 금액' +}; + +export const ERROR_MESSAGE = { + prefix: '[ERROR] ', + isNotInteger: (name) => `${name}(은)는 정수 값이어야 합니다.`, + isNotAtLeast: (name, threshold) => + `${name}(은)는 ${threshold} 이상이어야 합니다.` +}; diff --git a/src/constant/Options.js b/src/constant/Options.js new file mode 100644 index 0000000000..045d66a38f --- /dev/null +++ b/src/constant/Options.js @@ -0,0 +1,7 @@ +const OPTIONS = { + LOTTO: { + price: 1000 + } +}; + +export default OPTIONS; diff --git a/src/domain/LottoMachine.js b/src/domain/LottoMachine.js new file mode 100644 index 0000000000..4208cb7d6f --- /dev/null +++ b/src/domain/LottoMachine.js @@ -0,0 +1,12 @@ +import OPTIONS from '../constant/Options.js'; +import PurchaseAmountValidator from '../util/validation/PurchaseAmountValidator.js'; + +class LottoMachine { + calculateIssueQuantity(purchaseAmount) { + PurchaseAmountValidator.validate(purchaseAmount); + + return parseInt(purchaseAmount / OPTIONS.LOTTO.price, 10); + } +} + +export default LottoMachine; diff --git a/src/util/validation/PurchaseAmountValidator.js b/src/util/validation/PurchaseAmountValidator.js new file mode 100644 index 0000000000..707cd72e92 --- /dev/null +++ b/src/util/validation/PurchaseAmountValidator.js @@ -0,0 +1,28 @@ +import { ERROR_MESSAGE, VARIABLE_ALIAS } from '../../constant/Messages.js'; +import OPTIONS from '../../constant/Options.js'; +import Validation from './Validation.js'; + +class PurchaseAmountValidator { + static validate(purchaseAmount) { + this.validateIsInteger(purchaseAmount); + this.validateIsAtLeast(purchaseAmount, OPTIONS.LOTTO.price); + } + + static validateIsInteger(value) { + if (!Validation.isInteger(value)) { + throw new Error( + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(VARIABLE_ALIAS.purchaseAmount)}` + ); + } + } + + static validateIsAtLeast(value, threshold) { + if (!Validation.isAtLeast(value, threshold)) { + throw new Error( + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotAtLeast(VARIABLE_ALIAS.purchaseAmount, threshold)}` + ); + } + } +} + +export default PurchaseAmountValidator; diff --git a/src/util/validation/Validation.js b/src/util/validation/Validation.js new file mode 100644 index 0000000000..ff4c8ab4f6 --- /dev/null +++ b/src/util/validation/Validation.js @@ -0,0 +1,11 @@ +class Validation { + static isInteger(value) { + return Number.isInteger(value); + } + + static isAtLeast(value, threshold) { + return value >= threshold; + } +} + +export default Validation; From 916057e6dfb5e3dd4b72597317b6a1c2d56f0b1b Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 21 Feb 2024 17:52:09 +0900 Subject: [PATCH 09/39] =?UTF-8?q?feat:=20=EB=9E=9C=EB=8D=A4=20=EC=9C=A0?= =?UTF-8?q?=ED=8B=B8=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 특정 범위 내 난수 발생 함수 - 특정 범위 내 조합 추출 함수 Co-authored-by: 00kang --- __tests__/Random.test.js | 38 ++++++++++++++++++++++++++++++++++++++ docs/REQUIREMENTS.md | 2 +- src/util/random/Random.js | 24 ++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 __tests__/Random.test.js create mode 100644 src/util/random/Random.js diff --git a/__tests__/Random.test.js b/__tests__/Random.test.js new file mode 100644 index 0000000000..32c7f5ec1b --- /dev/null +++ b/__tests__/Random.test.js @@ -0,0 +1,38 @@ +/* eslint-disable max-lines-per-function */ +import Random from '../src/util/random/Random.js'; + +describe('랜덤 테스트', () => { + test('특정 범위 내에서 랜덤 값 1개를 반환한다.', () => { + const min = 1; + const max = 10; + const testCount = 10; + + const testSuites = Array(testCount) + .fill() + .map(() => Random.randomPickNumber(min, max)); + + expect( + testSuites.every((testSuite) => min <= testSuite && testSuite <= max) + ).toBe(true); + }); + + test('특정 범위 내에서 중복되지 않은 조합을 반환한다.', () => { + const min = 1; + const max = 45; + const count = 6; + const testCount = 5; + + const testSuites = Array(testCount) + .fill() + .map(() => Random.pickCombination(min, max, count)); + + expect( + testSuites.every((testSuite) => { + return ( + testSuite.length === new Set(testSuite).size && + testSuite.length === count + ); + }) + ).toBe(true); + }); +}); diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index a64d707177..724d4ecc14 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -12,7 +12,7 @@ - [x] 유효성검사 : 정수, 1000이상 - [ ] 발행 수량 출력 - 로또 발행 - - [ ] 1~45 중 난수 6개 추출 : 중복x + - [x] 1~45 중 난수 6개 추출 : 중복x - [ ] 오름차순 정렬 - [ ] 로또 번호 출력 diff --git a/src/util/random/Random.js b/src/util/random/Random.js new file mode 100644 index 0000000000..8758aad6f6 --- /dev/null +++ b/src/util/random/Random.js @@ -0,0 +1,24 @@ +class Random { + static randomPickNumber(min, max) { + const minNumber = Math.ceil(min); + const maxNumber = Math.floor(max); + return Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber; + } + + // eslint-disable-next-line max-lines-per-function, max-params + static pickCombination(min, max, count, array = []) { + const number = this.randomPickNumber(min, max); + + if (array.length === count) { + return array; + } + + if (array.indexOf(number) < 0) { + array.push(number); + } + + return this.pickCombination(min, max, count, array); + } +} + +export default Random; From d90568f264cf2c7a9bf24370223e56da7f96170f Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 21 Feb 2024 19:36:26 +0900 Subject: [PATCH 10/39] =?UTF-8?q?feat:=20=EC=88=98=EB=9F=89=20=EB=A7=8C?= =?UTF-8?q?=ED=81=BC=20=EB=A1=9C=EB=98=90=20=EB=B0=9C=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 랜덤으로 로또 번호 생성 - 수량 만큼 로또 발행 Co-authored-by: 00kang --- __tests__/LottoMachine.test.js | 72 +++++++++++++++++++++++----------- docs/REQUIREMENTS.md | 1 + src/constant/Options.js | 5 ++- src/domain/Lotto.js | 3 ++ src/domain/LottoMachine.js | 17 ++++++++ 5 files changed, 74 insertions(+), 24 deletions(-) create mode 100644 src/domain/Lotto.js diff --git a/__tests__/LottoMachine.test.js b/__tests__/LottoMachine.test.js index a8d2216f9d..bc17ee78b7 100644 --- a/__tests__/LottoMachine.test.js +++ b/__tests__/LottoMachine.test.js @@ -1,42 +1,68 @@ /* eslint-disable max-lines-per-function */ import { ERROR_MESSAGE, VARIABLE_ALIAS } from '../src/constant/Messages.js'; import OPTIONS from '../src/constant/Options.js'; +import Lotto from '../src/domain/Lotto.js'; import LottoMachine from '../src/domain/LottoMachine'; -describe('구입 금액에 따른 구입 가능 수량 계산 테스트', () => { +// TODO: calculateIssueQuantity 함수를 private 함수로 변경 +describe('LottoMachine 단위테스트', () => { let lottoMachine; beforeEach(() => { lottoMachine = new LottoMachine(); }); - test.each(['a', 1.1])( - '구입 금액이 정수가 아니라면 에러를 발생시킨다', - (purchaseAmount) => { + describe('구입 금액에 따른 구입 가능 수량 계산 테스트', () => { + test.each(['a', 1.1])( + '구입 금액(%s)이 정수가 아니라면 에러를 발생시킨다.', + (purchaseAmount) => { + expect(() => + lottoMachine.calculateIssueQuantity(purchaseAmount) + ).toThrow( + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(VARIABLE_ALIAS.purchaseAmount)}` + ); + } + ); + + test('구입 금액이 1000 미만이라면 에러를 발생시킨다.', () => { + const purchaseAmount = 999; + expect(() => lottoMachine.calculateIssueQuantity(purchaseAmount)).toThrow( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(VARIABLE_ALIAS.purchaseAmount)}` + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotAtLeast(VARIABLE_ALIAS.purchaseAmount, OPTIONS.LOTTO.price)}` ); - } - ); + }); - test('구입 금액이 1000 미만이라면 에러를 발생시킨다.', () => { - const purchaseAmount = 999; - - expect(() => lottoMachine.calculateIssueQuantity(purchaseAmount)).toThrow( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotAtLeast(VARIABLE_ALIAS.purchaseAmount, OPTIONS.LOTTO.price)}` + test.each([ + [1000, 1], + [1999, 1], + [2000, 2] + ])( + '구입 금액(%s)에 따른 발행 수량(%s)을 계산하여 반환한다.', + (purchaseAmount, quantity) => { + expect(lottoMachine.calculateIssueQuantity(purchaseAmount)).toBe( + quantity + ); + } ); }); - test.each([ - [1000, 1], - [1999, 1], - [2000, 2] - ])( - '구입 금액에 따른 발행 수량을 계산하여 반환한다.', - (purchaseAmount, quantity) => { - expect(lottoMachine.calculateIssueQuantity(purchaseAmount)).toBe( - quantity + describe('지정 수량 만큼 로또 발행 테스트', () => { + // TEST: 발행 개수 && 객체 타입 + + test('지정 수량만큼 로또를 발행한다.', () => { + const issueQuantity = 1; + const lottos = lottoMachine.issueLottos(issueQuantity); + + expect(Array.isArray(lottos) && lottos.length === issueQuantity).toBe( + true ); - } - ); + }); + + test('로또 객체의 배열을 반환한다.', () => { + const issueQuantity = 1; + const lottos = lottoMachine.issueLottos(issueQuantity); + + expect(lottos.every((lotto) => lotto instanceof Lotto)).toBe(true); + }); + }); }); diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index 724d4ecc14..99ce98c10a 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -13,6 +13,7 @@ - [ ] 발행 수량 출력 - 로또 발행 - [x] 1~45 중 난수 6개 추출 : 중복x + - [x] 수량만큼 로또 발행 - [ ] 오름차순 정렬 - [ ] 로또 번호 출력 diff --git a/src/constant/Options.js b/src/constant/Options.js index 045d66a38f..5498ff8bef 100644 --- a/src/constant/Options.js +++ b/src/constant/Options.js @@ -1,6 +1,9 @@ const OPTIONS = { LOTTO: { - price: 1000 + price: 1000, + minNumber: 1, + maxNumber: 45, + combination: 6 } }; diff --git a/src/domain/Lotto.js b/src/domain/Lotto.js new file mode 100644 index 0000000000..3c2e52ebe4 --- /dev/null +++ b/src/domain/Lotto.js @@ -0,0 +1,3 @@ +class Lotto {} + +export default Lotto; diff --git a/src/domain/LottoMachine.js b/src/domain/LottoMachine.js index 4208cb7d6f..4428a844ab 100644 --- a/src/domain/LottoMachine.js +++ b/src/domain/LottoMachine.js @@ -1,5 +1,7 @@ import OPTIONS from '../constant/Options.js'; +import Random from '../util/random/Random.js'; import PurchaseAmountValidator from '../util/validation/PurchaseAmountValidator.js'; +import Lotto from './Lotto.js'; class LottoMachine { calculateIssueQuantity(purchaseAmount) { @@ -7,6 +9,21 @@ class LottoMachine { return parseInt(purchaseAmount / OPTIONS.LOTTO.price, 10); } + + issueLottos(issueQuantity) { + return Array.from( + { length: issueQuantity }, + () => new Lotto(this.#pickLottoNumbers()) + ); + } + + #pickLottoNumbers() { + return Random.pickCombination( + OPTIONS.LOTTO.minNumber, + OPTIONS.LOTTO.maxNumber, + OPTIONS.LOTTO.combination + ); + } } export default LottoMachine; From 6e11789fb6677afdc96947a117531f18f1b62640 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 21 Feb 2024 22:04:04 +0900 Subject: [PATCH 11/39] =?UTF-8?q?feat:=20=EB=A1=9C=EB=98=90=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=20=EC=83=9D=EC=84=B1=20=EB=B0=8F=20=EB=B2=88=ED=98=B8?= =?UTF-8?q?=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 로또 객체 생성 시 유효성 검사 - 로또 번호 오름차순 정렬 Co-authored-by: 00kang --- __tests__/Lotto.test.js | 44 ++++++++++++++++ docs/REQUIREMENTS.md | 3 +- src/constant/Messages.js | 9 +++- src/domain/Lotto.js | 20 ++++++- src/util/validation/LottoNumbersValidator.js | 52 +++++++++++++++++++ .../validation/PurchaseAmountValidator.js | 6 ++- src/util/validation/Validation.js | 12 +++++ 7 files changed, 140 insertions(+), 6 deletions(-) create mode 100644 __tests__/Lotto.test.js create mode 100644 src/util/validation/LottoNumbersValidator.js diff --git a/__tests__/Lotto.test.js b/__tests__/Lotto.test.js new file mode 100644 index 0000000000..5ade37d9be --- /dev/null +++ b/__tests__/Lotto.test.js @@ -0,0 +1,44 @@ +/* eslint-disable max-lines-per-function */ +import { VARIABLE_ALIAS, ERROR_MESSAGE } from '../src/constant/Messages.js'; +import OPTIONS from '../src/constant/Options.js'; +import Lotto from '../src/domain/Lotto.js'; + +describe('Lotto 단위테스트', () => { + test.each([[[1, 2, 3, 4, 5]], [[1, 2, 3, 4, 5, 6, 7]]])( + '로또 번호(%s)가 6개가 아니면 에러를 발생한다.', + (numbers) => { + expect(() => new Lotto(numbers)).toThrow( + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.hasNotLength(VARIABLE_ALIAS.lottoNumbers, OPTIONS.LOTTO.combination)}` + ); + } + ); + + test.each([[['a', 2, 3, 4, 5, 6]], [[1.1, 2, 3, 4, 5, 6]]])( + '로또 번호(%s) 중 정수 이외의 값이 있다면 에러를 발생한다.', + (numbers) => { + expect(() => new Lotto(numbers)).toThrow(); + } + ); + + test.each([[[1, 2, 3, 4, 5, 46]], [[0, 1, 2, 3, 4, 5]]])( + '로또 번호(%s)의 범위가 1부터 45 사이가 아니라면 에러를 발생한다.', + (numbers) => { + expect(() => new Lotto(numbers)).toThrow(); + } + ); + + test('로또 번호에 중복되는 수가 있다면 에러를 발생한다.', () => { + const numbers = [1, 1, 2, 3, 4, 5]; + + expect(() => new Lotto(numbers)).toThrow(); + }); + + test.each([[[3, 2, 4, 5, 6, 1]], [[13, 12, 14, 15, 16, 11]]])( + '로또 번호는 오름차순으로 정렬된다.', + (numbers) => { + const lotto = new Lotto(numbers); + + expect(lotto.getNumbers()).toStrictEqual(numbers.sort()); + } + ); +}); diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index 99ce98c10a..bdf6bf1ff8 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -14,7 +14,8 @@ - 로또 발행 - [x] 1~45 중 난수 6개 추출 : 중복x - [x] 수량만큼 로또 발행 - - [ ] 오름차순 정렬 + - [x] 유효성검사 : 개수(6), 정수, 범위(1~45), 중복x + - [x] 오름차순 정렬 - [ ] 로또 번호 출력 ### 당첨 번호 입력 diff --git a/src/constant/Messages.js b/src/constant/Messages.js index 1b0c1bff54..df4862b944 100644 --- a/src/constant/Messages.js +++ b/src/constant/Messages.js @@ -1,10 +1,15 @@ export const VARIABLE_ALIAS = { - purchaseAmount: '구입 금액' + purchaseAmount: '구입 금액', + lottoNumbers: '로또 번호' }; export const ERROR_MESSAGE = { prefix: '[ERROR] ', isNotInteger: (name) => `${name}(은)는 정수 값이어야 합니다.`, isNotAtLeast: (name, threshold) => - `${name}(은)는 ${threshold} 이상이어야 합니다.` + `${name}(은)는 ${threshold} 이상이어야 합니다.`, + hasNotLength: (name, length) => `${name}의 길이는 ${length}이어야 합니다.`, + isNotInRange: (name, min, max) => + `${name}(은)는 [${min} ~ ${max}] 범위 이내의 값이어야 합니다.`, + isNotUnique: (name) => `${name}(은)는 중복된 요소를 갖지 않아야 합니다.` }; diff --git a/src/domain/Lotto.js b/src/domain/Lotto.js index 3c2e52ebe4..c876a5c843 100644 --- a/src/domain/Lotto.js +++ b/src/domain/Lotto.js @@ -1,3 +1,21 @@ -class Lotto {} +import LottoNumbersValidator from '../util/validation/LottoNumbersValidator.js'; + +class Lotto { + #numbers; + + constructor(numbers) { + LottoNumbersValidator.validate(numbers); + + this.#numbers = this.#sortNumbersAscending(numbers); + } + + #sortNumbersAscending(numbers) { + return numbers.sort(); + } + + getNumbers() { + return this.#numbers; + } +} export default Lotto; diff --git a/src/util/validation/LottoNumbersValidator.js b/src/util/validation/LottoNumbersValidator.js new file mode 100644 index 0000000000..e717f4670d --- /dev/null +++ b/src/util/validation/LottoNumbersValidator.js @@ -0,0 +1,52 @@ +import { VARIABLE_ALIAS, ERROR_MESSAGE } from '../../constant/Messages.js'; +import OPTIONS from '../../constant/Options.js'; +import Validation from './Validation.js'; + +class LottoNumbersValidator { + static name = VARIABLE_ALIAS.lottoNumbers; + + static validate(numbers) { + this.validateHasLength(numbers, OPTIONS.LOTTO.combination); + this.validateIsInteger(numbers); + this.validateIsInRange( + numbers, + OPTIONS.LOTTO.minNumber, + OPTIONS.LOTTO.maxNumber + ); + this.validateIsUnique(numbers); + } + + static validateHasLength(numbers, length) { + if (!Validation.hasLength(numbers, length)) { + throw new Error( + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.hasNotLength(this.name, length)}` + ); + } + } + + static validateIsInteger(numbers) { + if (!numbers.every((number) => Validation.isInteger(number))) { + throw new Error( + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(this.name)}` + ); + } + } + + static validateIsInRange(numbers, min, max) { + if (!numbers.every((number) => Validation.isInRange(number, min, max))) { + throw new Error( + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInRange(this.name, min, max)}` + ); + } + } + + static validateIsUnique(numbers) { + if (!Validation.isUnique(numbers)) { + throw new Error( + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotUnique(this.name)}` + ); + } + } +} + +export default LottoNumbersValidator; diff --git a/src/util/validation/PurchaseAmountValidator.js b/src/util/validation/PurchaseAmountValidator.js index 707cd72e92..a07dbd537b 100644 --- a/src/util/validation/PurchaseAmountValidator.js +++ b/src/util/validation/PurchaseAmountValidator.js @@ -3,6 +3,8 @@ import OPTIONS from '../../constant/Options.js'; import Validation from './Validation.js'; class PurchaseAmountValidator { + static name = VARIABLE_ALIAS.purchaseAmount; + static validate(purchaseAmount) { this.validateIsInteger(purchaseAmount); this.validateIsAtLeast(purchaseAmount, OPTIONS.LOTTO.price); @@ -11,7 +13,7 @@ class PurchaseAmountValidator { static validateIsInteger(value) { if (!Validation.isInteger(value)) { throw new Error( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(VARIABLE_ALIAS.purchaseAmount)}` + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(this.name)}` ); } } @@ -19,7 +21,7 @@ class PurchaseAmountValidator { static validateIsAtLeast(value, threshold) { if (!Validation.isAtLeast(value, threshold)) { throw new Error( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotAtLeast(VARIABLE_ALIAS.purchaseAmount, threshold)}` + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotAtLeast(this.name, threshold)}` ); } } diff --git a/src/util/validation/Validation.js b/src/util/validation/Validation.js index ff4c8ab4f6..ee12cf1559 100644 --- a/src/util/validation/Validation.js +++ b/src/util/validation/Validation.js @@ -6,6 +6,18 @@ class Validation { static isAtLeast(value, threshold) { return value >= threshold; } + + static hasLength(array, length) { + return array.length === length; + } + + static isInRange(value, min, max) { + return value >= min && value <= max; + } + + static isUnique(array) { + return array.length === new Set(array).size; + } } export default Validation; From f6893375c268ddc96c018d20142297b9824d3c78 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 22 Feb 2024 13:58:52 +0900 Subject: [PATCH 12/39] =?UTF-8?q?feat:=20=EB=8B=B9=EC=B2=A8=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EB=B6=84=EC=84=9D,=20=EC=88=9C=EC=9C=84=20?= =?UTF-8?q?=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 로또번호 일치 개수 분석 - 보너스번호 포함 여부 분석 - 로또 결과(순위) 판단 Co-authored-by: 00kang --- __tests__/Lotto.test.js | 127 ++++++++++++++++++++++++++++++---------- docs/REQUIREMENTS.md | 6 +- src/constant/Options.js | 22 +++++++ src/domain/Lotto.js | 39 ++++++++++++ 4 files changed, 161 insertions(+), 33 deletions(-) diff --git a/__tests__/Lotto.test.js b/__tests__/Lotto.test.js index 5ade37d9be..f2396cfe1b 100644 --- a/__tests__/Lotto.test.js +++ b/__tests__/Lotto.test.js @@ -4,41 +4,108 @@ import OPTIONS from '../src/constant/Options.js'; import Lotto from '../src/domain/Lotto.js'; describe('Lotto 단위테스트', () => { - test.each([[[1, 2, 3, 4, 5]], [[1, 2, 3, 4, 5, 6, 7]]])( - '로또 번호(%s)가 6개가 아니면 에러를 발생한다.', - (numbers) => { - expect(() => new Lotto(numbers)).toThrow( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.hasNotLength(VARIABLE_ALIAS.lottoNumbers, OPTIONS.LOTTO.combination)}` - ); - } - ); - - test.each([[['a', 2, 3, 4, 5, 6]], [[1.1, 2, 3, 4, 5, 6]]])( - '로또 번호(%s) 중 정수 이외의 값이 있다면 에러를 발생한다.', - (numbers) => { - expect(() => new Lotto(numbers)).toThrow(); - } - ); + describe('로또 발행 테스트', () => { + test.each([[[1, 2, 3, 4, 5]], [[1, 2, 3, 4, 5, 6, 7]]])( + '로또 번호(%s)가 6개가 아니면 에러를 발생한다.', + (numbers) => { + expect(() => new Lotto(numbers)).toThrow( + `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.hasNotLength(VARIABLE_ALIAS.lottoNumbers, OPTIONS.LOTTO.combination)}` + ); + } + ); + + test.each([[['a', 2, 3, 4, 5, 6]], [[1.1, 2, 3, 4, 5, 6]]])( + '로또 번호(%s) 중 정수 이외의 값이 있다면 에러를 발생한다.', + (numbers) => { + expect(() => new Lotto(numbers)).toThrow(); + } + ); + + test.each([[[1, 2, 3, 4, 5, 46]], [[0, 1, 2, 3, 4, 5]]])( + '로또 번호(%s)의 범위가 1부터 45 사이가 아니라면 에러를 발생한다.', + (numbers) => { + expect(() => new Lotto(numbers)).toThrow(); + } + ); + + test('로또 번호에 중복되는 수가 있다면 에러를 발생한다.', () => { + const numbers = [1, 1, 2, 3, 4, 5]; - test.each([[[1, 2, 3, 4, 5, 46]], [[0, 1, 2, 3, 4, 5]]])( - '로또 번호(%s)의 범위가 1부터 45 사이가 아니라면 에러를 발생한다.', - (numbers) => { expect(() => new Lotto(numbers)).toThrow(); - } - ); + }); - test('로또 번호에 중복되는 수가 있다면 에러를 발생한다.', () => { - const numbers = [1, 1, 2, 3, 4, 5]; + test.each([[[3, 2, 4, 5, 6, 1]], [[13, 12, 14, 15, 16, 11]]])( + '로또 번호는 오름차순으로 정렬된다.', + (numbers) => { + const lotto = new Lotto(numbers); - expect(() => new Lotto(numbers)).toThrow(); + expect(lotto.getNumbers()).toStrictEqual(numbers.sort()); + } + ); }); - test.each([[[3, 2, 4, 5, 6, 1]], [[13, 12, 14, 15, 16, 11]]])( - '로또 번호는 오름차순으로 정렬된다.', - (numbers) => { - const lotto = new Lotto(numbers); + describe('로또 당첨 여부 판단 테스트', () => { + let lottoNumbers; + let lotto; + + beforeAll(() => { + lottoNumbers = [1, 2, 3, 4, 5, 6]; + lotto = new Lotto(lottoNumbers); + }); + + test.each([[[1, 2, 3, 4, 5, 6], 7, 1]])( + '6개의 번호가 일치하면 1등을 반환한다.', + (winningNumbers, bonusNumber, rank) => { + expect(lotto.determineRank(winningNumbers, bonusNumber)).toBe(rank); + } + ); - expect(lotto.getNumbers()).toStrictEqual(numbers.sort()); - } - ); + test.each([[[1, 2, 3, 4, 5, 45], 6, 2]])( + '5개의 번호 + 보너스 번호가 일치하면 2등을 반환한다.', + (winningNumbers, bonusNumber, rank) => { + expect(lotto.determineRank(winningNumbers, bonusNumber)).toBe(rank); + } + ); + + test.each([[[1, 2, 3, 4, 5, 45], 7, 3]])( + '5개의 번호가 일치하고 보너스 번호가 다르면 3등을 반환한다.', + (winningNumbers, bonusNumber, rank) => { + expect(lotto.determineRank(winningNumbers, bonusNumber)).toBe(rank); + } + ); + + test.each([ + [[1, 2, 3, 4, 44, 45], 6, 4], + [[1, 2, 3, 4, 44, 45], 7, 4] + ])( + '4개의 번호가 일치하면 4등을 반환한다.', + (winningNumbers, bonusNumber, rank) => { + expect(lotto.determineRank(winningNumbers, bonusNumber)).toBe(rank); + } + ); + + test.each([ + [[1, 2, 3, 43, 44, 45], 6, 5], + [[1, 2, 3, 43, 44, 45], 7, 5] + ])( + '3개의 번호가 일치하면 5등을 반환한다.', + (winningNumbers, bonusNumber, rank) => { + expect(lotto.determineRank(winningNumbers, bonusNumber)).toBe(rank); + } + ); + + test.each([ + [[1, 2, 42, 43, 44, 45], 6, 6], + [[1, 2, 42, 43, 44, 45], 7, 6], + [[1, 41, 42, 43, 44, 45], 6, 6], + [[1, 41, 42, 43, 44, 45], 7, 6], + [[40, 41, 42, 43, 44, 45], 6, 6], + [[40, 41, 42, 43, 44, 45], 7, 6] + ])( + '3개 미만의 번호가 일치하면 다음기회에^^.', + (winningNumbers, bonusNumber, rank) => { + expect(lotto.determineRank(winningNumbers, bonusNumber)).toBe(rank); + } + ); + }); }); diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index bdf6bf1ff8..c5ad0f07b7 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -32,9 +32,9 @@ ### 당첨 결과 분석 -- [ ] 당첨 여부 판단 (등수 별 개수) - - [ ] 로또번호, 당첨번호 비교 - - [ ] 보너스번호 포함 여부 +- [x] 당첨 여부 판단 (등수 별 개수) + - [x] 로또번호, 당첨번호 비교 + - [x] 보너스번호 포함 여부 - [ ] 수익률 계산 - [ ] 당첨 결과, 수익률 출력 diff --git a/src/constant/Options.js b/src/constant/Options.js index 5498ff8bef..7063dd63be 100644 --- a/src/constant/Options.js +++ b/src/constant/Options.js @@ -4,7 +4,29 @@ const OPTIONS = { minNumber: 1, maxNumber: 45, combination: 6 + }, + + RANK_CONDITION: { + 1: { matchingCount: 6 }, + 2: { matchingCount: 5, bonusMatch: true }, + 3: { matchingCount: 5, bonusMatch: false }, + 4: { matchingCount: 4 }, + 5: { matchingCount: 3 } + }, + + PRIZE_BY_RANK: { + 1: 2_000_000_000, + 2: 30_000_000, + 3: 1_500_000, + 4: 50_000, + 5: 5_000 } }; export default OPTIONS; + +// 1등: 6개 번호 일치 / 2,000,000,000원 +// 2등: 5개 번호 + 보너스 번호 일치 / 30,000,000원 +// 3등: 5개 번호 일치 / 1,500,000원 +// 4등: 4개 번호 일치 / 50,000원 +// 5등: 3개 번호 일치 / 5,000원 diff --git a/src/domain/Lotto.js b/src/domain/Lotto.js index c876a5c843..db31ebaeb0 100644 --- a/src/domain/Lotto.js +++ b/src/domain/Lotto.js @@ -1,3 +1,4 @@ +import OPTIONS from '../constant/Options.js'; import LottoNumbersValidator from '../util/validation/LottoNumbersValidator.js'; class Lotto { @@ -16,6 +17,44 @@ class Lotto { getNumbers() { return this.#numbers; } + + // TODO: 리팩터링 (메서드 depth 1, 매직넘버) + // eslint-disable-next-line max-lines-per-function + determineRank(winningNumbers, bonusNumber) { + const matchingCount = this.#countMatchingNumbers(winningNumbers); + const bonusMatch = this.#hasBonusNumber(bonusNumber); + + for (let rank = 1; rank <= 5; rank += 1) { + if (this.#checkRankCondition(rank, matchingCount, bonusMatch)) { + return rank; + } + } + + return 6; + } + + // eslint-disable-next-line max-lines-per-function + #checkRankCondition(rank, matchingCount, bonusMatch) { + const { + matchingCount: matchingCountCondition, + bonusMatch: bonusMatchCondition + } = OPTIONS.RANK_CONDITION[rank]; + + return ( + matchingCountCondition === matchingCount && + (!bonusMatchCondition || bonusMatchCondition === bonusMatch) + ); + } + + #countMatchingNumbers(winningNumbers) { + return winningNumbers.reduce((matchingCount, winningNumber) => { + return matchingCount + this.#numbers.includes(winningNumber); + }, 0); + } + + #hasBonusNumber(bonusNumber) { + return this.#numbers.includes(bonusNumber); + } } export default Lotto; From 38855539d9a87b0951e9dc7a8af9fe57614a1182 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 22 Feb 2024 15:57:10 +0900 Subject: [PATCH 13/39] =?UTF-8?q?style:=20printWidth=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=20(80=20->=20100)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 불필요한 줄바꿈 개선 Co-authored-by: 00kang --- .eslintrc.json | 7 +++++ .prettierrc | 2 +- __tests__/Lotto.test.js | 27 +++++++------------ __tests__/Random.test.js | 9 ++----- src/constant/Messages.js | 6 ++--- src/util/validation/LottoNumbersValidator.js | 22 ++++----------- .../validation/PurchaseAmountValidator.js | 8 ++---- 7 files changed, 28 insertions(+), 53 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 178ebff845..0dccd82262 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -20,6 +20,13 @@ ], "plugins": ["import", "jest", "prettier"], "rules": { + "prettier/prettier": [ + "error", + { + "endOfLine": "auto", + "printWidth": 100 + } + ], "max-lines-per-function": ["error", { "max": 10 }], "import/extensions": ["error", { "js": "ignorePackages" }], "import/order": [ diff --git a/.prettierrc b/.prettierrc index 834ffc014f..f514dcc604 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,5 @@ { - "printWidth": 80, + "printWidth": 100, "tabWidth": 2, "useTabs": false, "semi": true, diff --git a/__tests__/Lotto.test.js b/__tests__/Lotto.test.js index f2396cfe1b..6c77534e78 100644 --- a/__tests__/Lotto.test.js +++ b/__tests__/Lotto.test.js @@ -77,22 +77,16 @@ describe('Lotto 단위테스트', () => { test.each([ [[1, 2, 3, 4, 44, 45], 6, 4], [[1, 2, 3, 4, 44, 45], 7, 4] - ])( - '4개의 번호가 일치하면 4등을 반환한다.', - (winningNumbers, bonusNumber, rank) => { - expect(lotto.determineRank(winningNumbers, bonusNumber)).toBe(rank); - } - ); + ])('4개의 번호가 일치하면 4등을 반환한다.', (winningNumbers, bonusNumber, rank) => { + expect(lotto.determineRank(winningNumbers, bonusNumber)).toBe(rank); + }); test.each([ [[1, 2, 3, 43, 44, 45], 6, 5], [[1, 2, 3, 43, 44, 45], 7, 5] - ])( - '3개의 번호가 일치하면 5등을 반환한다.', - (winningNumbers, bonusNumber, rank) => { - expect(lotto.determineRank(winningNumbers, bonusNumber)).toBe(rank); - } - ); + ])('3개의 번호가 일치하면 5등을 반환한다.', (winningNumbers, bonusNumber, rank) => { + expect(lotto.determineRank(winningNumbers, bonusNumber)).toBe(rank); + }); test.each([ [[1, 2, 42, 43, 44, 45], 6, 6], @@ -101,11 +95,8 @@ describe('Lotto 단위테스트', () => { [[1, 41, 42, 43, 44, 45], 7, 6], [[40, 41, 42, 43, 44, 45], 6, 6], [[40, 41, 42, 43, 44, 45], 7, 6] - ])( - '3개 미만의 번호가 일치하면 다음기회에^^.', - (winningNumbers, bonusNumber, rank) => { - expect(lotto.determineRank(winningNumbers, bonusNumber)).toBe(rank); - } - ); + ])('3개 미만의 번호가 일치하면 다음기회에^^.', (winningNumbers, bonusNumber, rank) => { + expect(lotto.determineRank(winningNumbers, bonusNumber)).toBe(rank); + }); }); }); diff --git a/__tests__/Random.test.js b/__tests__/Random.test.js index 32c7f5ec1b..f6ba349c72 100644 --- a/__tests__/Random.test.js +++ b/__tests__/Random.test.js @@ -11,9 +11,7 @@ describe('랜덤 테스트', () => { .fill() .map(() => Random.randomPickNumber(min, max)); - expect( - testSuites.every((testSuite) => min <= testSuite && testSuite <= max) - ).toBe(true); + expect(testSuites.every((testSuite) => min <= testSuite && testSuite <= max)).toBe(true); }); test('특정 범위 내에서 중복되지 않은 조합을 반환한다.', () => { @@ -28,10 +26,7 @@ describe('랜덤 테스트', () => { expect( testSuites.every((testSuite) => { - return ( - testSuite.length === new Set(testSuite).size && - testSuite.length === count - ); + return testSuite.length === new Set(testSuite).size && testSuite.length === count; }) ).toBe(true); }); diff --git a/src/constant/Messages.js b/src/constant/Messages.js index df4862b944..d65e05fb4c 100644 --- a/src/constant/Messages.js +++ b/src/constant/Messages.js @@ -6,10 +6,8 @@ export const VARIABLE_ALIAS = { export const ERROR_MESSAGE = { prefix: '[ERROR] ', isNotInteger: (name) => `${name}(은)는 정수 값이어야 합니다.`, - isNotAtLeast: (name, threshold) => - `${name}(은)는 ${threshold} 이상이어야 합니다.`, + isNotAtLeast: (name, threshold) => `${name}(은)는 ${threshold} 이상이어야 합니다.`, hasNotLength: (name, length) => `${name}의 길이는 ${length}이어야 합니다.`, - isNotInRange: (name, min, max) => - `${name}(은)는 [${min} ~ ${max}] 범위 이내의 값이어야 합니다.`, + isNotInRange: (name, min, max) => `${name}(은)는 [${min} ~ ${max}] 범위 이내의 값이어야 합니다.`, isNotUnique: (name) => `${name}(은)는 중복된 요소를 갖지 않아야 합니다.` }; diff --git a/src/util/validation/LottoNumbersValidator.js b/src/util/validation/LottoNumbersValidator.js index e717f4670d..a625d9a998 100644 --- a/src/util/validation/LottoNumbersValidator.js +++ b/src/util/validation/LottoNumbersValidator.js @@ -8,43 +8,31 @@ class LottoNumbersValidator { static validate(numbers) { this.validateHasLength(numbers, OPTIONS.LOTTO.combination); this.validateIsInteger(numbers); - this.validateIsInRange( - numbers, - OPTIONS.LOTTO.minNumber, - OPTIONS.LOTTO.maxNumber - ); + this.validateIsInRange(numbers, OPTIONS.LOTTO.minNumber, OPTIONS.LOTTO.maxNumber); this.validateIsUnique(numbers); } static validateHasLength(numbers, length) { if (!Validation.hasLength(numbers, length)) { - throw new Error( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.hasNotLength(this.name, length)}` - ); + throw new Error(`${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.hasNotLength(this.name, length)}`); } } static validateIsInteger(numbers) { if (!numbers.every((number) => Validation.isInteger(number))) { - throw new Error( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(this.name)}` - ); + throw new Error(`${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(this.name)}`); } } static validateIsInRange(numbers, min, max) { if (!numbers.every((number) => Validation.isInRange(number, min, max))) { - throw new Error( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInRange(this.name, min, max)}` - ); + throw new Error(`${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInRange(this.name, min, max)}`); } } static validateIsUnique(numbers) { if (!Validation.isUnique(numbers)) { - throw new Error( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotUnique(this.name)}` - ); + throw new Error(`${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotUnique(this.name)}`); } } } diff --git a/src/util/validation/PurchaseAmountValidator.js b/src/util/validation/PurchaseAmountValidator.js index a07dbd537b..8e5aab3360 100644 --- a/src/util/validation/PurchaseAmountValidator.js +++ b/src/util/validation/PurchaseAmountValidator.js @@ -12,17 +12,13 @@ class PurchaseAmountValidator { static validateIsInteger(value) { if (!Validation.isInteger(value)) { - throw new Error( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(this.name)}` - ); + throw new Error(`${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(this.name)}`); } } static validateIsAtLeast(value, threshold) { if (!Validation.isAtLeast(value, threshold)) { - throw new Error( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotAtLeast(this.name, threshold)}` - ); + throw new Error(`${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotAtLeast(this.name, threshold)}`); } } } From 41e3459ba74867e1000e69bbe4865150a3893f0c Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 22 Feb 2024 15:59:21 +0900 Subject: [PATCH 14/39] =?UTF-8?q?feat:=20=EB=8B=B9=EC=B2=A8=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EB=B6=84=EC=84=9D=20=EB=B0=8F=20=EC=88=9C=EC=9C=84?= =?UTF-8?q?=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 등수 별 당첨 수량 계산 - 당첨 결과에 따른 수익률 계산 Co-authored-by: 00kang --- __tests__/LottoMachine.test.js | 52 +++++++++++++++++++++++----------- docs/REQUIREMENTS.md | 2 +- src/constant/Options.js | 23 +++++++++------ src/domain/LottoMachine.js | 42 ++++++++++++++++++++++++--- 4 files changed, 90 insertions(+), 29 deletions(-) diff --git a/__tests__/LottoMachine.test.js b/__tests__/LottoMachine.test.js index bc17ee78b7..e8d8f6ad44 100644 --- a/__tests__/LottoMachine.test.js +++ b/__tests__/LottoMachine.test.js @@ -16,9 +16,7 @@ describe('LottoMachine 단위테스트', () => { test.each(['a', 1.1])( '구입 금액(%s)이 정수가 아니라면 에러를 발생시킨다.', (purchaseAmount) => { - expect(() => - lottoMachine.calculateIssueQuantity(purchaseAmount) - ).toThrow( + expect(() => lottoMachine.calculateIssueQuantity(purchaseAmount)).toThrow( `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(VARIABLE_ALIAS.purchaseAmount)}` ); } @@ -36,26 +34,17 @@ describe('LottoMachine 단위테스트', () => { [1000, 1], [1999, 1], [2000, 2] - ])( - '구입 금액(%s)에 따른 발행 수량(%s)을 계산하여 반환한다.', - (purchaseAmount, quantity) => { - expect(lottoMachine.calculateIssueQuantity(purchaseAmount)).toBe( - quantity - ); - } - ); + ])('구입 금액(%s)에 따른 발행 수량(%s)을 계산하여 반환한다.', (purchaseAmount, quantity) => { + expect(lottoMachine.calculateIssueQuantity(purchaseAmount)).toBe(quantity); + }); }); describe('지정 수량 만큼 로또 발행 테스트', () => { - // TEST: 발행 개수 && 객체 타입 - test('지정 수량만큼 로또를 발행한다.', () => { const issueQuantity = 1; const lottos = lottoMachine.issueLottos(issueQuantity); - expect(Array.isArray(lottos) && lottos.length === issueQuantity).toBe( - true - ); + expect(Array.isArray(lottos) && lottos.length === issueQuantity).toBe(true); }); test('로또 객체의 배열을 반환한다.', () => { @@ -65,4 +54,35 @@ describe('LottoMachine 단위테스트', () => { expect(lottos.every((lotto) => lotto instanceof Lotto)).toBe(true); }); }); + + describe('로또 결과 분석 테스트', () => { + // TEST: 1. 등수 별 당첨 개수 + test('구입한 로또들의 등수를 분석하여 반환한다.', () => { + const numbersList = [ + [1, 2, 3, 4, 5, 6], + [1, 2, 3, 4, 5, 7], + [1, 2, 3, 4, 5, 45], + [1, 2, 3, 4, 44, 45], + [1, 2, 3, 43, 44, 45], + [1, 2, 42, 43, 44, 45] + ]; + const lottos = numbersList.map((numbers) => new Lotto(numbers)); + const winningNumbers = [1, 2, 3, 4, 5, 6]; + const bonusNumber = 7; + + const winningResult = { 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1 }; + + expect(lottoMachine.determineLottoRanks(lottos, winningNumbers, bonusNumber)).toStrictEqual( + winningResult + ); + }); + + // TEST: 2. 수익률 계산 + test.each([[{ 1: 0, 2: 0, 3: 0, 4: 0, 5: 1, 6: 7 }, 62.5]])( + '로또 결과에 따른 수익률을 반환한다.', + (winningResult, profitRate) => { + expect(lottoMachine.calculateProfitRate(winningResult)).toBe(profitRate); + } + ); + }); }); diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index c5ad0f07b7..9289a9577a 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -35,7 +35,7 @@ - [x] 당첨 여부 판단 (등수 별 개수) - [x] 로또번호, 당첨번호 비교 - [x] 보너스번호 포함 여부 -- [ ] 수익률 계산 +- [x] 수익률 계산 - [ ] 당첨 결과, 수익률 출력 ### 재시작 여부 diff --git a/src/constant/Options.js b/src/constant/Options.js index 7063dd63be..4c1eb29b33 100644 --- a/src/constant/Options.js +++ b/src/constant/Options.js @@ -6,12 +6,15 @@ const OPTIONS = { combination: 6 }, + RANK: [1, 2, 3, 4, 5, 6], + RANK_CONDITION: { 1: { matchingCount: 6 }, 2: { matchingCount: 5, bonusMatch: true }, 3: { matchingCount: 5, bonusMatch: false }, 4: { matchingCount: 4 }, - 5: { matchingCount: 3 } + 5: { matchingCount: 3 }, + 6: {} }, PRIZE_BY_RANK: { @@ -19,14 +22,18 @@ const OPTIONS = { 2: 30_000_000, 3: 1_500_000, 4: 50_000, - 5: 5_000 + 5: 5_000, + 6: 0 + }, + + WINNING_RESULT: { + 1: 0, + 2: 0, + 3: 0, + 4: 0, + 5: 0, + 6: 0 } }; export default OPTIONS; - -// 1등: 6개 번호 일치 / 2,000,000,000원 -// 2등: 5개 번호 + 보너스 번호 일치 / 30,000,000원 -// 3등: 5개 번호 일치 / 1,500,000원 -// 4등: 4개 번호 일치 / 50,000원 -// 5등: 3개 번호 일치 / 5,000원 diff --git a/src/domain/LottoMachine.js b/src/domain/LottoMachine.js index 4428a844ab..cb91e43547 100644 --- a/src/domain/LottoMachine.js +++ b/src/domain/LottoMachine.js @@ -11,10 +11,7 @@ class LottoMachine { } issueLottos(issueQuantity) { - return Array.from( - { length: issueQuantity }, - () => new Lotto(this.#pickLottoNumbers()) - ); + return Array.from({ length: issueQuantity }, () => new Lotto(this.#pickLottoNumbers())); } #pickLottoNumbers() { @@ -24,6 +21,43 @@ class LottoMachine { OPTIONS.LOTTO.combination ); } + + determineLottoRanks(lottos, winningNumbers, bonusNumber) { + const winningResult = OPTIONS.WINNING_RESULT; + + lottos.forEach((lotto) => { + const rank = lotto.determineRank(winningNumbers, bonusNumber); + winningResult[rank] += 1; + }); + + return winningResult; + } + + calculateProfitRate(winningResult) { + const totalPrizeAmount = this.#calculateTotalPrizeAmount(winningResult); + const totalPurchaseAmount = this.#calculateTotalPurchaseAmount(winningResult); + const profitRate = this.#caclulateProfitRate(totalPrizeAmount, totalPurchaseAmount); + + return profitRate; + } + + #calculateTotalPrizeAmount(winningResult) { + return Object.entries(winningResult).reduce((totalPrizeAmount, [rank, count]) => { + return totalPrizeAmount + count * OPTIONS.PRIZE_BY_RANK[rank]; + }, 0); + } + + #calculateTotalPurchaseAmount(winningResult) { + return ( + Object.values(winningResult).reduce((sum, count) => { + return sum + count; + }) * OPTIONS.LOTTO.price + ); + } + + #caclulateProfitRate(totalPrizeAmount, totalPurchaseAmount) { + return (totalPrizeAmount / totalPurchaseAmount) * 100; + } } export default LottoMachine; From be26777aff8a26bcce00c177ec4d1005c11e0662 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 22 Feb 2024 16:00:51 +0900 Subject: [PATCH 15/39] =?UTF-8?q?refactor:=20=EB=A1=9C=EB=98=90=20?= =?UTF-8?q?=EB=93=B1=EC=88=98=20=EA=B3=84=EC=82=B0=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 함수 depth 최대 1로 리팩토링 Co-authored-by: 00kang --- src/domain/Lotto.js | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/domain/Lotto.js b/src/domain/Lotto.js index db31ebaeb0..298401c896 100644 --- a/src/domain/Lotto.js +++ b/src/domain/Lotto.js @@ -18,34 +18,33 @@ class Lotto { return this.#numbers; } - // TODO: 리팩터링 (메서드 depth 1, 매직넘버) - // eslint-disable-next-line max-lines-per-function determineRank(winningNumbers, bonusNumber) { const matchingCount = this.#countMatchingNumbers(winningNumbers); const bonusMatch = this.#hasBonusNumber(bonusNumber); - for (let rank = 1; rank <= 5; rank += 1) { - if (this.#checkRankCondition(rank, matchingCount, bonusMatch)) { - return rank; - } - } + const rank = OPTIONS.RANK.find((rank_) => + this.#checkRankCondition(rank_, matchingCount, bonusMatch) + ); - return 6; + return rank; } - // eslint-disable-next-line max-lines-per-function #checkRankCondition(rank, matchingCount, bonusMatch) { - const { - matchingCount: matchingCountCondition, - bonusMatch: bonusMatchCondition - } = OPTIONS.RANK_CONDITION[rank]; - return ( - matchingCountCondition === matchingCount && - (!bonusMatchCondition || bonusMatchCondition === bonusMatch) + this.#isMatchingCountEqual(rank, matchingCount) && this.#isBonusMatchEqual(rank, bonusMatch) ); } + #isMatchingCountEqual(rank, matchingCount) { + const condition = OPTIONS.RANK_CONDITION[rank].matchingCount; + return condition === undefined || condition === matchingCount; + } + + #isBonusMatchEqual(rank, bonusMatch) { + const condition = OPTIONS.RANK_CONDITION[rank].bonusMatch; + return condition === undefined || condition === bonusMatch; + } + #countMatchingNumbers(winningNumbers) { return winningNumbers.reduce((matchingCount, winningNumber) => { return matchingCount + this.#numbers.includes(winningNumber); From e7aac4b52794fd621da27cbed28af25a4a0d2826 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 22 Feb 2024 16:34:08 +0900 Subject: [PATCH 16/39] =?UTF-8?q?refactor:=20=EC=83=81=EC=88=98=EB=AA=85?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 복수형으로 변경 Co-authored-by: 00kang --- __tests__/Lotto.test.js | 4 ++-- __tests__/LottoMachine.test.js | 6 +++--- src/constant/Messages.js | 16 +++++++++++++++- src/util/validation/LottoNumbersValidator.js | 12 +++++++----- src/util/validation/PurchaseAmountValidator.js | 8 +++++--- 5 files changed, 32 insertions(+), 14 deletions(-) diff --git a/__tests__/Lotto.test.js b/__tests__/Lotto.test.js index 6c77534e78..0622485f03 100644 --- a/__tests__/Lotto.test.js +++ b/__tests__/Lotto.test.js @@ -1,5 +1,5 @@ /* eslint-disable max-lines-per-function */ -import { VARIABLE_ALIAS, ERROR_MESSAGE } from '../src/constant/Messages.js'; +import { VARIABLE_ALIAS, ERROR_MESSAGES } from '../src/constant/Messages.js'; import OPTIONS from '../src/constant/Options.js'; import Lotto from '../src/domain/Lotto.js'; @@ -9,7 +9,7 @@ describe('Lotto 단위테스트', () => { '로또 번호(%s)가 6개가 아니면 에러를 발생한다.', (numbers) => { expect(() => new Lotto(numbers)).toThrow( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.hasNotLength(VARIABLE_ALIAS.lottoNumbers, OPTIONS.LOTTO.combination)}` + `${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.hasNotLength(VARIABLE_ALIAS.lottoNumbers, OPTIONS.LOTTO.combination)}` ); } ); diff --git a/__tests__/LottoMachine.test.js b/__tests__/LottoMachine.test.js index e8d8f6ad44..203adc688c 100644 --- a/__tests__/LottoMachine.test.js +++ b/__tests__/LottoMachine.test.js @@ -1,5 +1,5 @@ /* eslint-disable max-lines-per-function */ -import { ERROR_MESSAGE, VARIABLE_ALIAS } from '../src/constant/Messages.js'; +import { ERROR_MESSAGES, VARIABLE_ALIAS } from '../src/constant/Messages.js'; import OPTIONS from '../src/constant/Options.js'; import Lotto from '../src/domain/Lotto.js'; import LottoMachine from '../src/domain/LottoMachine'; @@ -17,7 +17,7 @@ describe('LottoMachine 단위테스트', () => { '구입 금액(%s)이 정수가 아니라면 에러를 발생시킨다.', (purchaseAmount) => { expect(() => lottoMachine.calculateIssueQuantity(purchaseAmount)).toThrow( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(VARIABLE_ALIAS.purchaseAmount)}` + `${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotInteger(VARIABLE_ALIAS.purchaseAmount)}` ); } ); @@ -26,7 +26,7 @@ describe('LottoMachine 단위테스트', () => { const purchaseAmount = 999; expect(() => lottoMachine.calculateIssueQuantity(purchaseAmount)).toThrow( - `${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotAtLeast(VARIABLE_ALIAS.purchaseAmount, OPTIONS.LOTTO.price)}` + `${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotAtLeast(VARIABLE_ALIAS.purchaseAmount, OPTIONS.LOTTO.price)}` ); }); diff --git a/src/constant/Messages.js b/src/constant/Messages.js index d65e05fb4c..35b5d80aa1 100644 --- a/src/constant/Messages.js +++ b/src/constant/Messages.js @@ -3,7 +3,7 @@ export const VARIABLE_ALIAS = { lottoNumbers: '로또 번호' }; -export const ERROR_MESSAGE = { +export const ERROR_MESSAGES = { prefix: '[ERROR] ', isNotInteger: (name) => `${name}(은)는 정수 값이어야 합니다.`, isNotAtLeast: (name, threshold) => `${name}(은)는 ${threshold} 이상이어야 합니다.`, @@ -11,3 +11,17 @@ export const ERROR_MESSAGE = { isNotInRange: (name, min, max) => `${name}(은)는 [${min} ~ ${max}] 범위 이내의 값이어야 합니다.`, isNotUnique: (name) => `${name}(은)는 중복된 요소를 갖지 않아야 합니다.` }; + +export const INPUT_MESSAGES = { + purchaseAmount: '> 구입금액을 입력해 주세요. ', + winningNumbers: '> 당첨 번호를 입력해 주세요. ', + bonusNumber: '> 보너스 번호를 입력해 주세요. ', + restartResponse: '> 다시 시작하시겠습니까? (y/n) ' +}; + +export const INPUT_HINTS = { + purchaseAmount: '\t[hint] 1000 이상의 금액을 입력하세요.', + winningNumber1: '\t[hint] 1부터 45 사이의 정수 6개를 ,(comma)로 구분하여 입력하세요.', + winningNumber2: '\t[hint] 중복은 허용하지 않습니다. ', + bonusNumber: '\t[hint] 1부터 45 사이의 정수 1개를 입력하세요.' +}; diff --git a/src/util/validation/LottoNumbersValidator.js b/src/util/validation/LottoNumbersValidator.js index a625d9a998..07ba281a79 100644 --- a/src/util/validation/LottoNumbersValidator.js +++ b/src/util/validation/LottoNumbersValidator.js @@ -1,4 +1,4 @@ -import { VARIABLE_ALIAS, ERROR_MESSAGE } from '../../constant/Messages.js'; +import { VARIABLE_ALIAS, ERROR_MESSAGES } from '../../constant/Messages.js'; import OPTIONS from '../../constant/Options.js'; import Validation from './Validation.js'; @@ -14,25 +14,27 @@ class LottoNumbersValidator { static validateHasLength(numbers, length) { if (!Validation.hasLength(numbers, length)) { - throw new Error(`${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.hasNotLength(this.name, length)}`); + throw new Error(`${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.hasNotLength(this.name, length)}`); } } static validateIsInteger(numbers) { if (!numbers.every((number) => Validation.isInteger(number))) { - throw new Error(`${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(this.name)}`); + throw new Error(`${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotInteger(this.name)}`); } } static validateIsInRange(numbers, min, max) { if (!numbers.every((number) => Validation.isInRange(number, min, max))) { - throw new Error(`${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInRange(this.name, min, max)}`); + throw new Error( + `${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotInRange(this.name, min, max)}` + ); } } static validateIsUnique(numbers) { if (!Validation.isUnique(numbers)) { - throw new Error(`${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotUnique(this.name)}`); + throw new Error(`${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotUnique(this.name)}`); } } } diff --git a/src/util/validation/PurchaseAmountValidator.js b/src/util/validation/PurchaseAmountValidator.js index 8e5aab3360..221e0a3f6b 100644 --- a/src/util/validation/PurchaseAmountValidator.js +++ b/src/util/validation/PurchaseAmountValidator.js @@ -1,4 +1,4 @@ -import { ERROR_MESSAGE, VARIABLE_ALIAS } from '../../constant/Messages.js'; +import { ERROR_MESSAGES, VARIABLE_ALIAS } from '../../constant/Messages.js'; import OPTIONS from '../../constant/Options.js'; import Validation from './Validation.js'; @@ -12,13 +12,15 @@ class PurchaseAmountValidator { static validateIsInteger(value) { if (!Validation.isInteger(value)) { - throw new Error(`${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotInteger(this.name)}`); + throw new Error(`${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotInteger(this.name)}`); } } static validateIsAtLeast(value, threshold) { if (!Validation.isAtLeast(value, threshold)) { - throw new Error(`${ERROR_MESSAGE.prefix}${ERROR_MESSAGE.isNotAtLeast(this.name, threshold)}`); + throw new Error( + `${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotAtLeast(this.name, threshold)}` + ); } } } From f9d2c326a70ed992fb1d50c7aa36e5018f0a1ab0 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 22 Feb 2024 16:34:49 +0900 Subject: [PATCH 17/39] =?UTF-8?q?feat:=20=EC=BD=98=EC=86=94=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 콘솔 입력 모듈 readLineAsync 작성 - 구입금액, 당첨번호, 보너스번호, 재시작응답 입력 Co-authored-by: 00kang --- docs/REQUIREMENTS.md | 16 +++++++-------- src/constant/Options.js | 4 ++++ src/controller/LottoController.js | 28 +++++++++++++++++++++++++++ src/util/readLine/readLineAsync.js | 26 +++++++++++++++++++++++++ src/view/InputView.js | 31 ++++++++++++++++++++++++++++++ 5 files changed, 97 insertions(+), 8 deletions(-) create mode 100644 src/controller/LottoController.js create mode 100644 src/util/readLine/readLineAsync.js create mode 100644 src/view/InputView.js diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index 9289a9577a..512a161636 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -2,8 +2,8 @@ ### 구입 금액 입력 -- [ ] 금액 입력 : 힌트 -- [ ] 전처리 : trim +- [x] 금액 입력 : 힌트 +- [x] 전처리 : trim ### 구입 금액만큼 로또 발행 @@ -20,14 +20,14 @@ ### 당첨 번호 입력 -- [ ] 당첨 번호 입력 : 힌트 -- [ ] 전처리 : split(','), trim +- [x] 당첨 번호 입력 : 힌트 +- [x] 전처리 : split(','), trim - [ ] 유효성검사 : 공백문자열, 개수, 정수, 1~45, 중복x ### 보너스 번호 입력 -- [ ] 보너스 번호 입력 : 힌트 -- [ ] 전처리 : trim +- [x] 보너스 번호 입력 : 힌트 +- [x] 전처리 : trim - [ ] 유효성검사 : 정수, 1~45, excluded(당첨번호) ### 당첨 결과 분석 @@ -40,8 +40,8 @@ ### 재시작 여부 -- [ ] 재시작 여부 입력 - - [ ] 전처리 : trim +- [x] 재시작 여부 입력 + - [x] 전처리 : trim - [ ] 유효성검사 : included(yYnN) - [ ] 프로그램 재시작 diff --git a/src/constant/Options.js b/src/constant/Options.js index 4c1eb29b33..a20d894dfa 100644 --- a/src/constant/Options.js +++ b/src/constant/Options.js @@ -1,4 +1,8 @@ const OPTIONS = { + INPUT: { + winningNumbersDelimiter: ',' + }, + LOTTO: { price: 1000, minNumber: 1, diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js new file mode 100644 index 0000000000..065d9c80dd --- /dev/null +++ b/src/controller/LottoController.js @@ -0,0 +1,28 @@ +import OPTIONS from '../constant/Options.js'; +import InputView from '../view/InputView.js'; + +class LottoController { + async inputPurchaseAmount() { + const purchaseAmount = await InputView.inputPurchaseAmount().trim(); + return purchaseAmount; + } + + async inputWinningNumbers() { + const winningNumbers = await InputView.inputWinningNumbers() + .split(OPTIONS.INPUT.winningNumbersDelimiter) + .map((number) => number.trim()); + return winningNumbers; + } + + async inputBonusNumber() { + const bonusNumber = await InputView.inputBonusNumber().trim(); + return bonusNumber; + } + + async inputRestartResponse() { + const restartResponse = await InputView.inputRestartResponse().trim(); + return restartResponse; + } +} + +export default LottoController; diff --git a/src/util/readLine/readLineAsync.js b/src/util/readLine/readLineAsync.js new file mode 100644 index 0000000000..9dd773e2b9 --- /dev/null +++ b/src/util/readLine/readLineAsync.js @@ -0,0 +1,26 @@ +/* eslint-disable max-lines-per-function */ +import readline from 'readline'; + +function readLineAsync(query) { + return new Promise((resolve, reject) => { + if (arguments.length !== 1) { + reject(new Error('arguments must be 1')); + } + + if (typeof query !== 'string') { + reject(new Error('query must be string')); + } + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + rl.question(query, (input) => { + rl.close(); + resolve(input); + }); + }); +} + +export default readLineAsync; diff --git a/src/view/InputView.js b/src/view/InputView.js new file mode 100644 index 0000000000..6ca5002573 --- /dev/null +++ b/src/view/InputView.js @@ -0,0 +1,31 @@ +import { INPUT_MESSAGES, INPUT_HINTS } from '../constant/Messages.js'; +import readLineAsync from '../util/readLine/readLineAsync.js'; + +const MESSAGES = INPUT_MESSAGES; +const HINTS = INPUT_HINTS; + +class InputView { + static async inputPurchaseAmount() { + const input = await readLineAsync([MESSAGES.purchaseAmount, HINTS.purchaseAmount].join('\n')); + return input; + } + + static async inputWinningNumbers() { + const input = await readLineAsync( + [MESSAGES.winningNumbers, HINTS.winningNumber1, HINTS.winningNumber2].join('\n') + ); + return input; + } + + static async inputBonusNumber() { + const input = await readLineAsync([MESSAGES.bonusNumber, HINTS.bonusNumber].join('\n')); + return input; + } + + static async inputRestartResponse() { + const input = await readLineAsync(MESSAGES.restartResponse); + return input; + } +} + +export default InputView; From 03ee9002f6013cb5288f68cfb6a7f13ae3fe45ec Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 22 Feb 2024 17:52:30 +0900 Subject: [PATCH 18/39] =?UTF-8?q?feat:=20controller,=20model,=20view=20?= =?UTF-8?q?=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 00kang --- README.md | 26 +++++++++++++++++ src/App.js | 38 ++++++++++++++++++++++++ src/constant/Messages.js | 12 ++++++++ src/controller/LottoController.js | 33 +++++++++++++++++++++ src/domain/Lotto.js | 8 +++--- src/step1-index.js | 8 +++--- src/view/OutputView.js | 48 +++++++++++++++++++++++++++++++ 7 files changed, 165 insertions(+), 8 deletions(-) create mode 100644 src/App.js create mode 100644 src/view/OutputView.js diff --git a/README.md b/README.md index 0a23e5476d..0b11ddc98e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,29 @@

🎱

level1 - 행운의 로또

자바스크립트로 구현 하는 로또 어플리케이션

+ +### 실행 + +```bash + npm run start-step1 +``` + +### 테스트 + +```bash +npm run test +``` + +### 실행 화면 + +실행화면 + +### 도메인 로직 + +### 파일 구조 + +``` + + + +``` diff --git a/src/App.js b/src/App.js new file mode 100644 index 0000000000..567ac905a7 --- /dev/null +++ b/src/App.js @@ -0,0 +1,38 @@ +import LottoController from './controller/LottoController.js'; + +class App { + #controller; + + constructor() { + this.#controller = new LottoController(); + } + + // eslint-disable-next-line max-lines-per-function + async run() { + const lottos = await this.#purchaseLottos(); + + const winningNumbers = await this.#controller.inputWinningNumbers(); + const bonusNumber = await this.#controller.inputBonusNumber(); + + this.#showWinningResult(lottos, winningNumbers, bonusNumber); + } + + async #purchaseLottos() { + const purchaseAmount = await this.#controller.inputPurchaseAmount(); + const issueQuantity = this.#controller.calculateIssueQuantity(purchaseAmount); + const lottos = this.#controller.issueLottos(issueQuantity); + + this.#controller.displayIssueQuantity(issueQuantity); + this.#controller.displayLottoNumbersList(lottos); + + return lottos; + } + + #showWinningResult(lottos, winningNumbers, bonusNumber) { + const winningResult = this.#controller.determineLottoRanks(lottos, winningNumbers, bonusNumber); + const profitRate = this.#controller.calculateProfitRate(winningResult); + this.#controller.displayWinningResult(winningNumbers, profitRate); + } +} + +export default App; diff --git a/src/constant/Messages.js b/src/constant/Messages.js index 35b5d80aa1..f13ab09a1e 100644 --- a/src/constant/Messages.js +++ b/src/constant/Messages.js @@ -1,3 +1,4 @@ +/* eslint-disable max-params */ export const VARIABLE_ALIAS = { purchaseAmount: '구입 금액', lottoNumbers: '로또 번호' @@ -25,3 +26,14 @@ export const INPUT_HINTS = { winningNumber2: '\t[hint] 중복은 허용하지 않습니다. ', bonusNumber: '\t[hint] 1부터 45 사이의 정수 1개를 입력하세요.' }; + +export const OUTPUT_MESSAGES = { + issueQuantity: (count) => `${count}개를 구매했습니다.`, + lottoNumbers: (numbers) => `[${numbers.join(', ')}]`, + statisticsTitle: '당첨 통계', + dividingLine: '--------------------', + statisticsResult: (matchingCount, bounusMatch, prizeAmount, count) => + `${matchingCount}개 일치${bounusMatch} (${prizeAmount}) - ${count}개`, + bonusMatch: ', 보너스 볼 일치', + profitRate: (profitRate) => `총 수익률은 ${profitRate}%입니다.` +}; diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index 065d9c80dd..388a8d70f5 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -1,7 +1,15 @@ import OPTIONS from '../constant/Options.js'; +import LottoMachine from '../domain/LottoMachine.js'; import InputView from '../view/InputView.js'; +import OutputView from '../view/OutputView.js'; class LottoController { + #lottoMachine; + + constructor() { + this.#lottoMachine = new LottoMachine(); + } + async inputPurchaseAmount() { const purchaseAmount = await InputView.inputPurchaseAmount().trim(); return purchaseAmount; @@ -23,6 +31,31 @@ class LottoController { const restartResponse = await InputView.inputRestartResponse().trim(); return restartResponse; } + + displayIssueQuantity(issueQuantity) { + OutputView.printIssueQuantity(issueQuantity); + } + + displayLottoNumbersList(lottos) { + const lottoNumbersList = lottos.map((lotto) => lotto.getNumbers()); + OutputView.printLottoNumbersList(lottoNumbersList); + } + + displayWinningResult(winningResult, profitRate) { + OutputView.printWinningResult(winningResult, profitRate); + } + + calculateIssueQuantity(purchaseAmount) { + return this.#lottoMachine.calculateIssueQuantity(purchaseAmount); + } + + determineLottoRanks(lottos, winningNumbers, bonusNumber) { + return this.#lottoMachine.determineLottoRanks(lottos, winningNumbers, bonusNumber); + } + + calculateProfitRate(winningResult) { + return this.#lottoMachine.calculateProfitRate(winningResult); + } } export default LottoController; diff --git a/src/domain/Lotto.js b/src/domain/Lotto.js index 298401c896..b1a8573949 100644 --- a/src/domain/Lotto.js +++ b/src/domain/Lotto.js @@ -14,10 +14,6 @@ class Lotto { return numbers.sort(); } - getNumbers() { - return this.#numbers; - } - determineRank(winningNumbers, bonusNumber) { const matchingCount = this.#countMatchingNumbers(winningNumbers); const bonusMatch = this.#hasBonusNumber(bonusNumber); @@ -54,6 +50,10 @@ class Lotto { #hasBonusNumber(bonusNumber) { return this.#numbers.includes(bonusNumber); } + + getNumbers() { + return this.#numbers; + } } export default Lotto; diff --git a/src/step1-index.js b/src/step1-index.js index 44313b450c..c792ce852d 100644 --- a/src/step1-index.js +++ b/src/step1-index.js @@ -1,4 +1,4 @@ -/** - * step 1의 시작점이 되는 파일입니다. - * 브라우저 환경에서 사용하는 css 파일 등을 불러올 경우 정상적으로 빌드할 수 없습니다. - */ +import App from './App.js'; + +const app = new App(); +app.run(); diff --git a/src/view/OutputView.js b/src/view/OutputView.js new file mode 100644 index 0000000000..42df7ddab7 --- /dev/null +++ b/src/view/OutputView.js @@ -0,0 +1,48 @@ +/* eslint-disable max-lines-per-function */ +import { OUTPUT_MESSAGES } from '../constant/Messages.js'; +import OPTIONS from '../constant/Options.js'; + +const MESSAGES = OUTPUT_MESSAGES; + +class OutputView { + static print(message) { + console.log(message); + } + + static printIssueQuantity(issueQuantity) { + this.print(MESSAGES.issueQuantity(issueQuantity)); + } + + static printLottoNumbersList(numbersList) { + numbersList.forEach((numbers) => { + this.print(MESSAGES.lottoNumbers(numbers)); + }); + } + + // eslint-disable-next-line max-lines-per-function + static printWinningResult(winningResult, profitRate) { + this.print(MESSAGES.statisticsTitle); + this.print(MESSAGES.dividingLine); + + Object.entries(winningResult) + .reverse() + .splice(1) + .forEach(([rank, count]) => { + const { matchingCount, bonusMatch } = OPTIONS.RANK_CONDITION[rank]; + const bonusMessage = bonusMatch ? MESSAGES.bonusMatch : ''; + + this.print( + MESSAGES.statisticsResult( + matchingCount, + bonusMessage, + OPTIONS.PRIZE_BY_RANK[rank].toLocaleString(), + count + ) + ); + }); + + this.print(MESSAGES.profitRate(profitRate.toFixed(1))); + } +} + +export default OutputView; From 993ff65963e8f81fdc3fcca9d22236cabd08099c Mon Sep 17 00:00:00 2001 From: dabin Date: Thu, 22 Feb 2024 17:58:48 +0900 Subject: [PATCH 19/39] =?UTF-8?q?feat:=20README.md=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0b11ddc98e..1c4190ac08 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,35 @@ npm run test ### 파일 구조 ``` - - +📦src + ┣ 📂constant + ┃ ┣ 📜Messages.js + ┃ ┗ 📜Options.js + ┣ 📂controller + ┃ ┗ 📜LottoController.js + ┣ 📂domain + ┃ ┣ 📜Lotto.js + ┃ ┗ 📜LottoMachine.js + ┣ 📂util + ┃ ┣ 📂random + ┃ ┃ ┗ 📜Random.js + ┃ ┣ 📂readLine + ┃ ┃ ┗ 📜readLineAsync.js + ┃ ┗ 📂validation + ┃ ┃ ┣ 📜LottoNumbersValidator.js + ┃ ┃ ┣ 📜PurchaseAmountValidator.js + ┃ ┃ ┗ 📜Validation.js + ┣ 📂view + ┃ ┣ 📜InputView.js + ┃ ┗ 📜OutputView.js + ┣ 📜App.js + ┣ 📜step1-index.js + ┗ 📜step2-index.js + +📦__tests__ + ┣ 📜.gitkeep + ┣ 📜Lotto.test.js + ┣ 📜LottoMachine.test.js + ┗ 📜Random.test.js ``` From 7cf43950de0aa3e8a2f0a017568c7a71aeb913e2 Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 08:45:20 +0900 Subject: [PATCH 20/39] =?UTF-8?q?style:=20=EC=9E=85,=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=EC=9D=98=20=EC=8A=A4=ED=83=80?= =?UTF-8?q?=EC=9D=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constant/Messages.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/constant/Messages.js b/src/constant/Messages.js index f13ab09a1e..c5b7f96ebe 100644 --- a/src/constant/Messages.js +++ b/src/constant/Messages.js @@ -14,26 +14,26 @@ export const ERROR_MESSAGES = { }; export const INPUT_MESSAGES = { - purchaseAmount: '> 구입금액을 입력해 주세요. ', - winningNumbers: '> 당첨 번호를 입력해 주세요. ', - bonusNumber: '> 보너스 번호를 입력해 주세요. ', - restartResponse: '> 다시 시작하시겠습니까? (y/n) ' + purchaseAmount: '\n> 구입금액을 입력해 주세요. ', + winningNumbers: '\n> 당첨 번호를 입력해 주세요. ', + bonusNumber: '\n> 보너스 번호를 입력해 주세요. ', + restartResponse: '\n> 다시 시작하시겠습니까? (y/n) ' }; export const INPUT_HINTS = { - purchaseAmount: '\t[hint] 1000 이상의 금액을 입력하세요.', - winningNumber1: '\t[hint] 1부터 45 사이의 정수 6개를 ,(comma)로 구분하여 입력하세요.', - winningNumber2: '\t[hint] 중복은 허용하지 않습니다. ', - bonusNumber: '\t[hint] 1부터 45 사이의 정수 1개를 입력하세요.' + purchaseAmount: ' [hint] 1000 이상의 금액을 입력하세요.\n', + winningNumber1: ' [hint] 1부터 45 사이의 정수 6개를 ,(comma)로 구분하여 입력하세요.', + winningNumber2: ' [hint] 중복은 허용하지 않습니다.\n', + bonusNumber: ' [hint] 1부터 45 사이의 정수 1개를 입력하세요.\n' }; export const OUTPUT_MESSAGES = { - issueQuantity: (count) => `${count}개를 구매했습니다.`, - lottoNumbers: (numbers) => `[${numbers.join(', ')}]`, - statisticsTitle: '당첨 통계', - dividingLine: '--------------------', - statisticsResult: (matchingCount, bounusMatch, prizeAmount, count) => - `${matchingCount}개 일치${bounusMatch} (${prizeAmount}) - ${count}개`, + issueQuantity: (count) => `\n${count}개를 구매했습니다.`, + lottoNumbers: (numbers) => `\n[${numbers.join(', ')}]`, + statisticsTitle: '\n당첨 통계', + dividingLine: '\n--------------------', + statisticsResult: (matchingCount, bonusMatch, prizeAmount, count) => + `${matchingCount}개 일치${bonusMatch} (${prizeAmount}원) - ${count}개`, bonusMatch: ', 보너스 볼 일치', - profitRate: (profitRate) => `총 수익률은 ${profitRate}%입니다.` + profitRate: (profitRate) => `\n총 수익률은 ${profitRate}%입니다.` }; From 68048401dafe795a0537a76ae2344ee2056a9086 Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 08:53:27 +0900 Subject: [PATCH 21/39] =?UTF-8?q?feat:=20=EB=A1=9C=EB=98=90=20=EB=B0=9C?= =?UTF-8?q?=ED=96=89=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=BB=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=A4=EB=9F=AC=EC=97=90=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constant/Messages.js | 2 +- src/controller/LottoController.js | 16 ++++++++++------ src/domain/LottoMachine.js | 4 ++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/constant/Messages.js b/src/constant/Messages.js index c5b7f96ebe..5952978a9f 100644 --- a/src/constant/Messages.js +++ b/src/constant/Messages.js @@ -29,7 +29,7 @@ export const INPUT_HINTS = { export const OUTPUT_MESSAGES = { issueQuantity: (count) => `\n${count}개를 구매했습니다.`, - lottoNumbers: (numbers) => `\n[${numbers.join(', ')}]`, + lottoNumbers: (numbers) => `[${numbers.join(', ')}]`, statisticsTitle: '\n당첨 통계', dividingLine: '\n--------------------', statisticsResult: (matchingCount, bonusMatch, prizeAmount, count) => diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index 388a8d70f5..daf707df67 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -11,8 +11,8 @@ class LottoController { } async inputPurchaseAmount() { - const purchaseAmount = await InputView.inputPurchaseAmount().trim(); - return purchaseAmount; + const purchaseAmount = await InputView.inputPurchaseAmount(); + return parseInt(purchaseAmount.trim()); } async inputWinningNumbers() { @@ -23,19 +23,23 @@ class LottoController { } async inputBonusNumber() { - const bonusNumber = await InputView.inputBonusNumber().trim(); - return bonusNumber; + const bonusNumber = await InputView.inputBonusNumber(); + return bonusNumber.trim(); } async inputRestartResponse() { - const restartResponse = await InputView.inputRestartResponse().trim(); - return restartResponse; + const restartResponse = await InputView.inputRestartResponse(); + return restartResponse.trim(); } displayIssueQuantity(issueQuantity) { OutputView.printIssueQuantity(issueQuantity); } + issueLottos(issueQuantity) { + return this.#lottoMachine.issueLottos(issueQuantity); + } + displayLottoNumbersList(lottos) { const lottoNumbersList = lottos.map((lotto) => lotto.getNumbers()); OutputView.printLottoNumbersList(lottoNumbersList); diff --git a/src/domain/LottoMachine.js b/src/domain/LottoMachine.js index cb91e43547..401f51cef0 100644 --- a/src/domain/LottoMachine.js +++ b/src/domain/LottoMachine.js @@ -36,7 +36,7 @@ class LottoMachine { calculateProfitRate(winningResult) { const totalPrizeAmount = this.#calculateTotalPrizeAmount(winningResult); const totalPurchaseAmount = this.#calculateTotalPurchaseAmount(winningResult); - const profitRate = this.#caclulateProfitRate(totalPrizeAmount, totalPurchaseAmount); + const profitRate = this.#calculateProfitRate(totalPrizeAmount, totalPurchaseAmount); return profitRate; } @@ -55,7 +55,7 @@ class LottoMachine { ); } - #caclulateProfitRate(totalPrizeAmount, totalPurchaseAmount) { + #calculateProfitRate(totalPrizeAmount, totalPurchaseAmount) { return (totalPrizeAmount / totalPurchaseAmount) * 100; } } From ea9485a2339c4e113796224e8827a4419186c868 Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 08:56:14 +0900 Subject: [PATCH 22/39] =?UTF-8?q?fix:=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=EC=97=90=EC=84=9C=20=EB=8B=B9=EC=B2=A8=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=9E=85=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=EC=9D=98=20?= =?UTF-8?q?inputWinningNumbers=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/LottoController.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index daf707df67..ea9737591c 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -16,10 +16,10 @@ class LottoController { } async inputWinningNumbers() { - const winningNumbers = await InputView.inputWinningNumbers() + const winningNumbers = await InputView.inputWinningNumbers(); + return winningNumbers .split(OPTIONS.INPUT.winningNumbersDelimiter) .map((number) => number.trim()); - return winningNumbers; } async inputBonusNumber() { From a1eb586efded37560efd45656ff6e824893517e5 Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 09:14:02 +0900 Subject: [PATCH 23/39] =?UTF-8?q?fix:=20=EB=8B=B9=EC=B2=A8=20=ED=86=B5?= =?UTF-8?q?=EA=B3=84=20=EA=B2=B0=EA=B3=BC=20=EB=B0=98=ED=99=98=20=EC=95=88?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 2 +- src/constant/Messages.js | 2 +- src/controller/LottoController.js | 2 +- src/view/OutputView.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/App.js b/src/App.js index 567ac905a7..a7536e0037 100644 --- a/src/App.js +++ b/src/App.js @@ -31,7 +31,7 @@ class App { #showWinningResult(lottos, winningNumbers, bonusNumber) { const winningResult = this.#controller.determineLottoRanks(lottos, winningNumbers, bonusNumber); const profitRate = this.#controller.calculateProfitRate(winningResult); - this.#controller.displayWinningResult(winningNumbers, profitRate); + this.#controller.displayWinningResult(winningResult, profitRate); } } diff --git a/src/constant/Messages.js b/src/constant/Messages.js index 5952978a9f..13f04b3e05 100644 --- a/src/constant/Messages.js +++ b/src/constant/Messages.js @@ -31,7 +31,7 @@ export const OUTPUT_MESSAGES = { issueQuantity: (count) => `\n${count}개를 구매했습니다.`, lottoNumbers: (numbers) => `[${numbers.join(', ')}]`, statisticsTitle: '\n당첨 통계', - dividingLine: '\n--------------------', + dividingLine: '--------------------', statisticsResult: (matchingCount, bonusMatch, prizeAmount, count) => `${matchingCount}개 일치${bonusMatch} (${prizeAmount}원) - ${count}개`, bonusMatch: ', 보너스 볼 일치', diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index ea9737591c..a428ab743e 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -19,7 +19,7 @@ class LottoController { const winningNumbers = await InputView.inputWinningNumbers(); return winningNumbers .split(OPTIONS.INPUT.winningNumbersDelimiter) - .map((number) => number.trim()); + .map((number) => Number(number.trim())); } async inputBonusNumber() { diff --git a/src/view/OutputView.js b/src/view/OutputView.js index 42df7ddab7..611e87b57f 100644 --- a/src/view/OutputView.js +++ b/src/view/OutputView.js @@ -26,7 +26,7 @@ class OutputView { Object.entries(winningResult) .reverse() - .splice(1) + .slice(1) .forEach(([rank, count]) => { const { matchingCount, bonusMatch } = OPTIONS.RANK_CONDITION[rank]; const bonusMessage = bonusMatch ? MESSAGES.bonusMatch : ''; From 21e58887707eeaa34d1435c1b2c9a2928c7e7077 Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 09:17:09 +0900 Subject: [PATCH 24/39] =?UTF-8?q?fix:=20=EB=B0=9C=ED=96=89=EB=90=9C=20?= =?UTF-8?q?=EB=A1=9C=EB=98=90=20=EC=98=A4=EB=A6=84=EC=B0=A8=EC=88=9C=20?= =?UTF-8?q?=EC=A0=95=EB=A0=AC=ED=95=98=EC=97=AC=20=EB=B3=B4=EC=97=AC?= =?UTF-8?q?=EC=A3=BC=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/domain/Lotto.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/domain/Lotto.js b/src/domain/Lotto.js index b1a8573949..5058eac6aa 100644 --- a/src/domain/Lotto.js +++ b/src/domain/Lotto.js @@ -11,7 +11,7 @@ class Lotto { } #sortNumbersAscending(numbers) { - return numbers.sort(); + return numbers.sort((a, b) => a - b); } determineRank(winningNumbers, bonusNumber) { From ff23a3a8a4b893e7b40f9366a31dbcea6f8953c0 Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 09:38:38 +0900 Subject: [PATCH 25/39] =?UTF-8?q?feat:=20=EC=8B=A4=ED=96=89=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EC=82=AC=EC=A7=84=20=ED=8F=AC=ED=95=A8=ED=95=98?= =?UTF-8?q?=EC=97=AC=20README.md=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 +++++++++----- docs/REQUIREMENTS.md | 6 +++--- lotto-step1-test.png | Bin 0 -> 31270 bytes lotto-step1.png | Bin 0 -> 83460 bytes 4 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 lotto-step1-test.png create mode 100644 lotto-step1.png diff --git a/README.md b/README.md index 1c4190ac08..581261bd6a 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,11 @@ npm run test ### 실행 화면 -실행화면 +실행화면 + +### 테스트 실행 화면 + +테스트 실행화면 ### 도메인 로직 @@ -24,11 +28,11 @@ npm run test ``` 📦src - ┣ 📂constant - ┃ ┣ 📜Messages.js - ┃ ┗ 📜Options.js + ┣ 📂constant : 상수 관리 + ┃ ┣ 📜Messages.js : 입력, 입력힌트, 출력, 에러 메세지 관리 + ┃ ┗ 📜Options.js : 로또 가격, 로또 범위 최소, 최대 숫자, 상금, 게임 결과 등 관리 ┣ 📂controller - ┃ ┗ 📜LottoController.js + ┃ ┗ 📜LottoController.js : 로또 게임 진행 ┣ 📂domain ┃ ┣ 📜Lotto.js ┃ ┗ 📜LottoMachine.js diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index 512a161636..17ec72f017 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -10,13 +10,13 @@ - 발행 수량 - [x] 발행 수량 계산 - [x] 유효성검사 : 정수, 1000이상 - - [ ] 발행 수량 출력 + - [x] 발행 수량 출력 - 로또 발행 - [x] 1~45 중 난수 6개 추출 : 중복x - [x] 수량만큼 로또 발행 - [x] 유효성검사 : 개수(6), 정수, 범위(1~45), 중복x - [x] 오름차순 정렬 - - [ ] 로또 번호 출력 + - [x] 로또 번호 출력 ### 당첨 번호 입력 @@ -36,7 +36,7 @@ - [x] 로또번호, 당첨번호 비교 - [x] 보너스번호 포함 여부 - [x] 수익률 계산 -- [ ] 당첨 결과, 수익률 출력 +- [x] 당첨 결과, 수익률 출력 ### 재시작 여부 diff --git a/lotto-step1-test.png b/lotto-step1-test.png new file mode 100644 index 0000000000000000000000000000000000000000..b3eedfafb660e68578ef898380acacf149d244d3 GIT binary patch literal 31270 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 literal 0 HcmV?d00001 diff --git a/lotto-step1.png b/lotto-step1.png new file mode 100644 index 0000000000000000000000000000000000000000..f9cd0dd3720c80d424dd6d9171a5b09b2a243a96 GIT binary patch literal 83460 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

_l*81VI@t`gEh2eINq>^#xg-PSy0=Z_s_ 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 z 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 &dsp_#H+K_GNFYgA?Js7>9rnSSoO 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 Hb=dy^YK4s) literal 0 HcmV?d00001 From e1572cf09f17d7c078450f974d2e87b29fb3c4e7 Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 09:54:56 +0900 Subject: [PATCH 26/39] =?UTF-8?q?feat:=20=EA=B5=AC=EC=9E=85=20=EA=B8=88?= =?UTF-8?q?=EC=95=A1=EC=97=90=20=EB=8C=80=ED=95=9C=20=EC=9C=A0=ED=9A=A8?= =?UTF-8?q?=EC=84=B1=20=EA=B2=80=EC=82=AC=20=EC=A7=84=ED=96=89=20=EB=B0=8F?= =?UTF-8?q?=20=EC=9E=AC=EC=9E=85=EB=A0=A5=EB=B0=9B=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/LottoController.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index a428ab743e..7eee986893 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -2,7 +2,8 @@ import OPTIONS from '../constant/Options.js'; import LottoMachine from '../domain/LottoMachine.js'; import InputView from '../view/InputView.js'; import OutputView from '../view/OutputView.js'; - +import PurchaseAmountValidator from '../util/validation/PurchaseAmountValidator.js'; +import LottoNumbersValidator from '../util/validation/LottoNumbersValidator.js'; class LottoController { #lottoMachine; @@ -11,8 +12,18 @@ class LottoController { } async inputPurchaseAmount() { - const purchaseAmount = await InputView.inputPurchaseAmount(); - return parseInt(purchaseAmount.trim()); + let amount; + while (true) { + try { + const purchaseAmount = await InputView.inputPurchaseAmount(); + amount = parseInt(purchaseAmount.trim()); + PurchaseAmountValidator.validate(amount); + break; + } catch (error) { + console.error(error.message); + } + } + return amount; } async inputWinningNumbers() { From de926bc5c890fff0ccf488cfb028d19ecbbe15e0 Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 12:09:54 +0900 Subject: [PATCH 27/39] =?UTF-8?q?feat:=20=EB=8B=B9=EC=B2=A8=20=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=9E=85=EB=A0=A5=EC=97=90=20=EB=8C=80=ED=95=9C=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=20=EB=B0=8F=20=EC=9E=AC=EC=9E=85=EB=A0=A5=EB=B0=9B?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=B6=94=EA=B0=80=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constant/Messages.js | 2 +- src/controller/LottoController.js | 18 ++++++++++++++---- src/util/validation/LottoNumbersValidator.js | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/constant/Messages.js b/src/constant/Messages.js index 13f04b3e05..47eda4fb0b 100644 --- a/src/constant/Messages.js +++ b/src/constant/Messages.js @@ -1,7 +1,7 @@ /* eslint-disable max-params */ export const VARIABLE_ALIAS = { purchaseAmount: '구입 금액', - lottoNumbers: '로또 번호' + lottoNumbers: '당첨 번호' }; export const ERROR_MESSAGES = { diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index 7eee986893..1a5df1e1d3 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -27,10 +27,20 @@ class LottoController { } async inputWinningNumbers() { - const winningNumbers = await InputView.inputWinningNumbers(); - return winningNumbers - .split(OPTIONS.INPUT.winningNumbersDelimiter) - .map((number) => Number(number.trim())); + let numbers; + while (true) { + try { + const winningNumbers = await InputView.inputWinningNumbers(); + numbers = winningNumbers + .split(OPTIONS.INPUT.winningNumbersDelimiter) + .map((number) => Number(number.trim())); + LottoNumbersValidator.validate(numbers); + break; + } catch (error) { + console.error(error.message); + } + } + return numbers; } async inputBonusNumber() { diff --git a/src/util/validation/LottoNumbersValidator.js b/src/util/validation/LottoNumbersValidator.js index 07ba281a79..3d4f7b9895 100644 --- a/src/util/validation/LottoNumbersValidator.js +++ b/src/util/validation/LottoNumbersValidator.js @@ -19,7 +19,7 @@ class LottoNumbersValidator { } static validateIsInteger(numbers) { - if (!numbers.every((number) => Validation.isInteger(number))) { + if (!numbers.every((number) => Validation.isInteger(number) && !isNaN(number))) { throw new Error(`${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotInteger(this.name)}`); } } From 788cbf014eeae4a84c0a19711c34182e7ddb8a19 Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 13:39:27 +0900 Subject: [PATCH 28/39] =?UTF-8?q?feat:=20=EB=B3=B4=EB=84=88=EC=8A=A4=20?= =?UTF-8?q?=EC=A0=90=EC=88=98=20=EC=9E=85=EB=A0=A5=EC=97=90=20=EB=8C=80?= =?UTF-8?q?=ED=95=9C=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/REQUIREMENTS.md | 5 +-- src/App.js | 2 +- src/constant/Messages.js | 3 +- src/controller/LottoController.js | 18 +++++++++-- src/util/validation/BonusNumberValidator.js | 35 +++++++++++++++++++++ src/util/validation/Validation.js | 4 +++ 6 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 src/util/validation/BonusNumberValidator.js diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index 17ec72f017..f8adb63c6e 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -22,13 +22,14 @@ - [x] 당첨 번호 입력 : 힌트 - [x] 전처리 : split(','), trim -- [ ] 유효성검사 : 공백문자열, 개수, 정수, 1~45, 중복x +- [x] 유효성검사 : 개수, 정수, 1~45, 중복x +- [ ] 유효성검사 : 공백문자열 ### 보너스 번호 입력 - [x] 보너스 번호 입력 : 힌트 - [x] 전처리 : trim -- [ ] 유효성검사 : 정수, 1~45, excluded(당첨번호) +- [x] 유효성검사 : 정수, 1~45, excluded(당첨번호) ### 당첨 결과 분석 diff --git a/src/App.js b/src/App.js index a7536e0037..54ef2d9b63 100644 --- a/src/App.js +++ b/src/App.js @@ -12,7 +12,7 @@ class App { const lottos = await this.#purchaseLottos(); const winningNumbers = await this.#controller.inputWinningNumbers(); - const bonusNumber = await this.#controller.inputBonusNumber(); + const bonusNumber = await this.#controller.inputBonusNumber(winningNumbers); this.#showWinningResult(lottos, winningNumbers, bonusNumber); } diff --git a/src/constant/Messages.js b/src/constant/Messages.js index 47eda4fb0b..2636af51c2 100644 --- a/src/constant/Messages.js +++ b/src/constant/Messages.js @@ -1,7 +1,8 @@ /* eslint-disable max-params */ export const VARIABLE_ALIAS = { purchaseAmount: '구입 금액', - lottoNumbers: '당첨 번호' + lottoNumbers: '당첨 번호', + bonusNumber: '보너스 번호' }; export const ERROR_MESSAGES = { diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index 1a5df1e1d3..0bf651e82c 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -4,6 +4,7 @@ import InputView from '../view/InputView.js'; import OutputView from '../view/OutputView.js'; import PurchaseAmountValidator from '../util/validation/PurchaseAmountValidator.js'; import LottoNumbersValidator from '../util/validation/LottoNumbersValidator.js'; +import BonusNumberValidator from '../util/validation/BonusNumberValidator.js'; class LottoController { #lottoMachine; @@ -40,12 +41,23 @@ class LottoController { console.error(error.message); } } + return numbers; } - async inputBonusNumber() { - const bonusNumber = await InputView.inputBonusNumber(); - return bonusNumber.trim(); + async inputBonusNumber(winningNumbers) { + let bonusNumber; + while (true) { + try { + const input = await InputView.inputBonusNumber(); + bonusNumber = Number(input.trim()); + BonusNumberValidator.validate(bonusNumber, winningNumbers); + break; + } catch (error) { + console.error(error.message); + } + } + return bonusNumber; } async inputRestartResponse() { diff --git a/src/util/validation/BonusNumberValidator.js b/src/util/validation/BonusNumberValidator.js new file mode 100644 index 0000000000..a2fe41507a --- /dev/null +++ b/src/util/validation/BonusNumberValidator.js @@ -0,0 +1,35 @@ +import { VARIABLE_ALIAS, ERROR_MESSAGES } from '../../constant/Messages.js'; +import OPTIONS from '../../constant/Options.js'; +import Validation from './Validation.js'; + +class BonusNumberValidator { + static name = VARIABLE_ALIAS.bonusNumber; + + static validate(bonusNumber, winningNumbers) { + this.validateIsInteger(bonusNumber); + this.validateIsInRange(bonusNumber, OPTIONS.LOTTO.minNumber, OPTIONS.LOTTO.maxNumber); + this.validateIsNotIncluded(bonusNumber, winningNumbers); + } + + static validateIsInteger(number) { + if (!Validation.isInteger(number)) { + throw new Error(`${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotInteger(this.name)}`); + } + } + + static validateIsInRange(number, min, max) { + if (!Validation.isInRange(number, min, max)) { + throw new Error( + `${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotInRange(this.name, min, max)}` + ); + } + } + + static validateIsNotIncluded(number, numbers) { + if (Validation.isIncluded(numbers, number)) { + throw new Error(`${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotUnique(this.name)}`); + } + } +} + +export default BonusNumberValidator; diff --git a/src/util/validation/Validation.js b/src/util/validation/Validation.js index ee12cf1559..44fe9d6bca 100644 --- a/src/util/validation/Validation.js +++ b/src/util/validation/Validation.js @@ -18,6 +18,10 @@ class Validation { static isUnique(array) { return array.length === new Set(array).size; } + + static isIncluded(array, value) { + return array.includes(value); + } } export default Validation; From cb70b91a3c7c245c61bc0ecb30af40f40c39e9cb Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 14:07:39 +0900 Subject: [PATCH 29/39] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=9E=AC?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EB=B0=8F=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20?= =?UTF-8?q?=EA=B2=80=EC=82=AC=20=EC=B6=94=EA=B0=80=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 21 +++++++++++++++++---- src/constant/Messages.js | 6 ++++-- src/controller/LottoController.js | 14 ++++++++++++-- src/util/validation/RestartValidator.js | 17 +++++++++++++++++ 4 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 src/util/validation/RestartValidator.js diff --git a/src/App.js b/src/App.js index 54ef2d9b63..62917e4803 100644 --- a/src/App.js +++ b/src/App.js @@ -8,13 +8,26 @@ class App { } // eslint-disable-next-line max-lines-per-function + // async run() { + // const lottos = await this.#purchaseLottos(); + + // const winningNumbers = await this.#controller.inputWinningNumbers(); + // const bonusNumber = await this.#controller.inputBonusNumber(winningNumbers); + + // this.#showWinningResult(lottos, winningNumbers, bonusNumber); + // } async run() { - const lottos = await this.#purchaseLottos(); + let restart; + do { + const lottos = await this.#purchaseLottos(); + + const winningNumbers = await this.#controller.inputWinningNumbers(); + const bonusNumber = await this.#controller.inputBonusNumber(winningNumbers); - const winningNumbers = await this.#controller.inputWinningNumbers(); - const bonusNumber = await this.#controller.inputBonusNumber(winningNumbers); + this.#showWinningResult(lottos, winningNumbers, bonusNumber); - this.#showWinningResult(lottos, winningNumbers, bonusNumber); + restart = await this.#controller.inputRestartResponse(); + } while (restart); } async #purchaseLottos() { diff --git a/src/constant/Messages.js b/src/constant/Messages.js index 2636af51c2..300e704859 100644 --- a/src/constant/Messages.js +++ b/src/constant/Messages.js @@ -2,7 +2,8 @@ export const VARIABLE_ALIAS = { purchaseAmount: '구입 금액', lottoNumbers: '당첨 번호', - bonusNumber: '보너스 번호' + bonusNumber: '보너스 번호', + restartVar: '재시작' }; export const ERROR_MESSAGES = { @@ -11,7 +12,8 @@ export const ERROR_MESSAGES = { isNotAtLeast: (name, threshold) => `${name}(은)는 ${threshold} 이상이어야 합니다.`, hasNotLength: (name, length) => `${name}의 길이는 ${length}이어야 합니다.`, isNotInRange: (name, min, max) => `${name}(은)는 [${min} ~ ${max}] 범위 이내의 값이어야 합니다.`, - isNotUnique: (name) => `${name}(은)는 중복된 요소를 갖지 않아야 합니다.` + isNotUnique: (name) => `${name}(은)는 중복된 요소를 갖지 않아야 합니다.`, + isNotRestart: (name, arr) => `${name} 옵션은 [ ${arr} ]에서 선택해야 합니다.` }; export const INPUT_MESSAGES = { diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index 0bf651e82c..62ebaa19ac 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -5,6 +5,7 @@ import OutputView from '../view/OutputView.js'; import PurchaseAmountValidator from '../util/validation/PurchaseAmountValidator.js'; import LottoNumbersValidator from '../util/validation/LottoNumbersValidator.js'; import BonusNumberValidator from '../util/validation/BonusNumberValidator.js'; +import RestartValidator from '../util/validation/RestartValidator.js'; class LottoController { #lottoMachine; @@ -61,8 +62,17 @@ class LottoController { } async inputRestartResponse() { - const restartResponse = await InputView.inputRestartResponse(); - return restartResponse.trim(); + let restartResponse; + while (true) { + try { + restartResponse = await InputView.inputRestartResponse(); + RestartValidator.validateIsIncluded(restartResponse); + break; + } catch (error) { + console.error(error.message); + } + } + return restartResponse.toLowerCase() === 'y'; } displayIssueQuantity(issueQuantity) { diff --git a/src/util/validation/RestartValidator.js b/src/util/validation/RestartValidator.js new file mode 100644 index 0000000000..e152c8ac13 --- /dev/null +++ b/src/util/validation/RestartValidator.js @@ -0,0 +1,17 @@ +import { ERROR_MESSAGES, VARIABLE_ALIAS } from '../../constant/Messages'; +import Validation from './Validation'; + +class RestartValidator { + static name = VARIABLE_ALIAS.restartVar; + static restartArray = ['y', 'Y', 'n', 'N']; + + static validateIsIncluded(restartInput) { + if (!Validation.isIncluded(this.restartArray, restartInput)) { + throw new Error( + `${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotRestart(this.name, this.restartArray)}` + ); + } + } +} + +export default RestartValidator; From 184aacf037d252174a11e0aed3b930d428afb437 Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 17:32:44 +0900 Subject: [PATCH 30/39] =?UTF-8?q?feat:=20REQUIREMENTS.md=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/REQUIREMENTS.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index f8adb63c6e..d706e1efa1 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -39,17 +39,6 @@ - [x] 수익률 계산 - [x] 당첨 결과, 수익률 출력 -### 재시작 여부 - -- [x] 재시작 여부 입력 - - [x] 전처리 : trim - - [ ] 유효성검사 : included(yYnN) -- [ ] 프로그램 재시작 - -### 예외처리 - -- [ ] 예외 발생 시 해당 위치부터 재입력 - ``` 당첨은 1등부터 5등까지 있다. 당첨 기준과 금액은 아래와 같다. 1등: 6개 번호 일치 / 2,000,000,000원 @@ -58,3 +47,14 @@ 4등: 4개 번호 일치 / 50,000원 5등: 3개 번호 일치 / 5,000원 ``` + +### 재시작 여부 + +- [x] 재시작 여부 입력 + - [x] 전처리 : trim + - [x] 유효성검사 : included(yYnN) +- [x] 프로그램 재시작 + +### 예외처리 + +- [x] 예외 발생 시 해당 위치부터 재입력 From ed22aa4905acaf3f540e99f5aa0431911e5278c1 Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 19:15:18 +0900 Subject: [PATCH 31/39] =?UTF-8?q?refactor:=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/REQUIREMENTS.md | 4 +-- src/App.js | 38 +-------------------- src/controller/LottoController.js | 56 +++++++++++++++++++++---------- 3 files changed, 42 insertions(+), 56 deletions(-) diff --git a/docs/REQUIREMENTS.md b/docs/REQUIREMENTS.md index d706e1efa1..446d8aaf19 100644 --- a/docs/REQUIREMENTS.md +++ b/docs/REQUIREMENTS.md @@ -22,14 +22,14 @@ - [x] 당첨 번호 입력 : 힌트 - [x] 전처리 : split(','), trim -- [x] 유효성검사 : 개수, 정수, 1~45, 중복x +- [x] 유효성검사 : 개수(6), 정수, 범위(1~45), 중복x - [ ] 유효성검사 : 공백문자열 ### 보너스 번호 입력 - [x] 보너스 번호 입력 : 힌트 - [x] 전처리 : trim -- [x] 유효성검사 : 정수, 1~45, excluded(당첨번호) +- [x] 유효성검사 : 정수, 범위(1~45), excluded(당첨번호) ### 당첨 결과 분석 diff --git a/src/App.js b/src/App.js index 62917e4803..f933505d3a 100644 --- a/src/App.js +++ b/src/App.js @@ -7,44 +7,8 @@ class App { this.#controller = new LottoController(); } - // eslint-disable-next-line max-lines-per-function - // async run() { - // const lottos = await this.#purchaseLottos(); - - // const winningNumbers = await this.#controller.inputWinningNumbers(); - // const bonusNumber = await this.#controller.inputBonusNumber(winningNumbers); - - // this.#showWinningResult(lottos, winningNumbers, bonusNumber); - // } async run() { - let restart; - do { - const lottos = await this.#purchaseLottos(); - - const winningNumbers = await this.#controller.inputWinningNumbers(); - const bonusNumber = await this.#controller.inputBonusNumber(winningNumbers); - - this.#showWinningResult(lottos, winningNumbers, bonusNumber); - - restart = await this.#controller.inputRestartResponse(); - } while (restart); - } - - async #purchaseLottos() { - const purchaseAmount = await this.#controller.inputPurchaseAmount(); - const issueQuantity = this.#controller.calculateIssueQuantity(purchaseAmount); - const lottos = this.#controller.issueLottos(issueQuantity); - - this.#controller.displayIssueQuantity(issueQuantity); - this.#controller.displayLottoNumbersList(lottos); - - return lottos; - } - - #showWinningResult(lottos, winningNumbers, bonusNumber) { - const winningResult = this.#controller.determineLottoRanks(lottos, winningNumbers, bonusNumber); - const profitRate = this.#controller.calculateProfitRate(winningResult); - this.#controller.displayWinningResult(winningResult, profitRate); + await this.#controller.runGame(); } } diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index 62ebaa19ac..5f677a08da 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -14,65 +14,56 @@ class LottoController { } async inputPurchaseAmount() { - let amount; while (true) { try { const purchaseAmount = await InputView.inputPurchaseAmount(); - amount = parseInt(purchaseAmount.trim()); + const amount = parseInt(purchaseAmount.trim()); PurchaseAmountValidator.validate(amount); - break; + return amount; } catch (error) { console.error(error.message); } } - return amount; } async inputWinningNumbers() { - let numbers; while (true) { try { const winningNumbers = await InputView.inputWinningNumbers(); - numbers = winningNumbers + const numbers = winningNumbers .split(OPTIONS.INPUT.winningNumbersDelimiter) .map((number) => Number(number.trim())); LottoNumbersValidator.validate(numbers); - break; + return numbers; } catch (error) { console.error(error.message); } } - - return numbers; } async inputBonusNumber(winningNumbers) { - let bonusNumber; while (true) { try { const input = await InputView.inputBonusNumber(); - bonusNumber = Number(input.trim()); + const bonusNumber = Number(input.trim()); BonusNumberValidator.validate(bonusNumber, winningNumbers); - break; + return bonusNumber; } catch (error) { console.error(error.message); } } - return bonusNumber; } async inputRestartResponse() { - let restartResponse; while (true) { try { - restartResponse = await InputView.inputRestartResponse(); + const restartResponse = await InputView.inputRestartResponse(); RestartValidator.validateIsIncluded(restartResponse); - break; + return restartResponse.toLowerCase() === 'y'; } catch (error) { console.error(error.message); } } - return restartResponse.toLowerCase() === 'y'; } displayIssueQuantity(issueQuantity) { @@ -103,6 +94,37 @@ class LottoController { calculateProfitRate(winningResult) { return this.#lottoMachine.calculateProfitRate(winningResult); } + + async runGame() { + let restart; + do { + const lottos = await this.#purchaseLottos(); + + const winningNumbers = await this.inputWinningNumbers(); + const bonusNumber = await this.inputBonusNumber(winningNumbers); + + this.#showWinningResult(lottos, winningNumbers, bonusNumber); + + restart = await this.inputRestartResponse(); + } while (restart); + } + + async #purchaseLottos() { + const purchaseAmount = await this.inputPurchaseAmount(); + const issueQuantity = this.calculateIssueQuantity(purchaseAmount); + const lottos = this.issueLottos(issueQuantity); + + this.displayIssueQuantity(issueQuantity); + this.displayLottoNumbersList(lottos); + + return lottos; + } + + #showWinningResult(lottos, winningNumbers, bonusNumber) { + const winningResult = this.determineLottoRanks(lottos, winningNumbers, bonusNumber); + const profitRate = this.calculateProfitRate(winningResult); + this.displayWinningResult(winningResult, profitRate); + } } export default LottoController; From 27c944d1341a48b45b6ff49238f80c91894b4b55 Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 19:46:15 +0900 Subject: [PATCH 32/39] =?UTF-8?q?refactor:=20=ED=94=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EB=9E=98=EB=B0=8D=20=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD?= =?UTF-8?q?=EC=97=90=20=EB=A7=9E=EA=B2=8C=20eslint=20=EC=9E=AC=EC=84=A4?= =?UTF-8?q?=EC=B9=98=20=EB=B0=8F=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.json | 15 +++++++++++---- package-lock.json | 42 ++++++++++++++++++++++++++++++++---------- 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 0dccd82262..1a5cf9581a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -27,6 +27,16 @@ "printWidth": 100 } ], + "prefer-const": [ + "error", + { + "destructuring": "any", + "ignoreReadBeforeAssign": false + } + ], + "max-depth": ["error", { "max": 2 }], + "max-params": ["error", { "max": 2 }], + "class-methods-use-this": "off", "max-lines-per-function": ["error", { "max": 10 }], "import/extensions": ["error", { "js": "ignorePackages" }], "import/order": [ @@ -64,9 +74,6 @@ "caseInsensitive": true } } - ], - "max-depth": ["error", { "max": 2 }], - "max-params": ["error", 3], - "class-methods-use-this": "off" + ] } } diff --git a/package-lock.json b/package-lock.json index 57f88cc408..beb6901b39 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,10 +22,7 @@ "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.25.3", "eslint-plugin-jest": "^27.9.0", - "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0", "esm": "^3.2.25", "html-webpack-plugin": "^5.5.0", "jest": "^29.3.1", @@ -1776,6 +1773,7 @@ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz", "integrity": "sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ==", "dev": true, + "peer": true, "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -1788,7 +1786,8 @@ "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@babel/template": { "version": "7.23.9", @@ -3711,6 +3710,7 @@ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, + "peer": true, "dependencies": { "@babel/runtime": "^7.10.2", "@babel/runtime-corejs3": "^7.10.2" @@ -3798,6 +3798,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3837,7 +3838,8 @@ "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true + "dev": true, + "peer": true }, "node_modules/available-typed-arrays": { "version": "1.0.7", @@ -3859,6 +3861,7 @@ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.4.tgz", "integrity": "sha512-CZLSKisu/bhJ2awW4kJndluz2HLZYIHh5Uy1+ZwDRkJi69811xgIXXfdU9HSLX0Th+ILrHj8qfL/5wzamsFtQg==", "dev": true, + "peer": true, "engines": { "node": ">=4" } @@ -3867,7 +3870,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/babel-jest": { "version": "29.4.2", @@ -4656,6 +4660,7 @@ "integrity": "sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==", "dev": true, "hasInstallScript": true, + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -4766,7 +4771,8 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/debug": { "version": "4.3.4", @@ -5544,6 +5550,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", "dev": true, + "peer": true, "dependencies": { "@babel/runtime": "^7.16.3", "aria-query": "^4.2.2", @@ -5569,7 +5576,8 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/eslint-plugin-prettier": { "version": "5.1.3", @@ -5606,6 +5614,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", "dev": true, + "peer": true, "dependencies": { "array-includes": "^3.1.4", "array.prototype.flatmap": "^1.2.5", @@ -5634,6 +5643,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -5646,6 +5656,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "peer": true, "dependencies": { "esutils": "^2.0.2" }, @@ -5658,6 +5669,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, + "peer": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -5675,6 +5687,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "peer": true, "bin": { "semver": "bin/semver.js" } @@ -9263,6 +9276,7 @@ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, + "peer": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -9304,13 +9318,15 @@ "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true + "dev": true, + "peer": true }, "node_modules/language-tags": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, + "peer": true, "dependencies": { "language-subtag-registry": "^0.3.20" }, @@ -9400,6 +9416,7 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, + "peer": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -9769,6 +9786,7 @@ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -9786,6 +9804,7 @@ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", "dev": true, + "peer": true, "dependencies": { "define-properties": "^1.2.0", "es-abstract": "^1.22.1" @@ -10356,6 +10375,7 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, + "peer": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -10366,7 +10386,8 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/proxy-addr": { "version": "2.0.7", @@ -11262,6 +11283,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", From 1b86786edce992db5cb6bbf07d34f81d4f141eaa Mon Sep 17 00:00:00 2001 From: dabin Date: Fri, 23 Feb 2024 19:46:58 +0900 Subject: [PATCH 33/39] =?UTF-8?q?refactor:=20eslint=20max-params=20?= =?UTF-8?q?=EA=B7=9C=EC=B9=99=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constant/Messages.js | 4 ++-- src/view/OutputView.js | 10 ++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/constant/Messages.js b/src/constant/Messages.js index 300e704859..d365157838 100644 --- a/src/constant/Messages.js +++ b/src/constant/Messages.js @@ -1,4 +1,3 @@ -/* eslint-disable max-params */ export const VARIABLE_ALIAS = { purchaseAmount: '구입 금액', lottoNumbers: '당첨 번호', @@ -11,6 +10,7 @@ export const ERROR_MESSAGES = { isNotInteger: (name) => `${name}(은)는 정수 값이어야 합니다.`, isNotAtLeast: (name, threshold) => `${name}(은)는 ${threshold} 이상이어야 합니다.`, hasNotLength: (name, length) => `${name}의 길이는 ${length}이어야 합니다.`, + // eslint-disable-next-line max-params isNotInRange: (name, min, max) => `${name}(은)는 [${min} ~ ${max}] 범위 이내의 값이어야 합니다.`, isNotUnique: (name) => `${name}(은)는 중복된 요소를 갖지 않아야 합니다.`, isNotRestart: (name, arr) => `${name} 옵션은 [ ${arr} ]에서 선택해야 합니다.` @@ -35,7 +35,7 @@ export const OUTPUT_MESSAGES = { lottoNumbers: (numbers) => `[${numbers.join(', ')}]`, statisticsTitle: '\n당첨 통계', dividingLine: '--------------------', - statisticsResult: (matchingCount, bonusMatch, prizeAmount, count) => + statisticsResult: ({ matchingCount, bonusMatch, prizeAmount, count }) => `${matchingCount}개 일치${bonusMatch} (${prizeAmount}원) - ${count}개`, bonusMatch: ', 보너스 볼 일치', profitRate: (profitRate) => `\n총 수익률은 ${profitRate}%입니다.` diff --git a/src/view/OutputView.js b/src/view/OutputView.js index 611e87b57f..d2054ee942 100644 --- a/src/view/OutputView.js +++ b/src/view/OutputView.js @@ -1,4 +1,3 @@ -/* eslint-disable max-lines-per-function */ import { OUTPUT_MESSAGES } from '../constant/Messages.js'; import OPTIONS from '../constant/Options.js'; @@ -19,7 +18,6 @@ class OutputView { }); } - // eslint-disable-next-line max-lines-per-function static printWinningResult(winningResult, profitRate) { this.print(MESSAGES.statisticsTitle); this.print(MESSAGES.dividingLine); @@ -32,12 +30,12 @@ class OutputView { const bonusMessage = bonusMatch ? MESSAGES.bonusMatch : ''; this.print( - MESSAGES.statisticsResult( + MESSAGES.statisticsResult({ matchingCount, - bonusMessage, - OPTIONS.PRIZE_BY_RANK[rank].toLocaleString(), + bonusMatch: bonusMessage, + prizeAmount: OPTIONS.PRIZE_BY_RANK[rank].toLocaleString(), count - ) + }) ); }); From b5734102b746f917a79772f69162a5a9324b1ed6 Mon Sep 17 00:00:00 2001 From: dabin Date: Sat, 24 Feb 2024 15:27:26 +0900 Subject: [PATCH 34/39] =?UTF-8?q?refactor:=20eslint=20max-lines-per-functi?= =?UTF-8?q?on=20=EA=B7=9C=EC=B9=99=EC=97=90=20=EB=94=B0=EB=9D=BC=20LottoCo?= =?UTF-8?q?ntroller=20=EB=82=B4=EC=9D=98=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/LottoController.js | 100 +++++++++++++----------- src/util/random/Random.js | 1 - src/util/validation/RestartValidator.js | 1 + 3 files changed, 56 insertions(+), 46 deletions(-) diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index 5f677a08da..b5b3d3a913 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -1,11 +1,15 @@ +/* eslint-disable max-params */ +/* eslint-disable no-await-in-loop */ +/* eslint-disable no-constant-condition */ import OPTIONS from '../constant/Options.js'; import LottoMachine from '../domain/LottoMachine.js'; -import InputView from '../view/InputView.js'; -import OutputView from '../view/OutputView.js'; -import PurchaseAmountValidator from '../util/validation/PurchaseAmountValidator.js'; -import LottoNumbersValidator from '../util/validation/LottoNumbersValidator.js'; import BonusNumberValidator from '../util/validation/BonusNumberValidator.js'; +import LottoNumbersValidator from '../util/validation/LottoNumbersValidator.js'; +import PurchaseAmountValidator from '../util/validation/PurchaseAmountValidator.js'; import RestartValidator from '../util/validation/RestartValidator.js'; +import InputView from '../view/InputView.js'; +import OutputView from '../view/OutputView.js'; + class LottoController { #lottoMachine; @@ -13,57 +17,57 @@ class LottoController { this.#lottoMachine = new LottoMachine(); } - async inputPurchaseAmount() { + async getInputAndValidate(inputFunction, validateFunction) { while (true) { try { - const purchaseAmount = await InputView.inputPurchaseAmount(); - const amount = parseInt(purchaseAmount.trim()); - PurchaseAmountValidator.validate(amount); - return amount; + const input = await inputFunction(); + return validateFunction(input) ?? input; } catch (error) { console.error(error.message); } } } + async inputPurchaseAmount() { + const purchaseAmount = await this.getInputAndValidate(InputView.inputPurchaseAmount, (input) => + PurchaseAmountValidator.validate(parseInt(input.trim(), 10)) + ); + return parseInt(purchaseAmount.trim(), 10); + } + + // eslint-disable-next-line max-lines-per-function async inputWinningNumbers() { - while (true) { - try { - const winningNumbers = await InputView.inputWinningNumbers(); - const numbers = winningNumbers + const winningNumbers = await this.getInputAndValidate( + InputView.inputWinningNumbers, + (input) => { + const numbers = input .split(OPTIONS.INPUT.winningNumbersDelimiter) .map((number) => Number(number.trim())); LottoNumbersValidator.validate(numbers); return numbers; - } catch (error) { - console.error(error.message); } - } + ); + return winningNumbers; } async inputBonusNumber(winningNumbers) { - while (true) { - try { - const input = await InputView.inputBonusNumber(); - const bonusNumber = Number(input.trim()); - BonusNumberValidator.validate(bonusNumber, winningNumbers); - return bonusNumber; - } catch (error) { - console.error(error.message); - } - } + const inputBonusNumber = await this.getInputAndValidate(InputView.inputBonusNumber, (input) => { + const bonusNumber = Number(input.trim()); + BonusNumberValidator.validate(bonusNumber, winningNumbers); + return bonusNumber; + }); + return inputBonusNumber; } async inputRestartResponse() { - while (true) { - try { - const restartResponse = await InputView.inputRestartResponse(); - RestartValidator.validateIsIncluded(restartResponse); - return restartResponse.toLowerCase() === 'y'; - } catch (error) { - console.error(error.message); + const restartResponse = await this.getInputAndValidate( + InputView.inputRestartResponse, + (input) => { + RestartValidator.validateIsIncluded(input); + return input.toLowerCase() === 'y'; } - } + ); + return restartResponse; } displayIssueQuantity(issueQuantity) { @@ -99,14 +103,26 @@ class LottoController { let restart; do { const lottos = await this.#purchaseLottos(); + const { winningNumbers, bonusNumber } = await this.#getNumbers(); + this.#showResult(lottos, winningNumbers, bonusNumber); + restart = await this.inputRestartResponse(); + } while (restart); + } - const winningNumbers = await this.inputWinningNumbers(); - const bonusNumber = await this.inputBonusNumber(winningNumbers); + async #getNumbers() { + const winningNumbers = await this.inputWinningNumbers(); + const bonusNumber = await this.inputBonusNumber(winningNumbers); + return { winningNumbers: [winningNumbers], bonusNumber: [bonusNumber] }; + } - this.#showWinningResult(lottos, winningNumbers, bonusNumber); + #showResult(lottos, winningNumbers, bonusNumber) { + this.#showWinningResult(lottos, winningNumbers, bonusNumber); + } - restart = await this.inputRestartResponse(); - } while (restart); + #showWinningResult(lottos, winningNumbers, bonusNumber) { + const winningResult = this.determineLottoRanks(lottos, winningNumbers, bonusNumber); + const profitRate = this.calculateProfitRate(winningResult); + this.displayWinningResult(winningResult, profitRate); } async #purchaseLottos() { @@ -119,12 +135,6 @@ class LottoController { return lottos; } - - #showWinningResult(lottos, winningNumbers, bonusNumber) { - const winningResult = this.determineLottoRanks(lottos, winningNumbers, bonusNumber); - const profitRate = this.calculateProfitRate(winningResult); - this.displayWinningResult(winningResult, profitRate); - } } export default LottoController; diff --git a/src/util/random/Random.js b/src/util/random/Random.js index 8758aad6f6..2e246bf085 100644 --- a/src/util/random/Random.js +++ b/src/util/random/Random.js @@ -5,7 +5,6 @@ class Random { return Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber; } - // eslint-disable-next-line max-lines-per-function, max-params static pickCombination(min, max, count, array = []) { const number = this.randomPickNumber(min, max); diff --git a/src/util/validation/RestartValidator.js b/src/util/validation/RestartValidator.js index e152c8ac13..a47161ef41 100644 --- a/src/util/validation/RestartValidator.js +++ b/src/util/validation/RestartValidator.js @@ -3,6 +3,7 @@ import Validation from './Validation'; class RestartValidator { static name = VARIABLE_ALIAS.restartVar; + static restartArray = ['y', 'Y', 'n', 'N']; static validateIsIncluded(restartInput) { From c681e4a354c30b06855ffd926c297d1309206cba Mon Sep 17 00:00:00 2001 From: dabin Date: Sat, 24 Feb 2024 15:30:58 +0900 Subject: [PATCH 35/39] =?UTF-8?q?refacotr:=20airbnb=20=EC=BB=A8=EB=B2=A4?= =?UTF-8?q?=EC=85=98=EC=97=90=20=EB=94=B0=EB=9D=BC=20isNan=20=EB=8C=80?= =?UTF-8?q?=EC=8B=A0=20Number.isNan=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util/validation/LottoNumbersValidator.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/validation/LottoNumbersValidator.js b/src/util/validation/LottoNumbersValidator.js index 3d4f7b9895..97d67588e8 100644 --- a/src/util/validation/LottoNumbersValidator.js +++ b/src/util/validation/LottoNumbersValidator.js @@ -19,7 +19,7 @@ class LottoNumbersValidator { } static validateIsInteger(numbers) { - if (!numbers.every((number) => Validation.isInteger(number) && !isNaN(number))) { + if (!numbers.every((number) => Validation.isInteger(number) && !Number.isNaN(number))) { throw new Error(`${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotInteger(this.name)}`); } } From dfe9bb0338ae7f784133e2da872287a06cc824d9 Mon Sep 17 00:00:00 2001 From: dabin Date: Sat, 24 Feb 2024 15:36:58 +0900 Subject: [PATCH 36/39] =?UTF-8?q?refacotr:=20nullish=20coalescing=20operat?= =?UTF-8?q?or(=3F=3F)=20=EC=82=AC=EC=9A=A9=EC=9C=BC=EB=A1=9C=20=EB=B6=88?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20=EB=B9=84=EA=B5=90=20=EC=A4=84?= =?UTF-8?q?=EC=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/domain/Lotto.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/domain/Lotto.js b/src/domain/Lotto.js index 5058eac6aa..98159286a4 100644 --- a/src/domain/Lotto.js +++ b/src/domain/Lotto.js @@ -32,13 +32,13 @@ class Lotto { } #isMatchingCountEqual(rank, matchingCount) { - const condition = OPTIONS.RANK_CONDITION[rank].matchingCount; - return condition === undefined || condition === matchingCount; + const condition = OPTIONS.RANK_CONDITION[rank].matchingCount ?? matchingCount; + return condition === matchingCount; } #isBonusMatchEqual(rank, bonusMatch) { - const condition = OPTIONS.RANK_CONDITION[rank].bonusMatch; - return condition === undefined || condition === bonusMatch; + const condition = OPTIONS.RANK_CONDITION[rank].bonusMatch ?? bonusMatch; + return condition === bonusMatch; } #countMatchingNumbers(winningNumbers) { From e7b65d981c7fd57f2fc58e59a9487ad87ca8572e Mon Sep 17 00:00:00 2001 From: dabin Date: Sat, 24 Feb 2024 16:52:31 +0900 Subject: [PATCH 37/39] =?UTF-8?q?refactor:=20eslint=20max-params=20?= =?UTF-8?q?=EA=B7=9C=EC=B9=99=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=EB=A1=9C=20=EB=AC=B6=EB=8A=94=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constant/Messages.js | 4 ++-- src/controller/LottoController.js | 21 ++++++++++++-------- src/domain/Lotto.js | 8 ++++---- src/domain/LottoMachine.js | 12 +++++------ src/util/random/Random.js | 7 ++++--- src/util/validation/BonusNumberValidator.js | 12 +++++++---- src/util/validation/LottoNumbersValidator.js | 8 ++++---- src/util/validation/Validation.js | 2 +- src/view/InputView.js | 4 ++++ src/view/OutputView.js | 1 + 10 files changed, 47 insertions(+), 32 deletions(-) diff --git a/src/constant/Messages.js b/src/constant/Messages.js index d365157838..cc3aef2ca0 100644 --- a/src/constant/Messages.js +++ b/src/constant/Messages.js @@ -10,8 +10,8 @@ export const ERROR_MESSAGES = { isNotInteger: (name) => `${name}(은)는 정수 값이어야 합니다.`, isNotAtLeast: (name, threshold) => `${name}(은)는 ${threshold} 이상이어야 합니다.`, hasNotLength: (name, length) => `${name}의 길이는 ${length}이어야 합니다.`, - // eslint-disable-next-line max-params - isNotInRange: (name, min, max) => `${name}(은)는 [${min} ~ ${max}] 범위 이내의 값이어야 합니다.`, + isNotInRange: ({ name, min, max }) => + `${name}(은)는 [${min} ~ ${max}] 범위 이내의 값이어야 합니다.`, isNotUnique: (name) => `${name}(은)는 중복된 요소를 갖지 않아야 합니다.`, isNotRestart: (name, arr) => `${name} 옵션은 [ ${arr} ]에서 선택해야 합니다.` }; diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index b5b3d3a913..8c35354629 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -1,4 +1,3 @@ -/* eslint-disable max-params */ /* eslint-disable no-await-in-loop */ /* eslint-disable no-constant-condition */ import OPTIONS from '../constant/Options.js'; @@ -32,6 +31,7 @@ class LottoController { const purchaseAmount = await this.getInputAndValidate(InputView.inputPurchaseAmount, (input) => PurchaseAmountValidator.validate(parseInt(input.trim(), 10)) ); + return parseInt(purchaseAmount.trim(), 10); } @@ -47,6 +47,7 @@ class LottoController { return numbers; } ); + return winningNumbers; } @@ -56,9 +57,11 @@ class LottoController { BonusNumberValidator.validate(bonusNumber, winningNumbers); return bonusNumber; }); + return inputBonusNumber; } + // eslint-disable-next-line max-lines-per-function async inputRestartResponse() { const restartResponse = await this.getInputAndValidate( InputView.inputRestartResponse, @@ -67,6 +70,7 @@ class LottoController { return input.toLowerCase() === 'y'; } ); + return restartResponse; } @@ -91,8 +95,8 @@ class LottoController { return this.#lottoMachine.calculateIssueQuantity(purchaseAmount); } - determineLottoRanks(lottos, winningNumbers, bonusNumber) { - return this.#lottoMachine.determineLottoRanks(lottos, winningNumbers, bonusNumber); + determineLottoRanks({ lottos, winningNumbers, bonusNumber }) { + return this.#lottoMachine.determineLottoRanks({ lottos, winningNumbers, bonusNumber }); } calculateProfitRate(winningResult) { @@ -104,7 +108,7 @@ class LottoController { do { const lottos = await this.#purchaseLottos(); const { winningNumbers, bonusNumber } = await this.#getNumbers(); - this.#showResult(lottos, winningNumbers, bonusNumber); + this.#showResult({ lottos, winningNumbers, bonusNumber }); restart = await this.inputRestartResponse(); } while (restart); } @@ -112,15 +116,16 @@ class LottoController { async #getNumbers() { const winningNumbers = await this.inputWinningNumbers(); const bonusNumber = await this.inputBonusNumber(winningNumbers); + return { winningNumbers: [winningNumbers], bonusNumber: [bonusNumber] }; } - #showResult(lottos, winningNumbers, bonusNumber) { - this.#showWinningResult(lottos, winningNumbers, bonusNumber); + #showResult({ lottos, winningNumbers, bonusNumber }) { + this.#showWinningResult({ lottos, winningNumbers, bonusNumber }); } - #showWinningResult(lottos, winningNumbers, bonusNumber) { - const winningResult = this.determineLottoRanks(lottos, winningNumbers, bonusNumber); + #showWinningResult({ lottos, winningNumbers, bonusNumber }) { + const winningResult = this.determineLottoRanks({ lottos, winningNumbers, bonusNumber }); const profitRate = this.calculateProfitRate(winningResult); this.displayWinningResult(winningResult, profitRate); } diff --git a/src/domain/Lotto.js b/src/domain/Lotto.js index 98159286a4..08cdb39865 100644 --- a/src/domain/Lotto.js +++ b/src/domain/Lotto.js @@ -6,7 +6,6 @@ class Lotto { constructor(numbers) { LottoNumbersValidator.validate(numbers); - this.#numbers = this.#sortNumbersAscending(numbers); } @@ -17,15 +16,14 @@ class Lotto { determineRank(winningNumbers, bonusNumber) { const matchingCount = this.#countMatchingNumbers(winningNumbers); const bonusMatch = this.#hasBonusNumber(bonusNumber); - const rank = OPTIONS.RANK.find((rank_) => - this.#checkRankCondition(rank_, matchingCount, bonusMatch) + this.#checkRankCondition({ rank: rank_, matchingCount, bonusMatch }) ); return rank; } - #checkRankCondition(rank, matchingCount, bonusMatch) { + #checkRankCondition({ rank, matchingCount, bonusMatch }) { return ( this.#isMatchingCountEqual(rank, matchingCount) && this.#isBonusMatchEqual(rank, bonusMatch) ); @@ -33,11 +31,13 @@ class Lotto { #isMatchingCountEqual(rank, matchingCount) { const condition = OPTIONS.RANK_CONDITION[rank].matchingCount ?? matchingCount; + return condition === matchingCount; } #isBonusMatchEqual(rank, bonusMatch) { const condition = OPTIONS.RANK_CONDITION[rank].bonusMatch ?? bonusMatch; + return condition === bonusMatch; } diff --git a/src/domain/LottoMachine.js b/src/domain/LottoMachine.js index 401f51cef0..712eef58ac 100644 --- a/src/domain/LottoMachine.js +++ b/src/domain/LottoMachine.js @@ -15,14 +15,14 @@ class LottoMachine { } #pickLottoNumbers() { - return Random.pickCombination( - OPTIONS.LOTTO.minNumber, - OPTIONS.LOTTO.maxNumber, - OPTIONS.LOTTO.combination - ); + return Random.pickCombination({ + min: OPTIONS.LOTTO.minNumber, + max: OPTIONS.LOTTO.maxNumber, + count: OPTIONS.LOTTO.combination + }); } - determineLottoRanks(lottos, winningNumbers, bonusNumber) { + determineLottoRanks({ lottos, winningNumbers, bonusNumber }) { const winningResult = OPTIONS.WINNING_RESULT; lottos.forEach((lotto) => { diff --git a/src/util/random/Random.js b/src/util/random/Random.js index 2e246bf085..ae8c80ea2c 100644 --- a/src/util/random/Random.js +++ b/src/util/random/Random.js @@ -2,21 +2,22 @@ class Random { static randomPickNumber(min, max) { const minNumber = Math.ceil(min); const maxNumber = Math.floor(max); + return Math.floor(Math.random() * (maxNumber - minNumber + 1)) + minNumber; } - static pickCombination(min, max, count, array = []) { + // eslint-disable-next-line max-lines-per-function + static pickCombination({ min, max, count, array = [] }) { const number = this.randomPickNumber(min, max); if (array.length === count) { return array; } - if (array.indexOf(number) < 0) { array.push(number); } - return this.pickCombination(min, max, count, array); + return this.pickCombination({ min, max, count, array }); } } diff --git a/src/util/validation/BonusNumberValidator.js b/src/util/validation/BonusNumberValidator.js index a2fe41507a..f0dab62f80 100644 --- a/src/util/validation/BonusNumberValidator.js +++ b/src/util/validation/BonusNumberValidator.js @@ -7,7 +7,11 @@ class BonusNumberValidator { static validate(bonusNumber, winningNumbers) { this.validateIsInteger(bonusNumber); - this.validateIsInRange(bonusNumber, OPTIONS.LOTTO.minNumber, OPTIONS.LOTTO.maxNumber); + this.validateIsInRange({ + number: bonusNumber, + min: OPTIONS.LOTTO.minNumber, + max: OPTIONS.LOTTO.maxNumber + }); this.validateIsNotIncluded(bonusNumber, winningNumbers); } @@ -17,10 +21,10 @@ class BonusNumberValidator { } } - static validateIsInRange(number, min, max) { - if (!Validation.isInRange(number, min, max)) { + static validateIsInRange({ number, min, max }) { + if (!Validation.isInRange({ value: number, min, max })) { throw new Error( - `${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotInRange(this.name, min, max)}` + `${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotInRange({ name: this.name, min, max })}` ); } } diff --git a/src/util/validation/LottoNumbersValidator.js b/src/util/validation/LottoNumbersValidator.js index 97d67588e8..44532f6dd3 100644 --- a/src/util/validation/LottoNumbersValidator.js +++ b/src/util/validation/LottoNumbersValidator.js @@ -8,7 +8,7 @@ class LottoNumbersValidator { static validate(numbers) { this.validateHasLength(numbers, OPTIONS.LOTTO.combination); this.validateIsInteger(numbers); - this.validateIsInRange(numbers, OPTIONS.LOTTO.minNumber, OPTIONS.LOTTO.maxNumber); + this.validateIsInRange({ numbers, min: OPTIONS.LOTTO.minNumber, max: OPTIONS.LOTTO.maxNumber }); this.validateIsUnique(numbers); } @@ -24,10 +24,10 @@ class LottoNumbersValidator { } } - static validateIsInRange(numbers, min, max) { - if (!numbers.every((number) => Validation.isInRange(number, min, max))) { + static validateIsInRange({ numbers, min, max }) { + if (!numbers.every((number) => Validation.isInRange({ value: number, min, max }))) { throw new Error( - `${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotInRange(this.name, min, max)}` + `${ERROR_MESSAGES.prefix}${ERROR_MESSAGES.isNotInRange({ name: this.name, min, max })}` ); } } diff --git a/src/util/validation/Validation.js b/src/util/validation/Validation.js index 44fe9d6bca..1566bfe6ac 100644 --- a/src/util/validation/Validation.js +++ b/src/util/validation/Validation.js @@ -11,7 +11,7 @@ class Validation { return array.length === length; } - static isInRange(value, min, max) { + static isInRange({ value, min, max }) { return value >= min && value <= max; } diff --git a/src/view/InputView.js b/src/view/InputView.js index 6ca5002573..98b3a092c5 100644 --- a/src/view/InputView.js +++ b/src/view/InputView.js @@ -7,6 +7,7 @@ const HINTS = INPUT_HINTS; class InputView { static async inputPurchaseAmount() { const input = await readLineAsync([MESSAGES.purchaseAmount, HINTS.purchaseAmount].join('\n')); + return input; } @@ -14,16 +15,19 @@ class InputView { const input = await readLineAsync( [MESSAGES.winningNumbers, HINTS.winningNumber1, HINTS.winningNumber2].join('\n') ); + return input; } static async inputBonusNumber() { const input = await readLineAsync([MESSAGES.bonusNumber, HINTS.bonusNumber].join('\n')); + return input; } static async inputRestartResponse() { const input = await readLineAsync(MESSAGES.restartResponse); + return input; } } diff --git a/src/view/OutputView.js b/src/view/OutputView.js index d2054ee942..4cca02d433 100644 --- a/src/view/OutputView.js +++ b/src/view/OutputView.js @@ -1,3 +1,4 @@ +/* eslint-disable max-lines-per-function */ import { OUTPUT_MESSAGES } from '../constant/Messages.js'; import OPTIONS from '../constant/Options.js'; From 979af8052f83f4e2b4f7238edeb7ac93debdcdc6 Mon Sep 17 00:00:00 2001 From: dabin Date: Sat, 24 Feb 2024 17:29:02 +0900 Subject: [PATCH 38/39] =?UTF-8?q?feat:winningNumbers=EC=99=80=20bonusNumbe?= =?UTF-8?q?r=EB=A5=BC=20=EB=B0=B0=EC=97=B4=EB=A1=9C=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EB=8B=B9=EC=B2=A8=20=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/LottoController.js | 2 +- src/domain/Lotto.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index 8c35354629..2163949671 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -117,7 +117,7 @@ class LottoController { const winningNumbers = await this.inputWinningNumbers(); const bonusNumber = await this.inputBonusNumber(winningNumbers); - return { winningNumbers: [winningNumbers], bonusNumber: [bonusNumber] }; + return { winningNumbers, bonusNumber }; } #showResult({ lottos, winningNumbers, bonusNumber }) { diff --git a/src/domain/Lotto.js b/src/domain/Lotto.js index 08cdb39865..7a011a4c4c 100644 --- a/src/domain/Lotto.js +++ b/src/domain/Lotto.js @@ -52,7 +52,7 @@ class Lotto { } getNumbers() { - return this.#numbers; + return [...this.#numbers]; } } From f501d3978859eeb1777f2d51d8ef7010ec86c400 Mon Sep 17 00:00:00 2001 From: dabin Date: Sat, 24 Feb 2024 17:40:32 +0900 Subject: [PATCH 39/39] =?UTF-8?q?refactor:=20eslint=20max-depth=20?= =?UTF-8?q?=EA=B7=9C=EC=B9=99=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.json | 2 +- src/controller/LottoController.js | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 1a5cf9581a..056e053914 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -34,7 +34,7 @@ "ignoreReadBeforeAssign": false } ], - "max-depth": ["error", { "max": 2 }], + "max-depth": ["error", { "max": 1 }], "max-params": ["error", { "max": 2 }], "class-methods-use-this": "off", "max-lines-per-function": ["error", { "max": 10 }], diff --git a/src/controller/LottoController.js b/src/controller/LottoController.js index 2163949671..88f30a0dd8 100644 --- a/src/controller/LottoController.js +++ b/src/controller/LottoController.js @@ -17,13 +17,22 @@ class LottoController { } async getInputAndValidate(inputFunction, validateFunction) { - while (true) { - try { - const input = await inputFunction(); - return validateFunction(input) ?? input; - } catch (error) { - console.error(error.message); - } + const input = await this.tryInput(inputFunction, validateFunction); + + if (input) { + return input; + } + + return this.getInputAndValidate(inputFunction, validateFunction); + } + + async tryInput(inputFunction, validateFunction) { + try { + const input = await inputFunction(); + return validateFunction(input) ?? input; + } catch (error) { + console.error(error.message); + return null; } } @@ -67,11 +76,11 @@ class LottoController { InputView.inputRestartResponse, (input) => { RestartValidator.validateIsIncluded(input); - return input.toLowerCase() === 'y'; + return input.toLowerCase(); } ); - return restartResponse; + return restartResponse === 'y'; } displayIssueQuantity(issueQuantity) {