From bf76351c855b581c1192bdaee13d5492071049cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Apr 2023 18:00:31 +0000 Subject: [PATCH 01/30] chore(deps): bump @tool-pack/types from 0.0.1 to 0.0.2 Bumps [@tool-pack/types](https://github.com/js-tool-pack/types) from 0.0.1 to 0.0.2. - [Release notes](https://github.com/js-tool-pack/types/releases) - [Changelog](https://github.com/js-tool-pack/types/blob/main/CHANGELOG.md) - [Commits](https://github.com/js-tool-pack/types/compare/v0.0.1...v0.0.2) --- updated-dependencies: - dependency-name: "@tool-pack/types" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 538767fb..580ed06c 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,6 @@ "registry": "https://registry.npmjs.org/" }, "dependencies": { - "@tool-pack/types": "^0.0.1" + "@tool-pack/types": "^0.0.2" } } From bc2c33cd4d127168cfee754491ee3f3978abfa64 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Tue, 11 Apr 2023 19:03:12 +0800 Subject: [PATCH 02/30] chore(deps): update typedoc theme --- package.json | 4 ++-- pnpm-lock.yaml | 22 +++++++++++----------- typedoc.theme.css | 14 +------------- 3 files changed, 14 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index 2739b123..a3ee4a93 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "@commitlint/config-conventional": "^17.4.4", "@microsoft/api-extractor": "^7.34.4", "@mxssfd/core": "5.0.1-beta.1", - "@mxssfd/typedoc-theme": "^1.0.6", + "@mxssfd/typedoc-theme": "^1.1.1", "@rollup/plugin-json": "^6.0.0", "@types/fs-extra": "^11.0.1", "@types/jest": "^29.4.0", @@ -87,7 +87,7 @@ "semver": "^7.3.8", "ts-jest": "^29.0.5", "tslib": "^2.5.0", - "typedoc": "^0.23.26", + "typedoc": "^0.24.1", "typescript": "^4.9.5" }, "files": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f996562..e97204c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,7 @@ specifiers: '@commitlint/config-conventional': ^17.4.4 '@microsoft/api-extractor': ^7.34.4 '@mxssfd/core': 5.0.1-beta.1 - '@mxssfd/typedoc-theme': ^1.0.6 + '@mxssfd/typedoc-theme': ^1.1.1 '@rollup/plugin-json': ^6.0.0 '@tool-pack/types': ^0.0.1 '@types/fs-extra': ^11.0.1 @@ -41,7 +41,7 @@ specifiers: semver: ^7.3.8 ts-jest: ^29.0.5 tslib: ^2.5.0 - typedoc: ^0.23.26 + typedoc: ^0.24.1 typescript: ^4.9.5 dependencies: @@ -52,7 +52,7 @@ devDependencies: '@commitlint/config-conventional': 17.4.4 '@microsoft/api-extractor': 7.34.4_@types+node@18.15.0 '@mxssfd/core': 5.0.1-beta.1 - '@mxssfd/typedoc-theme': 1.0.6_typedoc@0.23.26 + '@mxssfd/typedoc-theme': 1.1.1_typedoc@0.24.1 '@rollup/plugin-json': 6.0.0_rollup@3.19.0 '@types/fs-extra': 11.0.1 '@types/jest': 29.4.0 @@ -87,7 +87,7 @@ devDependencies: semver: 7.3.8 ts-jest: 29.0.5_doipufordlnvh5g4adbwayvyvy tslib: 2.5.0 - typedoc: 0.23.26_typescript@4.9.5 + typedoc: 0.24.1_typescript@4.9.5 typescript: 4.9.5 packages: @@ -1052,13 +1052,13 @@ packages: '@mxssfd/types': 5.0.1-beta.1 dev: true - /@mxssfd/typedoc-theme/1.0.6_typedoc@0.23.26: - resolution: {integrity: sha512-GmaVRWWCaL9jIr58uKyXuBS+yn5L4e5BznclGCB+VlDSGHfZEc8GZdVc4ApKFUC3UEtZkS3fWy9S5aJMQttUyQ==} + /@mxssfd/typedoc-theme/1.1.1_typedoc@0.24.1: + resolution: {integrity: sha512-XhXy2MDoMJFeHgbE0cTxpB3K8AizQMJcm6gvf9lqNwfN6+ZfDnmIZub6lCuDgpL0O0fvckKTq7fGSP6XIU/17Q==} engines: {node: '>= 14'} peerDependencies: - typedoc: ^0.23.21 + typedoc: ^0.24.1 dependencies: - typedoc: 0.23.26_typescript@4.9.5 + typedoc: 0.24.1_typescript@4.9.5 dev: true /@mxssfd/types/5.0.1-beta.1: @@ -7062,12 +7062,12 @@ packages: is-typedarray: 1.0.0 dev: true - /typedoc/0.23.26_typescript@4.9.5: - resolution: {integrity: sha512-5m4KwR5tOLnk0OtMaRn9IdbeRM32uPemN9kur7YK9wFqx8U0CYrvO9aVq6ysdZSV1c824BTm+BuQl2Ze/k1HtA==} + /typedoc/0.24.1_typescript@4.9.5: + resolution: {integrity: sha512-u4HwjZcSQhQSkkhLjgcs0ooAf6HrFVLDHHrwU2xZW8WxH0KnGZlNkaWxiOcK5Gagj7mxJSgwWx0dv8ACDAOXAQ==} engines: {node: '>= 14.14'} hasBin: true peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x dependencies: lunr: 2.3.9 marked: 4.2.12 diff --git a/typedoc.theme.css b/typedoc.theme.css index d82ae8b6..0fea7869 100644 --- a/typedoc.theme.css +++ b/typedoc.theme.css @@ -1,15 +1,3 @@ -.col-menu { - flex-basis: 22rem; -} -.tsd-navigation.primary ul li li a { - margin-left: 0.5rem; -} -@media (min-width: 1024px) { - .tsd-navigation.modules-total-0 { - display: none; - } -} -.modules > .selectedmodule > a, -.modules > .currentmodule > a { +.tsd-generator { display: none; } From dad886ddfac0a93c2565fcf25f01f66fb0eb8c57 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Apr 2023 11:05:00 +0000 Subject: [PATCH 03/30] chore(deps-dev): bump typescript from 4.9.5 to 5.0.4 Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.9.5 to 5.0.4. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Commits](https://github.com/Microsoft/TypeScript/compare/v4.9.5...v5.0.4) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a3ee4a93..02886342 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "ts-jest": "^29.0.5", "tslib": "^2.5.0", "typedoc": "^0.24.1", - "typescript": "^4.9.5" + "typescript": "^5.0.4" }, "files": [ "dist", From c557d8ed40497f8760f4d03ea79fb2d69f8d38f4 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Mon, 17 Apr 2023 04:48:24 +0800 Subject: [PATCH 04/30] =?UTF-8?q?feat(time/howLongAgo):=20=E7=AC=AC?= =?UTF-8?q?=E4=BA=8C=E4=B8=AA=E5=8F=82=E6=95=B0=E6=94=B9=E4=B8=BA=E5=8F=AF?= =?UTF-8?q?=E9=80=89=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __tests__/time.test.ts | 3 ++- src/time.ts | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/__tests__/time.test.ts b/__tests__/time.test.ts index bbf8c14c..e3982d6d 100644 --- a/__tests__/time.test.ts +++ b/__tests__/time.test.ts @@ -411,6 +411,7 @@ describe('time', function () { }); test('howLongAgo', () => { const date = new Date('2023/4/7 00:00:00'); + expect(howLongAgo(date, { now: date })).toBe('2023-04-07 00:00:00'); expect(howLongAgo(date, { now: new Date('2023/4/7 00:00:20') })).toBe('20秒前'); expect(howLongAgo(date, { now: new Date('2023/4/7 00:10:20') })).toBe('10分钟前'); expect(howLongAgo(date, { now: new Date('2023/4/7 08:00:00') })).toBe('8小时前'); @@ -437,7 +438,7 @@ describe('time', function () { ); // 更换模板 - const templates: Parameters[1]['templates'] = {}; + const templates: Required>[1]['templates'] = {}; // 更换秒数模板 templates.second = '刚刚'; diff --git a/src/time.ts b/src/time.ts index d855a6b2..5d1739ad 100644 --- a/src/time.ts +++ b/src/time.ts @@ -706,7 +706,7 @@ export const getTimePeriodConst = (function () { * howLongAgo(date, { now: new Date('2022/7/8 00:00:00'), defaultFormat: 'yyyy' }); // '2023' * * // 更换模板 - * const templates: Parameters[1]['templates'] = {}; + * const templates: Required>[1]['templates'] = {}; * * // 更换秒数模板 * templates.second = '刚刚'; @@ -785,7 +785,7 @@ export function howLongAgo( templates?: Partial< Record, 'millisecond'>, string> >; - }, + } = {}, ): string { const searchValue = '${ago}'; const _templates: Required = { From 53a82a01f0c56ce4ee566527aa044efb97104afb Mon Sep 17 00:00:00 2001 From: dyh_a Date: Mon, 17 Apr 2023 09:56:50 +0800 Subject: [PATCH 05/30] =?UTF-8?q?feat(time/howLongAgo):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0now=20template?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/time.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/time.ts b/src/time.ts index 5d1739ad..2e1d108e 100644 --- a/src/time.ts +++ b/src/time.ts @@ -783,12 +783,13 @@ export function howLongAgo( filter?: (result: string, diff: number) => string; now?: Date; templates?: Partial< - Record, 'millisecond'>, string> + Record, 'millisecond'> | 'now', string> >; } = {}, ): string { const searchValue = '${ago}'; const _templates: Required = { + now: '刚刚', year: `${searchValue}年前`, season: `${searchValue}季前`, month: `${searchValue}月前`, @@ -812,6 +813,7 @@ export function howLongAgo( const found = matches.find(([cond, tpl]) => tpl !== '~~' && diff >= cond); if (!found) { + if (diff >= 0 && diff < 1000) return _filter(_templates.now, diff); const res = def.replace('${time}', formatDate(date, defaultFormat)); return _filter(res, diff); } From 9dac994851749de75c9ec0e5d9fe64e41a3b3015 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Mon, 17 Apr 2023 09:56:59 +0800 Subject: [PATCH 06/30] =?UTF-8?q?test(time/howLongAgo):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0now=20template?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __tests__/time.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/time.test.ts b/__tests__/time.test.ts index e3982d6d..9c07527e 100644 --- a/__tests__/time.test.ts +++ b/__tests__/time.test.ts @@ -411,7 +411,7 @@ describe('time', function () { }); test('howLongAgo', () => { const date = new Date('2023/4/7 00:00:00'); - expect(howLongAgo(date, { now: date })).toBe('2023-04-07 00:00:00'); + expect(howLongAgo(date, { now: date })).toBe('刚刚'); expect(howLongAgo(date, { now: new Date('2023/4/7 00:00:20') })).toBe('20秒前'); expect(howLongAgo(date, { now: new Date('2023/4/7 00:10:20') })).toBe('10分钟前'); expect(howLongAgo(date, { now: new Date('2023/4/7 08:00:00') })).toBe('8小时前'); From 89829bd696e729c1949feb953a9c68e97eb16232 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Wed, 19 Apr 2023 21:01:55 +0800 Subject: [PATCH 07/30] =?UTF-8?q?refactor(time):=20=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=8D=95=E5=87=BD=E6=95=B0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/time/index.ts | 1 + src/{ => time}/time.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 src/time/index.ts rename src/{ => time}/time.ts (99%) diff --git a/src/time/index.ts b/src/time/index.ts new file mode 100644 index 00000000..47e4e1f9 --- /dev/null +++ b/src/time/index.ts @@ -0,0 +1 @@ +export * from './time'; diff --git a/src/time.ts b/src/time/time.ts similarity index 99% rename from src/time.ts rename to src/time/time.ts index 2e1d108e..1dd067a1 100644 --- a/src/time.ts +++ b/src/time/time.ts @@ -1,4 +1,4 @@ -import { inRange } from './array'; +import { inRange } from '../array'; /** * 把毫秒值转为天数 From edc37290afc3d2dea46dd57bee3fa0a5141eba23 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Wed, 19 Apr 2023 21:02:29 +0800 Subject: [PATCH 08/30] =?UTF-8?q?feat(time):=20getStartOfDate=20=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=9F=90=E4=B8=80=E5=A4=A9=E7=9A=84=E5=BC=80=E5=A7=8B?= =?UTF-8?q?Date?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/time/getStartOfDate.ts | 12 ++++++++++++ src/time/index.ts | 1 + 2 files changed, 13 insertions(+) create mode 100644 src/time/getStartOfDate.ts diff --git a/src/time/getStartOfDate.ts b/src/time/getStartOfDate.ts new file mode 100644 index 00000000..87d0db20 --- /dev/null +++ b/src/time/getStartOfDate.ts @@ -0,0 +1,12 @@ +/** + * 获取某一天的开始Date + * + * @example + * + * ```typescript + * formatDate(getStartOfDate(new Date('2023/04/19 12:10:50'))); // '2023-04-19 00:00:00' + * ``` + */ +export function getStartOfDate(date: Date): Date { + return new Date(date.getFullYear(), date.getMonth(), date.getDate()); +} diff --git a/src/time/index.ts b/src/time/index.ts index 47e4e1f9..2b1f506e 100644 --- a/src/time/index.ts +++ b/src/time/index.ts @@ -1 +1,2 @@ export * from './time'; +export * from './getStartOfDate'; From db73263a49213d1dde455cfc47bd08ec8004d4cb Mon Sep 17 00:00:00 2001 From: dyh_a Date: Wed, 19 Apr 2023 21:02:40 +0800 Subject: [PATCH 09/30] =?UTF-8?q?test(time):=20getStartOfDate=20=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=9F=90=E4=B8=80=E5=A4=A9=E7=9A=84=E5=BC=80=E5=A7=8B?= =?UTF-8?q?Date?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __tests__/time.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/__tests__/time.test.ts b/__tests__/time.test.ts index 9c07527e..ecb66eb3 100644 --- a/__tests__/time.test.ts +++ b/__tests__/time.test.ts @@ -14,6 +14,7 @@ import { getMonthTheNthWeekday, getTimePeriodConst, howLongAgo, + getStartOfDate, } from '../src/time'; import { chunk, createArray, inRange } from '@mxssfd/core'; @@ -491,4 +492,7 @@ describe('time', function () { d.setHours(d.getHours() - 8); expect(howLongAgo(d, { templates })).toBe('8 hours ago'); }); + test('getDateBegin', () => { + expect(formatDate(getStartOfDate(new Date('2023/04/19 12:10:50')))).toBe('2023-04-19 00:00:00'); + }); }); From daa5f616650a0e926f9951ba5d56a5be2850d361 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Wed, 19 Apr 2023 22:43:54 +0800 Subject: [PATCH 10/30] chore(deps): update --- package.json | 38 +- pnpm-lock.yaml | 2806 ++++++++++++++++++++++++------------------------ 2 files changed, 1429 insertions(+), 1415 deletions(-) diff --git a/package.json b/package.json index 9dfb9c33..bc505616 100644 --- a/package.json +++ b/package.json @@ -48,46 +48,46 @@ }, "homepage": "https://github.com/js-tool-pack/basic#readme", "devDependencies": { - "@commitlint/cli": "^17.4.4", - "@commitlint/config-conventional": "^17.4.4", + "@commitlint/cli": "^17.6.1", + "@commitlint/config-conventional": "^17.6.1", "@microsoft/api-extractor": "^7.34.4", "@mxssfd/core": "5.0.1-beta.1", "@mxssfd/typedoc-theme": "^1.1.1", "@rollup/plugin-json": "^6.0.0", "@types/fs-extra": "^11.0.1", - "@types/jest": "^29.4.0", + "@types/jest": "^29.5.1", "@types/minimist": "^1.2.2", - "@types/node": "^18.15.0", + "@types/node": "^18.15.11", "@types/semver": "^7.3.13", - "@typescript-eslint/eslint-plugin": "^5.54.1", - "@typescript-eslint/parser": "^5.54.1", + "@typescript-eslint/eslint-plugin": "^5.59.0", + "@typescript-eslint/parser": "^5.59.0", "chalk": "^5.2.0", "conventional-changelog-cli": "^2.2.2", - "core-js": "^3.29.0", + "core-js": "^3.30.1", "enquirer": "^2.3.6", - "eslint": "^8.35.0", - "eslint-config-prettier": "^8.7.0", + "eslint": "^8.38.0", + "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^4.2.1", "esno": "^0.16.3", - "execa": "^7.0.0", - "fs-extra": "^11.1.0", + "execa": "^7.1.1", + "fs-extra": "^11.1.1", "gh-pages": "^5.0.0", "husky": "^8.0.3", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", - "lint-staged": "^13.1.2", + "lint-staged": "^13.2.1", "minimist": "^1.2.8", - "npm-check-updates": "^16.7.12", + "npm-check-updates": "^16.10.8", "npm-run-all": "^4.1.5", - "prettier": "^2.8.4", - "rimraf": "^4.4.0", - "rollup": "^3.19.0", + "prettier": "^2.8.7", + "rimraf": "^4.4.1", + "rollup": "^3.20.6", "rollup-plugin-terser": "^7.0.2", "rollup-plugin-typescript2": "^0.34.1", - "semver": "^7.3.8", - "ts-jest": "^29.0.5", + "semver": "^7.5.0", + "ts-jest": "^29.1.0", "tslib": "^2.5.0", - "typedoc": "^0.24.1", + "typedoc": "^0.24.4", "typescript": "^5.0.4" }, "files": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e97204c1..6a8a2b37 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,132 +1,132 @@ lockfileVersion: 5.4 specifiers: - '@commitlint/cli': ^17.4.4 - '@commitlint/config-conventional': ^17.4.4 + '@commitlint/cli': ^17.6.1 + '@commitlint/config-conventional': ^17.6.1 '@microsoft/api-extractor': ^7.34.4 '@mxssfd/core': 5.0.1-beta.1 '@mxssfd/typedoc-theme': ^1.1.1 '@rollup/plugin-json': ^6.0.0 - '@tool-pack/types': ^0.0.1 + '@tool-pack/types': ^0.0.2 '@types/fs-extra': ^11.0.1 - '@types/jest': ^29.4.0 + '@types/jest': ^29.5.1 '@types/minimist': ^1.2.2 - '@types/node': ^18.15.0 + '@types/node': ^18.15.11 '@types/semver': ^7.3.13 - '@typescript-eslint/eslint-plugin': ^5.54.1 - '@typescript-eslint/parser': ^5.54.1 + '@typescript-eslint/eslint-plugin': ^5.59.0 + '@typescript-eslint/parser': ^5.59.0 chalk: ^5.2.0 conventional-changelog-cli: ^2.2.2 - core-js: ^3.29.0 + core-js: ^3.30.1 enquirer: ^2.3.6 - eslint: ^8.35.0 - eslint-config-prettier: ^8.7.0 + eslint: ^8.38.0 + eslint-config-prettier: ^8.8.0 eslint-plugin-prettier: ^4.2.1 esno: ^0.16.3 - execa: ^7.0.0 - fs-extra: ^11.1.0 + execa: ^7.1.1 + fs-extra: ^11.1.1 gh-pages: ^5.0.0 husky: ^8.0.3 jest: ^29.5.0 jest-environment-jsdom: ^29.5.0 - lint-staged: ^13.1.2 + lint-staged: ^13.2.1 minimist: ^1.2.8 - npm-check-updates: ^16.7.12 + npm-check-updates: ^16.10.8 npm-run-all: ^4.1.5 - prettier: ^2.8.4 - rimraf: ^4.4.0 - rollup: ^3.19.0 + prettier: ^2.8.7 + rimraf: ^4.4.1 + rollup: ^3.20.6 rollup-plugin-terser: ^7.0.2 rollup-plugin-typescript2: ^0.34.1 - semver: ^7.3.8 - ts-jest: ^29.0.5 + semver: ^7.5.0 + ts-jest: ^29.1.0 tslib: ^2.5.0 - typedoc: ^0.24.1 - typescript: ^4.9.5 + typedoc: ^0.24.4 + typescript: ^5.0.4 dependencies: - '@tool-pack/types': 0.0.1 + '@tool-pack/types': 0.0.2 devDependencies: - '@commitlint/cli': 17.4.4 - '@commitlint/config-conventional': 17.4.4 - '@microsoft/api-extractor': 7.34.4_@types+node@18.15.0 + '@commitlint/cli': 17.6.1 + '@commitlint/config-conventional': 17.6.1 + '@microsoft/api-extractor': 7.34.4_@types+node@18.15.11 '@mxssfd/core': 5.0.1-beta.1 - '@mxssfd/typedoc-theme': 1.1.1_typedoc@0.24.1 - '@rollup/plugin-json': 6.0.0_rollup@3.19.0 + '@mxssfd/typedoc-theme': 1.1.1_typedoc@0.24.4 + '@rollup/plugin-json': 6.0.0_rollup@3.20.6 '@types/fs-extra': 11.0.1 - '@types/jest': 29.4.0 + '@types/jest': 29.5.1 '@types/minimist': 1.2.2 - '@types/node': 18.15.0 + '@types/node': 18.15.11 '@types/semver': 7.3.13 - '@typescript-eslint/eslint-plugin': 5.54.1_mlk7dnz565t663n4razh6a6v6i - '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu + '@typescript-eslint/eslint-plugin': 5.59.0_wsbkzerfphvgr4lle7vmeh64yi + '@typescript-eslint/parser': 5.59.0_voubu7prgxjfsfbgx5d4sqnwiy chalk: 5.2.0 conventional-changelog-cli: 2.2.2 - core-js: 3.29.0 + core-js: 3.30.1 enquirer: 2.3.6 - eslint: 8.35.0 - eslint-config-prettier: 8.7.0_eslint@8.35.0 - eslint-plugin-prettier: 4.2.1_xprnzp4ul2bcpmfe73av4voica + eslint: 8.38.0 + eslint-config-prettier: 8.8.0_eslint@8.38.0 + eslint-plugin-prettier: 4.2.1_mrzcadguhkbme6yx3ehduvsjxu esno: 0.16.3 - execa: 7.0.0 - fs-extra: 11.1.0 + execa: 7.1.1 + fs-extra: 11.1.1 gh-pages: 5.0.0 husky: 8.0.3 - jest: 29.5.0_@types+node@18.15.0 + jest: 29.5.0_@types+node@18.15.11 jest-environment-jsdom: 29.5.0 - lint-staged: 13.1.2_enquirer@2.3.6 + lint-staged: 13.2.1_enquirer@2.3.6 minimist: 1.2.8 - npm-check-updates: 16.7.12 + npm-check-updates: 16.10.8 npm-run-all: 4.1.5 - prettier: 2.8.4 - rimraf: 4.4.0 - rollup: 3.19.0 - rollup-plugin-terser: 7.0.2_rollup@3.19.0 - rollup-plugin-typescript2: 0.34.1_ieayrmpiqxgv5ae4n2ikmwkgsu - semver: 7.3.8 - ts-jest: 29.0.5_doipufordlnvh5g4adbwayvyvy + prettier: 2.8.7 + rimraf: 4.4.1 + rollup: 3.20.6 + rollup-plugin-terser: 7.0.2_rollup@3.20.6 + rollup-plugin-typescript2: 0.34.1_7z4wb4mnpapsgobacn7mivmt6i + semver: 7.5.0 + ts-jest: 29.1.0_tobmchb5uviuq5lwsinkw5fvje tslib: 2.5.0 - typedoc: 0.24.1_typescript@4.9.5 - typescript: 4.9.5 + typedoc: 0.24.4_typescript@5.0.4 + typescript: 5.0.4 packages: - /@ampproject/remapping/2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + /@ampproject/remapping/2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 dev: true - /@babel/code-frame/7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + /@babel/code-frame/7.21.4: + resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 dev: true - /@babel/compat-data/7.19.1: - resolution: {integrity: sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==} + /@babel/compat-data/7.21.4: + resolution: {integrity: sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.19.1: - resolution: {integrity: sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw==} + /@babel/core/7.21.4: + resolution: {integrity: sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.19.0 - '@babel/helper-compilation-targets': 7.19.1_@babel+core@7.19.1 - '@babel/helper-module-transforms': 7.19.0 - '@babel/helpers': 7.19.0 - '@babel/parser': 7.19.1 - '@babel/template': 7.18.10 - '@babel/traverse': 7.19.1 - '@babel/types': 7.19.0 - convert-source-map: 1.8.0 + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/helper-compilation-targets': 7.21.4_@babel+core@7.21.4 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helpers': 7.21.0 + '@babel/parser': 7.21.4 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 + convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 @@ -135,25 +135,27 @@ packages: - supports-color dev: true - /@babel/generator/7.19.0: - resolution: {integrity: sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==} + /@babel/generator/7.21.4: + resolution: {integrity: sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.0 - '@jridgewell/gen-mapping': 0.3.2 + '@babel/types': 7.21.4 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 dev: true - /@babel/helper-compilation-targets/7.19.1_@babel+core@7.19.1: - resolution: {integrity: sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==} + /@babel/helper-compilation-targets/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.19.1 - '@babel/core': 7.19.1 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 + '@babel/compat-data': 7.21.4 + '@babel/core': 7.21.4 + '@babel/helper-validator-option': 7.21.0 + browserslist: 4.21.5 + lru-cache: 5.1.1 semver: 6.3.0 dev: true @@ -162,65 +164,65 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-function-name/7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + /@babel/helper-function-name/7.21.0: + resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.19.0 + '@babel/template': 7.20.7 + '@babel/types': 7.21.4 dev: true /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.0 + '@babel/types': 7.21.4 dev: true - /@babel/helper-module-imports/7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + /@babel/helper-module-imports/7.21.4: + resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.0 + '@babel/types': 7.21.4 dev: true - /@babel/helper-module-transforms/7.19.0: - resolution: {integrity: sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==} + /@babel/helper-module-transforms/7.21.2: + resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.18.6 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-simple-access': 7.20.2 '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.18.10 - '@babel/traverse': 7.19.1 - '@babel/types': 7.19.0 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-plugin-utils/7.19.0: - resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==} + /@babel/helper-plugin-utils/7.20.2: + resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-simple-access/7.18.6: - resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==} + /@babel/helper-simple-access/7.20.2: + resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.0 + '@babel/types': 7.21.4 dev: true /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.0 + '@babel/types': 7.21.4 dev: true - /@babel/helper-string-parser/7.18.10: - resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} dev: true @@ -229,18 +231,18 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option/7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + /@babel/helper-validator-option/7.21.0: + resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helpers/7.19.0: - resolution: {integrity: sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==} + /@babel/helpers/7.21.0: + resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/traverse': 7.19.1 - '@babel/types': 7.19.0 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 transitivePeerDependencies: - supports-color dev: true @@ -254,175 +256,175 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser/7.19.1: - resolution: {integrity: sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==} + /@babel/parser/7.21.4: + resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.19.0 + '@babel/types': 7.21.4 dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.19.1: + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.21.4: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.19.1: + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.19.1: + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.21.4: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.19.1: + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.21.4: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.19.1: + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.1: - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + /@babel/plugin-syntax-jsx/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.19.1: + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.21.4: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.19.1: + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.19.1: + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.21.4: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.19.1: + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.19.1: + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.19.1: + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.21.4: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.19.1: + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.21.4: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript/7.18.6_@babel+core@7.19.1: - resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} + /@babel/plugin-syntax-typescript/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.19.1 - '@babel/helper-plugin-utils': 7.19.0 + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/template/7.18.10: - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + /@babel/template/7.20.7: + resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.19.1 - '@babel/types': 7.19.0 + '@babel/code-frame': 7.21.4 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 dev: true - /@babel/traverse/7.19.1: - resolution: {integrity: sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==} + /@babel/traverse/7.21.4: + resolution: {integrity: sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.19.0 + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.4 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.21.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.19.1 - '@babel/types': 7.19.0 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.19.0: - resolution: {integrity: sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==} + /@babel/types/7.21.4: + resolution: {integrity: sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.18.10 + '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 dev: true @@ -431,28 +433,35 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@commitlint/cli/17.4.4: - resolution: {integrity: sha512-HwKlD7CPVMVGTAeFZylVNy14Vm5POVY0WxPkZr7EXLC/os0LH/obs6z4HRvJtH/nHCMYBvUBQhGwnufKfTjd5g==} + /@colors/colors/1.5.0: + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + requiresBuild: true + dev: true + optional: true + + /@commitlint/cli/17.6.1: + resolution: {integrity: sha512-kCnDD9LE2ySiTnj/VPaxy4/oRayRcdv4aCuVxtoum8SxIU7OADHc0nJPQfheE8bHcs3zZdWzDMWltRosuT13bg==} engines: {node: '>=v14'} hasBin: true dependencies: '@commitlint/format': 17.4.4 - '@commitlint/lint': 17.4.4 - '@commitlint/load': 17.4.4 - '@commitlint/read': 17.4.4 + '@commitlint/lint': 17.6.1 + '@commitlint/load': 17.5.0 + '@commitlint/read': 17.5.1 '@commitlint/types': 17.4.4 execa: 5.1.1 lodash.isfunction: 3.0.9 resolve-from: 5.0.0 resolve-global: 1.0.0 - yargs: 17.5.1 + yargs: 17.7.1 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /@commitlint/config-conventional/17.4.4: - resolution: {integrity: sha512-u6ztvxqzi6NuhrcEDR7a+z0yrh11elY66nRrQIpqsqW6sZmpxYkDLtpRH8jRML+mmxYQ8s4qqF06Q/IQx5aJeQ==} + /@commitlint/config-conventional/17.6.1: + resolution: {integrity: sha512-ng/ybaSLuTCH9F+7uavSOnEQ9EFMl7lHEjfAEgRh1hwmEe8SpLKpQeMo2aT1IWvHaGMuTb+gjfbzoRf2IR23NQ==} engines: {node: '>=v14'} dependencies: conventional-changelog-conventionalcommits: 5.0.0 @@ -463,7 +472,7 @@ packages: engines: {node: '>=v14'} dependencies: '@commitlint/types': 17.4.4 - ajv: 8.11.0 + ajv: 8.12.0 dev: true /@commitlint/ensure/17.4.4: @@ -499,34 +508,34 @@ packages: semver: 7.3.8 dev: true - /@commitlint/lint/17.4.4: - resolution: {integrity: sha512-qgkCRRFjyhbMDWsti/5jRYVJkgYZj4r+ZmweZObnbYqPUl5UKLWMf9a/ZZisOI4JfiPmRktYRZ2JmqlSvg+ccw==} + /@commitlint/lint/17.6.1: + resolution: {integrity: sha512-VARJ9kxH64isgwVnC+ABPafCYzqxpsWJIpDaTuI0gh8aX4GQ0i7cn9tvxtFNfJj4ER2BAJeWJ0vURdNYjK2RQQ==} engines: {node: '>=v14'} dependencies: '@commitlint/is-ignored': 17.4.4 '@commitlint/parse': 17.4.4 - '@commitlint/rules': 17.4.4 + '@commitlint/rules': 17.6.1 '@commitlint/types': 17.4.4 dev: true - /@commitlint/load/17.4.4: - resolution: {integrity: sha512-z6uFIQ7wfKX5FGBe1AkOF4l/ShOQsaa1ml/nLMkbW7R/xF8galGS7Zh0yHvzVp/srtfS0brC+0bUfQfmpMPFVQ==} + /@commitlint/load/17.5.0: + resolution: {integrity: sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==} engines: {node: '>=v14'} dependencies: '@commitlint/config-validator': 17.4.4 '@commitlint/execute-rule': 17.4.0 '@commitlint/resolve-extends': 17.4.4 '@commitlint/types': 17.4.4 - '@types/node': 18.15.0 + '@types/node': 18.15.11 chalk: 4.1.2 - cosmiconfig: 8.1.0 - cosmiconfig-typescript-loader: 4.1.0_lmcvhluzh3a7wwwkanu7ndhele + cosmiconfig: 8.1.3 + cosmiconfig-typescript-loader: 4.3.0_zulaepqzabcjiyzbkdbfeduf6u lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1_lwgqdwokjtwlohdqtbb6s252kq - typescript: 4.9.5 + ts-node: 10.9.1_bhanhq442dy43ncydsavgi4jfi + typescript: 5.0.4 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -546,13 +555,13 @@ packages: conventional-commits-parser: 3.2.4 dev: true - /@commitlint/read/17.4.4: - resolution: {integrity: sha512-B2TvUMJKK+Svzs6eji23WXsRJ8PAD+orI44lVuVNsm5zmI7O8RSGJMvdEZEikiA4Vohfb+HevaPoWZ7PiFZ3zA==} + /@commitlint/read/17.5.1: + resolution: {integrity: sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==} engines: {node: '>=v14'} dependencies: '@commitlint/top-level': 17.4.0 '@commitlint/types': 17.4.4 - fs-extra: 11.1.0 + fs-extra: 11.1.1 git-raw-commits: 2.0.11 minimist: 1.2.8 dev: true @@ -569,8 +578,8 @@ packages: resolve-global: 1.0.0 dev: true - /@commitlint/rules/17.4.4: - resolution: {integrity: sha512-0tgvXnHi/mVcyR8Y8mjTFZIa/FEQXA4uEutXS/imH2v1UNkYDSEMsK/68wiXRpfW1euSgEdwRkvE1z23+yhNrQ==} + /@commitlint/rules/17.6.1: + resolution: {integrity: sha512-lUdHw6lYQ1RywExXDdLOKxhpp6857/4c95Dc/1BikrHgdysVUXz26yV0vp1GL7Gv+avx9WqZWTIVB7pNouxlfw==} engines: {node: '>=v14'} dependencies: '@commitlint/ensure': 17.4.4 @@ -606,29 +615,29 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@esbuild-kit/cjs-loader/2.4.1: - resolution: {integrity: sha512-lhc/XLith28QdW0HpHZvZKkorWgmCNT7sVelMHDj3HFdTfdqkwEKvT+aXVQtNAmCC39VJhunDkWhONWB7335mg==} + /@esbuild-kit/cjs-loader/2.4.2: + resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} dependencies: - '@esbuild-kit/core-utils': 3.0.0 - get-tsconfig: 4.2.0 + '@esbuild-kit/core-utils': 3.1.0 + get-tsconfig: 4.5.0 dev: true - /@esbuild-kit/core-utils/3.0.0: - resolution: {integrity: sha512-TXmwH9EFS3DC2sI2YJWJBgHGhlteK0Xyu1VabwetMULfm3oYhbrsWV5yaSr2NTWZIgDGVLHbRf0inxbjXqAcmQ==} + /@esbuild-kit/core-utils/3.1.0: + resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==} dependencies: - esbuild: 0.15.15 + esbuild: 0.17.17 source-map-support: 0.5.21 dev: true - /@esbuild-kit/esm-loader/2.5.1: - resolution: {integrity: sha512-UfG/KLaNGR48+C9e8cDrRowhN9u+d/aCKpnA3E3Zyevup76fIpKmzm8DWeNG40CbEN8ZN8HaEs+o63pRQrZ+Fw==} + /@esbuild-kit/esm-loader/2.5.5: + resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==} dependencies: - '@esbuild-kit/core-utils': 3.0.0 - get-tsconfig: 4.2.0 + '@esbuild-kit/core-utils': 3.1.0 + get-tsconfig: 4.5.0 dev: true - /@esbuild/android-arm/0.15.15: - resolution: {integrity: sha512-JJjZjJi2eBL01QJuWjfCdZxcIgot+VoK6Fq7eKF9w4YHm9hwl7nhBR1o2Wnt/WcANk5l9SkpvrldW1PLuXxcbw==} + /@esbuild/android-arm/0.17.17: + resolution: {integrity: sha512-E6VAZwN7diCa3labs0GYvhEPL2M94WLF8A+czO8hfjREXxba8Ng7nM5VxV+9ihNXIY1iQO1XxUU4P7hbqbICxg==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -636,8 +645,89 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.15.15: - resolution: {integrity: sha512-lhz6UNPMDXUhtXSulw8XlFAtSYO26WmHQnCi2Lg2p+/TMiJKNLtZCYUxV4wG6rZMzXmr8InGpNwk+DLT2Hm0PA==} + /@esbuild/android-arm64/0.17.17: + resolution: {integrity: sha512-jaJ5IlmaDLFPNttv0ofcwy/cfeY4bh/n705Tgh+eLObbGtQBK3EPAu+CzL95JVE4nFAliyrnEu0d32Q5foavqg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64/0.17.17: + resolution: {integrity: sha512-446zpfJ3nioMC7ASvJB1pszHVskkw4u/9Eu8s5yvvsSDTzYh4p4ZIRj0DznSl3FBF0Z/mZfrKXTtt0QCoFmoHA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64/0.17.17: + resolution: {integrity: sha512-m/gwyiBwH3jqfUabtq3GH31otL/0sE0l34XKpSIqR7NjQ/XHQ3lpmQHLHbG8AHTGCw8Ao059GvV08MS0bhFIJQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64/0.17.17: + resolution: {integrity: sha512-4utIrsX9IykrqYaXR8ob9Ha2hAY2qLc6ohJ8c0CN1DR8yWeMrTgYFjgdeQ9LIoTOfLetXjuCu5TRPHT9yKYJVg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64/0.17.17: + resolution: {integrity: sha512-4PxjQII/9ppOrpEwzQ1b0pXCsFLqy77i0GaHodrmzH9zq2/NEhHMAMJkJ635Ns4fyJPFOlHMz4AsklIyRqFZWA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64/0.17.17: + resolution: {integrity: sha512-lQRS+4sW5S3P1sv0z2Ym807qMDfkmdhUYX30GRBURtLTrJOPDpoU0kI6pVz1hz3U0+YQ0tXGS9YWveQjUewAJw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm/0.17.17: + resolution: {integrity: sha512-biDs7bjGdOdcmIk6xU426VgdRUpGg39Yz6sT9Xp23aq+IEHDb/u5cbmu/pAANpDB4rZpY/2USPhCA+w9t3roQg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64/0.17.17: + resolution: {integrity: sha512-2+pwLx0whKY1/Vqt8lyzStyda1v0qjJ5INWIe+d8+1onqQxHLLi3yr5bAa4gvbzhZqBztifYEu8hh1La5+7sUw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32/0.17.17: + resolution: {integrity: sha512-IBTTv8X60dYo6P2t23sSUYym8fGfMAiuv7PzJ+0LcdAndZRzvke+wTVxJeCq4WgjppkOpndL04gMZIFvwoU34Q==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.17.17: + resolution: {integrity: sha512-WVMBtcDpATjaGfWfp6u9dANIqmU9r37SY8wgAivuKmgKHE+bWSuv0qXEFt/p3qXQYxJIGXQQv6hHcm7iWhWjiw==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -645,15 +735,129 @@ packages: dev: true optional: true - /@eslint/eslintrc/2.0.0: - resolution: {integrity: sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==} + /@esbuild/linux-mips64el/0.17.17: + resolution: {integrity: sha512-2kYCGh8589ZYnY031FgMLy0kmE4VoGdvfJkxLdxP4HJvWNXpyLhjOvxVsYjYZ6awqY4bgLR9tpdYyStgZZhi2A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64/0.17.17: + resolution: {integrity: sha512-KIdG5jdAEeAKogfyMTcszRxy3OPbZhq0PPsW4iKKcdlbk3YE4miKznxV2YOSmiK/hfOZ+lqHri3v8eecT2ATwQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64/0.17.17: + resolution: {integrity: sha512-Cj6uWLBR5LWhcD/2Lkfg2NrkVsNb2sFM5aVEfumKB2vYetkA/9Uyc1jVoxLZ0a38sUhFk4JOVKH0aVdPbjZQeA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x/0.17.17: + resolution: {integrity: sha512-lK+SffWIr0XsFf7E0srBjhpkdFVJf3HEgXCwzkm69kNbRar8MhezFpkIwpk0qo2IOQL4JE4mJPJI8AbRPLbuOQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64/0.17.17: + resolution: {integrity: sha512-XcSGTQcWFQS2jx3lZtQi7cQmDYLrpLRyz1Ns1DzZCtn898cWfm5Icx/DEWNcTU+T+tyPV89RQtDnI7qL2PObPg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64/0.17.17: + resolution: {integrity: sha512-RNLCDmLP5kCWAJR+ItLM3cHxzXRTe4N00TQyQiimq+lyqVqZWGPAvcyfUBM0isE79eEZhIuGN09rAz8EL5KdLA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64/0.17.17: + resolution: {integrity: sha512-PAXswI5+cQq3Pann7FNdcpSUrhrql3wKjj3gVkmuz6OHhqqYxKvi6GgRBoaHjaG22HV/ZZEgF9TlS+9ftHVigA==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64/0.17.17: + resolution: {integrity: sha512-V63egsWKnx/4V0FMYkr9NXWrKTB5qFftKGKuZKFIrAkO/7EWLFnbBZNM1CvJ6Sis+XBdPws2YQSHF1Gqf1oj/Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64/0.17.17: + resolution: {integrity: sha512-YtUXLdVnd6YBSYlZODjWzH+KzbaubV0YVd6UxSfoFfa5PtNJNaW+1i+Hcmjpg2nEe0YXUCNF5bkKy1NnBv1y7Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32/0.17.17: + resolution: {integrity: sha512-yczSLRbDdReCO74Yfc5tKG0izzm+lPMYyO1fFTcn0QNwnKmc3K+HdxZWLGKg4pZVte7XVgcFku7TIZNbWEJdeQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64/0.17.17: + resolution: {integrity: sha512-FNZw7H3aqhF9OyRQbDDnzUApDXfC1N6fgBhkqEO2jvYCJ+DxMTfZVqg3AX0R1khg1wHTBRD5SdcibSJ+XF6bFg==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils/4.4.0_eslint@8.38.0: + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.38.0 + eslint-visitor-keys: 3.4.0 + dev: true + + /@eslint-community/regexpp/4.5.0: + resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc/2.0.2: + resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.4.0 + espree: 9.5.1 globals: 13.20.0 - ignore: 5.2.0 + ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -662,8 +866,8 @@ packages: - supports-color dev: true - /@eslint/js/8.35.0: - resolution: {integrity: sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==} + /@eslint/js/8.38.0: + resolution: {integrity: sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -717,7 +921,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 @@ -738,14 +942,14 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.4.0 + ci-info: 3.8.0 exit: 0.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0_@types+node@18.15.0 + jest-config: 29.5.0_@types+node@18.15.11 jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -772,17 +976,10 @@ packages: dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 jest-mock: 29.5.0 dev: true - /@jest/expect-utils/29.3.1: - resolution: {integrity: sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.2.0 - dev: true - /@jest/expect-utils/29.5.0: resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -806,7 +1003,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.15.0 + '@types/node': 18.15.11 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -838,15 +1035,15 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.15 - '@types/node': 18.15.0 + '@jridgewell/trace-mapping': 0.3.18 + '@types/node': 18.15.11 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 5.2.0 + istanbul-lib-instrument: 5.2.1 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 @@ -856,18 +1053,11 @@ packages: slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.0.1 + v8-to-istanbul: 9.1.0 transitivePeerDependencies: - supports-color dev: true - /@jest/schemas/29.0.0: - resolution: {integrity: sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.24.43 - dev: true - /@jest/schemas/29.4.3: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -879,9 +1069,9 @@ packages: resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/trace-mapping': 0.3.18 callsites: 3.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /@jest/test-result/29.5.0: @@ -899,7 +1089,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/test-result': 29.5.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.5.0 slash: 3.0.0 dev: true @@ -908,14 +1098,14 @@ packages: resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.19.1 + '@babel/core': 7.21.4 '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/trace-mapping': 0.3.18 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.5.0 jest-regex-util: 29.4.3 jest-util: 29.5.0 @@ -927,18 +1117,6 @@ packages: - supports-color dev: true - /@jest/types/29.4.3: - resolution: {integrity: sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.4.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.0 - '@types/yargs': 17.0.13 - chalk: 4.1.2 - dev: true - /@jest/types/29.5.0: resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -946,30 +1124,27 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.0 - '@types/yargs': 17.0.13 + '@types/node': 18.15.11 + '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true - /@jridgewell/gen-mapping/0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + /@jridgewell/gen-mapping/0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 dev: true - /@jridgewell/gen-mapping/0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.15 dev: true - /@jridgewell/resolve-uri/3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + /@jridgewell/resolve-uri/3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} dev: true @@ -978,19 +1153,23 @@ packages: engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map/0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + /@jridgewell/source-map/0.3.3: + resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 dev: true /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/trace-mapping/0.3.15: - resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==} + /@jridgewell/sourcemap-codec/1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping/0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 @@ -999,33 +1178,33 @@ packages: /@jridgewell/trace-mapping/0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@microsoft/api-extractor-model/7.26.4_@types+node@18.15.0: + /@microsoft/api-extractor-model/7.26.4_@types+node@18.15.11: resolution: {integrity: sha512-PDCgCzXDo+SLY5bsfl4bS7hxaeEtnXj7XtuzEE+BtALp7B5mK/NrS2kHWU69pohgsRmEALycQdaQPXoyT2i5MQ==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.55.2_@types+node@18.15.0 + '@rushstack/node-core-library': 3.55.2_@types+node@18.15.11 transitivePeerDependencies: - '@types/node' dev: true - /@microsoft/api-extractor/7.34.4_@types+node@18.15.0: + /@microsoft/api-extractor/7.34.4_@types+node@18.15.11: resolution: {integrity: sha512-HOdcci2nT40ejhwPC3Xja9G+WSJmWhCUKKryRfQYsmE9cD+pxmBaKBKCbuS9jUcl6bLLb4Gz+h7xEN5r0QiXnQ==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.26.4_@types+node@18.15.0 + '@microsoft/api-extractor-model': 7.26.4_@types+node@18.15.11 '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.55.2_@types+node@18.15.0 + '@rushstack/node-core-library': 3.55.2_@types+node@18.15.11 '@rushstack/rig-package': 0.3.18 '@rushstack/ts-command-line': 4.13.2 colors: 1.2.5 lodash: 4.17.21 - resolve: 1.22.1 + resolve: 1.22.2 semver: 7.3.8 source-map: 0.6.1 typescript: 4.8.4 @@ -1052,13 +1231,13 @@ packages: '@mxssfd/types': 5.0.1-beta.1 dev: true - /@mxssfd/typedoc-theme/1.1.1_typedoc@0.24.1: + /@mxssfd/typedoc-theme/1.1.1_typedoc@0.24.4: resolution: {integrity: sha512-XhXy2MDoMJFeHgbE0cTxpB3K8AizQMJcm6gvf9lqNwfN6+ZfDnmIZub6lCuDgpL0O0fvckKTq7fGSP6XIU/17Q==} engines: {node: '>= 14'} peerDependencies: typedoc: ^0.24.1 dependencies: - typedoc: 0.24.1_typescript@4.9.5 + typedoc: 0.24.4_typescript@5.0.4 dev: true /@mxssfd/types/5.0.1-beta.1: @@ -1083,7 +1262,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 + fastq: 1.15.0 dev: true /@npmcli/fs/2.1.2: @@ -1091,35 +1270,34 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: '@gar/promisify': 1.1.3 - semver: 7.3.8 + semver: 7.5.0 dev: true /@npmcli/fs/3.1.0: resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.3.8 + semver: 7.5.0 dev: true - /@npmcli/git/4.0.3: - resolution: {integrity: sha512-8cXNkDIbnXPVbhXMmQ7/bklCAjtmPaXfI9aEM4iH+xSuEHINLMHhlfESvVwdqmHJRJkR48vNJTSUvoF6GRPSFA==} + /@npmcli/git/4.0.4: + resolution: {integrity: sha512-5yZghx+u5M47LghaybLCkdSyFzV/w4OuH12d96HO389Ik9CDsLaDZJVynSGGVJOLn6gy/k7Dz5XYcplM3uxXRg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - '@npmcli/promise-spawn': 6.0.1 + '@npmcli/promise-spawn': 6.0.2 lru-cache: 7.18.3 - mkdirp: 1.0.4 npm-pick-manifest: 8.0.1 proc-log: 3.0.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.3.8 + semver: 7.5.0 which: 3.0.0 transitivePeerDependencies: - bluebird dev: true - /@npmcli/installed-package-contents/2.0.1: - resolution: {integrity: sha512-GIykAFdOVK31Q1/zAtT5MbxqQL2vyl9mvFJv+OGu01zxbhL3p0xc8gJjdNGX1mWmUT43aEKVO2L6V/2j4TOsAA==} + /@npmcli/installed-package-contents/2.0.2: + resolution: {integrity: sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true dependencies: @@ -1141,8 +1319,8 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /@npmcli/promise-spawn/6.0.1: - resolution: {integrity: sha512-+hcUpxgx0vEpDJI9Cn+lkTdKLoqKBXFCVps5H7FujEU2vLOp6KwqjLlxbnz8Wzgm8oEqW/u5FeNAXSFjLdCD0A==} + /@npmcli/promise-spawn/6.0.2: + resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: which: 3.0.0 @@ -1153,31 +1331,37 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@npmcli/node-gyp': 3.0.0 - '@npmcli/promise-spawn': 6.0.1 - node-gyp: 9.1.0 - read-package-json-fast: 3.0.1 + '@npmcli/promise-spawn': 6.0.2 + node-gyp: 9.3.1 + read-package-json-fast: 3.0.2 which: 3.0.0 transitivePeerDependencies: - bluebird - supports-color dev: true - /@pnpm/network.ca-file/1.0.1: - resolution: {integrity: sha512-gkINruT2KUhZLTaiHxwCOh1O4NVnFT0wLjWFBHmTz9vpKag/C/noIMJXBxFe4F0mYpUVX2puLwAieLYFg2NvoA==} + /@pnpm/config.env-replace/1.1.0: + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + dev: true + + /@pnpm/network.ca-file/1.0.2: + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} engines: {node: '>=12.22.0'} dependencies: graceful-fs: 4.2.10 dev: true - /@pnpm/npm-conf/1.0.5: - resolution: {integrity: sha512-hD8ml183638O3R6/Txrh0L8VzGOrFXgRtRDG4qQC4tONdZ5Z1M+tlUUDUvrjYdmK6G+JTBTeaCLMna11cXzi8A==} + /@pnpm/npm-conf/2.1.1: + resolution: {integrity: sha512-yfRcuupmxxeDOSxvw4g+wFCrGiPD0L32f5WMzqMXp7Rl93EOCdFiDcaSNnZ10Up9GdNqkj70UTa8hfhPFphaZA==} engines: {node: '>=12'} dependencies: - '@pnpm/network.ca-file': 1.0.1 + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 dev: true - /@rollup/plugin-json/6.0.0_rollup@3.19.0: + /@rollup/plugin-json/6.0.0_rollup@3.20.6: resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1186,8 +1370,8 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.19.0 - rollup: 3.19.0 + '@rollup/pluginutils': 5.0.2_rollup@3.20.6 + rollup: 3.20.6 dev: true /@rollup/pluginutils/4.2.1: @@ -1198,7 +1382,7 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/pluginutils/5.0.2_rollup@3.19.0: + /@rollup/pluginutils/5.0.2_rollup@3.20.6: resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1207,13 +1391,13 @@ packages: rollup: optional: true dependencies: - '@types/estree': 1.0.0 + '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.19.0 + rollup: 3.20.6 dev: true - /@rushstack/node-core-library/3.55.2_@types+node@18.15.0: + /@rushstack/node-core-library/3.55.2_@types+node@18.15.11: resolution: {integrity: sha512-SaLe/x/Q/uBVdNFK5V1xXvsVps0y7h1sN7aSJllQyFbugyOaxhNRF25bwEDnicARNEjJw0pk0lYnJQ9Kr6ev0A==} peerDependencies: '@types/node': '*' @@ -1221,20 +1405,20 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 colors: 1.2.5 fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.1 + resolve: 1.22.2 semver: 7.3.8 - z-schema: 5.0.4 + z-schema: 5.0.5 dev: true /@rushstack/rig-package/0.3.18: resolution: {integrity: sha512-SGEwNTwNq9bI3pkdd01yCaH+gAsHqs0uxfGvtw9b0LJXH52qooWXnrFTRRLG1aL9pf+M2CARdrA9HLHJys3jiQ==} dependencies: - resolve: 1.22.1 + resolve: 1.22.2 strip-json-comments: 3.1.1 dev: true @@ -1247,8 +1431,9 @@ packages: string-argv: 0.3.1 dev: true - /@sinclair/typebox/0.24.43: - resolution: {integrity: sha512-1orQTvtazZmsPeBroJjysvsOQCYV2yjWlebkSY38pl5vr2tdLjEJ+LoxITlGNZaH2RE19WlAwQMkH/7C14wLfw==} + /@sigstore/protobuf-specs/0.1.0: + resolution: {integrity: sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true /@sinclair/typebox/0.25.24: @@ -1279,8 +1464,8 @@ packages: defer-to-connect: 2.0.1 dev: true - /@tool-pack/types/0.0.1: - resolution: {integrity: sha512-PuOKplXpssrNTTj5UPEvRSSVlWT5T4Pt7WtgPpazAlFynY8FZFofLJlOmsQMXlmdZmS1P9yKHCZECNgOoPCbeA==} + /@tool-pack/types/0.0.2: + resolution: {integrity: sha512-cbhzF9gkLZ4Xe9YmBqx8szLlFSQznELcWrAEe1mFA4D/lW7c7K78FH2v60K1Zib0tRMZ1cZfJMd4lJlh12/G9A==} dev: false /@tootallnate/once/2.0.0: @@ -1304,54 +1489,71 @@ packages: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true + /@tufjs/canonical-json/1.0.0: + resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /@tufjs/models/1.0.3: + resolution: {integrity: sha512-mkFEqqRisi13DmR5pX4x+Zk97EiU8djTtpNW1GeuX410y/raAsq/T3ZCjwoRIZ8/cIBfW0olK/sywlAiWevDVw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@tufjs/canonical-json': 1.0.0 + minimatch: 7.4.6 + dev: true + /@types/argparse/1.0.38: resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} dev: true - /@types/babel__core/7.1.19: - resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==} + /@types/babel__core/7.20.0: + resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.19.1 - '@babel/types': 7.19.0 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.18.2 + '@types/babel__traverse': 7.18.3 dev: true /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.19.0 + '@babel/types': 7.21.4 dev: true /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.19.1 - '@babel/types': 7.19.0 + '@babel/parser': 7.21.4 + '@babel/types': 7.21.4 dev: true - /@types/babel__traverse/7.18.2: - resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==} + /@types/babel__traverse/7.18.3: + resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.19.0 + '@babel/types': 7.21.4 dev: true - /@types/estree/1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + /@types/estree/1.0.1: + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true /@types/fs-extra/11.0.1: resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==} dependencies: '@types/jsonfile': 6.1.1 - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true - /@types/graceful-fs/4.1.5: - resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} + /@types/graceful-fs/4.1.6: + resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 + dev: true + + /@types/http-cache-semantics/4.0.1: + resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} dev: true /@types/istanbul-lib-coverage/2.0.4: @@ -1370,19 +1572,19 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest/29.4.0: - resolution: {integrity: sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==} + /@types/jest/29.5.1: + resolution: {integrity: sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==} dependencies: - expect: 29.3.1 - pretty-format: 29.3.1 + expect: 29.5.0 + pretty-format: 29.5.0 dev: true - /@types/jsdom/20.0.0: - resolution: {integrity: sha512-YfAchFs0yM1QPDrLm2VHe+WHGtqms3NXnXAMolrgrVP6fgBHHXy1ozAbo/dFtPNtZC/m66bPiCTWYmqp1F14gA==} + /@types/jsdom/20.0.1: + resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 '@types/tough-cookie': 4.0.2 - parse5: 7.1.1 + parse5: 7.1.2 dev: true /@types/json-schema/7.0.11: @@ -1392,23 +1594,23 @@ packages: /@types/jsonfile/6.1.1: resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 dev: true /@types/minimist/1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/node/18.15.0: - resolution: {integrity: sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w==} + /@types/node/18.15.11: + resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} dev: true /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/prettier/2.7.1: - resolution: {integrity: sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==} + /@types/prettier/2.7.2: + resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true /@types/semver/7.3.13: @@ -1427,14 +1629,14 @@ packages: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs/17.0.13: - resolution: {integrity: sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==} + /@types/yargs/17.0.24: + resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/5.54.1_mlk7dnz565t663n4razh6a6v6i: - resolution: {integrity: sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==} + /@typescript-eslint/eslint-plugin/5.59.0_wsbkzerfphvgr4lle7vmeh64yi: + resolution: {integrity: sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -1444,25 +1646,25 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu - '@typescript-eslint/scope-manager': 5.54.1 - '@typescript-eslint/type-utils': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu - '@typescript-eslint/utils': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu + '@eslint-community/regexpp': 4.5.0 + '@typescript-eslint/parser': 5.59.0_voubu7prgxjfsfbgx5d4sqnwiy + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/type-utils': 5.59.0_voubu7prgxjfsfbgx5d4sqnwiy + '@typescript-eslint/utils': 5.59.0_voubu7prgxjfsfbgx5d4sqnwiy debug: 4.3.4 - eslint: 8.35.0 + eslint: 8.38.0 grapheme-splitter: 1.0.4 - ignore: 5.2.0 + ignore: 5.2.4 natural-compare-lite: 1.4.0 - regexpp: 3.2.0 - semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.5 - typescript: 4.9.5 + semver: 7.5.0 + tsutils: 3.21.0_typescript@5.0.4 + typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.54.1_ycpbpc6yetojsgtrx3mwntkhsu: - resolution: {integrity: sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==} + /@typescript-eslint/parser/5.59.0_voubu7prgxjfsfbgx5d4sqnwiy: + resolution: {integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1471,26 +1673,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.54.1 - '@typescript-eslint/types': 5.54.1 - '@typescript-eslint/typescript-estree': 5.54.1_typescript@4.9.5 + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/typescript-estree': 5.59.0_typescript@5.0.4 debug: 4.3.4 - eslint: 8.35.0 - typescript: 4.9.5 + eslint: 8.38.0 + typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.54.1: - resolution: {integrity: sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==} + /@typescript-eslint/scope-manager/5.59.0: + resolution: {integrity: sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.54.1 - '@typescript-eslint/visitor-keys': 5.54.1 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/visitor-keys': 5.59.0 dev: true - /@typescript-eslint/type-utils/5.54.1_ycpbpc6yetojsgtrx3mwntkhsu: - resolution: {integrity: sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==} + /@typescript-eslint/type-utils/5.59.0_voubu7prgxjfsfbgx5d4sqnwiy: + resolution: {integrity: sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -1499,23 +1701,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.54.1_typescript@4.9.5 - '@typescript-eslint/utils': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu + '@typescript-eslint/typescript-estree': 5.59.0_typescript@5.0.4 + '@typescript-eslint/utils': 5.59.0_voubu7prgxjfsfbgx5d4sqnwiy debug: 4.3.4 - eslint: 8.35.0 - tsutils: 3.21.0_typescript@4.9.5 - typescript: 4.9.5 + eslint: 8.38.0 + tsutils: 3.21.0_typescript@5.0.4 + typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.54.1: - resolution: {integrity: sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==} + /@typescript-eslint/types/5.59.0: + resolution: {integrity: sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.54.1_typescript@4.9.5: - resolution: {integrity: sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==} + /@typescript-eslint/typescript-estree/5.59.0_typescript@5.0.4: + resolution: {integrity: sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1523,44 +1725,44 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.54.1 - '@typescript-eslint/visitor-keys': 5.54.1 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/visitor-keys': 5.59.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.5 - typescript: 4.9.5 + semver: 7.5.0 + tsutils: 3.21.0_typescript@5.0.4 + typescript: 5.0.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/5.54.1_ycpbpc6yetojsgtrx3mwntkhsu: - resolution: {integrity: sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==} + /@typescript-eslint/utils/5.59.0_voubu7prgxjfsfbgx5d4sqnwiy: + resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.38.0 '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.54.1 - '@typescript-eslint/types': 5.54.1 - '@typescript-eslint/typescript-estree': 5.54.1_typescript@4.9.5 - eslint: 8.35.0 + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/typescript-estree': 5.59.0_typescript@5.0.4 + eslint: 8.38.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.35.0 - semver: 7.3.8 + semver: 7.5.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.54.1: - resolution: {integrity: sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==} + /@typescript-eslint/visitor-keys/5.59.0: + resolution: {integrity: sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.54.1 - eslint-visitor-keys: 3.3.0 + '@typescript-eslint/types': 5.59.0 + eslint-visitor-keys: 3.4.0 dev: true /JSONStream/1.3.5: @@ -1579,24 +1781,19 @@ packages: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true - /acorn-globals/6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + /acorn-globals/7.0.1: + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 + acorn: 8.8.2 + acorn-walk: 8.2.0 dev: true - /acorn-jsx/5.3.2_acorn@8.8.0: + /acorn-jsx/5.3.2_acorn@8.8.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.0 - dev: true - - /acorn-walk/7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} + acorn: 8.8.2 dev: true /acorn-walk/8.2.0: @@ -1604,14 +1801,8 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn/7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /acorn/8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} + /acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -1629,12 +1820,12 @@ packages: - supports-color dev: true - /agentkeepalive/4.2.1: - resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==} + /agentkeepalive/4.3.0: + resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} engines: {node: '>= 8.0.0'} dependencies: debug: 4.3.4 - depd: 1.1.2 + depd: 2.0.0 humanize-ms: 1.2.1 transitivePeerDependencies: - supports-color @@ -1657,8 +1848,8 @@ packages: uri-js: 4.4.1 dev: true - /ajv/8.11.0: - resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} + /ajv/8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -1717,13 +1908,13 @@ packages: engines: {node: '>=10'} dev: true - /ansi-styles/6.1.1: - resolution: {integrity: sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==} + /ansi-styles/6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} dev: true - /anymatch/3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + /anymatch/3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 @@ -1739,7 +1930,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: delegates: 1.0.0 - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /arg/4.1.3: @@ -1756,6 +1947,13 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true + /array-buffer-byte-length/1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: true + /array-ify/1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true @@ -1795,19 +1993,24 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /babel-jest/29.5.0_@babel+core@7.19.1: + /available-typed-arrays/1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /babel-jest/29.5.0_@babel+core@7.21.4: resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.19.1 + '@babel/core': 7.21.4 '@jest/transform': 29.5.0 - '@types/babel__core': 7.1.19 + '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.5.0_@babel+core@7.19.1 + babel-preset-jest: 29.5.0_@babel+core@7.21.4 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color @@ -1817,10 +2020,10 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.19.0 + '@babel/helper-plugin-utils': 7.20.2 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.0 + istanbul-lib-instrument: 5.2.1 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color @@ -1830,59 +2033,59 @@ packages: resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.19.0 - '@types/babel__core': 7.1.19 - '@types/babel__traverse': 7.18.2 + '@babel/template': 7.20.7 + '@babel/types': 7.21.4 + '@types/babel__core': 7.20.0 + '@types/babel__traverse': 7.18.3 dev: true - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.19.1: + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.21.4: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.19.1 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.19.1 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.19.1 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.19.1 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.19.1 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.19.1 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.19.1 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.19.1 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.19.1 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.19.1 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.19.1 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.19.1 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.19.1 - dev: true - - /babel-preset-jest/29.5.0_@babel+core@7.19.1: + '@babel/core': 7.21.4 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.21.4 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.21.4 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.21.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.21.4 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.4 + dev: true + + /babel-preset-jest/29.5.0_@babel+core@7.21.4: resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.19.1 + '@babel/core': 7.21.4 babel-plugin-jest-hoist: 29.5.0 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.19.1 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 dev: true /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /boxen/7.0.0: - resolution: {integrity: sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==} + /boxen/7.0.2: + resolution: {integrity: sha512-1Z4UJabXUP1/R9rLpoU3O2lEMnG3pPLAs/ZD2lF3t2q7qD5lM8rqbtnvtvm4N0wEyNlE+9yZVTVAGmd1V5jabg==} engines: {node: '>=14.16'} dependencies: ansi-align: 3.0.1 - camelcase: 7.0.0 + camelcase: 7.0.1 chalk: 5.2.0 cli-boxes: 3.0.0 string-width: 5.1.2 type-fest: 2.19.0 widest-line: 4.0.1 - wrap-ansi: 8.0.1 + wrap-ansi: 8.1.0 dev: true /brace-expansion/1.1.11: @@ -1905,19 +2108,15 @@ packages: fill-range: 7.0.1 dev: true - /browser-process-hrtime/1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true - - /browserslist/4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} + /browserslist/4.21.5: + resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001412 - electron-to-chromium: 1.4.261 - node-releases: 2.0.6 - update-browserslist-db: 1.0.9_browserslist@4.21.4 + caniuse-lite: 1.0.30001480 + electron-to-chromium: 1.4.368 + node-releases: 2.0.10 + update-browserslist-db: 1.0.11_browserslist@4.21.5 dev: true /bs-logger/0.2.6: @@ -1940,7 +2139,7 @@ packages: /builtins/5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.3.8 + semver: 7.5.0 dev: true /cacache/16.1.3: @@ -1951,10 +2150,10 @@ packages: '@npmcli/move-file': 2.0.1 chownr: 2.0.0 fs-minipass: 2.1.0 - glob: 8.0.3 + glob: 8.1.0 infer-owner: 1.0.4 lru-cache: 7.18.3 - minipass: 3.3.4 + minipass: 3.3.6 minipass-collect: 1.0.2 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 @@ -1963,47 +2162,48 @@ packages: promise-inflight: 1.0.1 rimraf: 3.0.2 ssri: 9.0.1 - tar: 6.1.11 + tar: 6.1.13 unique-filename: 2.0.1 transitivePeerDependencies: - bluebird dev: true - /cacache/17.0.2: - resolution: {integrity: sha512-rYUs2x4OjSgCQND7nTrh21AHIBFgd7s/ctAYvU3a8u+nK+R5YaX/SFPDYz4Azz7SGL6+6L9ZZWI4Kawpb7grzQ==} + /cacache/17.0.5: + resolution: {integrity: sha512-Y/PRQevNSsjAPWykl9aeGz8Pr+OI6BYM9fYDNMvOkuUiG9IhG4LEmaYrZZZvioMUEQ+cBCxT0v8wrnCURccyKA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@npmcli/fs': 3.1.0 - fs-minipass: 2.1.0 - glob: 8.0.3 + fs-minipass: 3.0.1 + glob: 9.3.5 lru-cache: 7.18.3 - minipass: 3.3.4 + minipass: 4.2.8 minipass-collect: 1.0.2 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 p-map: 4.0.0 promise-inflight: 1.0.1 - ssri: 10.0.0 - tar: 6.1.11 + ssri: 10.0.3 + tar: 6.1.13 unique-filename: 3.0.0 transitivePeerDependencies: - bluebird dev: true - /cacheable-lookup/6.1.0: - resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==} - engines: {node: '>=10.6.0'} + /cacheable-lookup/7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} dev: true - /cacheable-request/10.2.0: - resolution: {integrity: sha512-PLOMmzyOU3L5HECdZC0PTNawPdP/taOhCNrYUmZchrw7gwERMctfx2wZcndb63w5W06PTHC1Poq89J9chMZPLw==} + /cacheable-request/10.2.9: + resolution: {integrity: sha512-CaAMr53AS1Tb9evO1BIWFnZjSr8A4pbXofpsNVWPMDZZj3ZQKHwsQG9BrTqQ4x5ZYJXz1T2b8LLtTZODxSpzbg==} engines: {node: '>=14.16'} dependencies: + '@types/http-cache-semantics': 4.0.1 get-stream: 6.0.1 - http-cache-semantics: 4.1.0 - keyv: 4.5.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.2 mimic-response: 4.0.0 - normalize-url: 7.1.0 + normalize-url: 8.0.0 responselike: 3.0.0 dev: true @@ -2011,7 +2211,7 @@ packages: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 dev: true /callsites/3.1.0: @@ -2038,13 +2238,13 @@ packages: engines: {node: '>=10'} dev: true - /camelcase/7.0.0: - resolution: {integrity: sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==} + /camelcase/7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} dev: true - /caniuse-lite/1.0.30001412: - resolution: {integrity: sha512-+TeEIee1gS5bYOiuf+PS/kp2mrXic37Hl66VY6EAfxasIk5fELTktK2oOezYed12H8w7jt3s512PpulQidPjwA==} + /caniuse-lite/1.0.30001480: + resolution: {integrity: sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ==} dev: true /chalk/2.4.2: @@ -2079,8 +2279,9 @@ packages: engines: {node: '>=10'} dev: true - /ci-info/3.4.0: - resolution: {integrity: sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==} + /ci-info/3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} dev: true /cjs-module-lexer/1.2.2: @@ -2104,11 +2305,13 @@ packages: restore-cursor: 3.1.0 dev: true - /cli-table/0.3.11: - resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} - engines: {node: '>= 0.2.0'} + /cli-table3/0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} dependencies: - colors: 1.0.3 + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 dev: true /cli-truncate/2.1.0: @@ -2135,6 +2338,15 @@ packages: wrap-ansi: 7.0.0 dev: true + /cliui/8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -2170,13 +2382,8 @@ packages: hasBin: true dev: true - /colorette/2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - dev: true - - /colors/1.0.3: - resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} - engines: {node: '>=0.1.90'} + /colorette/2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true /colors/1.2.5: @@ -2191,8 +2398,8 @@ packages: delayed-stream: 1.0.0 dev: true - /commander/10.0.0: - resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} + /commander/10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} dev: true @@ -2200,10 +2407,12 @@ packages: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true - /commander/9.4.1: - resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==} + /commander/9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} + requiresBuild: true dev: true + optional: true /commondir/1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -2232,7 +2441,7 @@ packages: engines: {node: '>=12'} dependencies: dot-prop: 6.0.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 unique-string: 3.0.0 write-file-atomic: 3.0.3 xdg-basedir: 5.1.0 @@ -2409,18 +2618,16 @@ packages: through2: 4.0.2 dev: true - /convert-source-map/1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} - dependencies: - safe-buffer: 5.1.2 + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true /convert-source-map/2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /core-js/3.29.0: - resolution: {integrity: sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==} + /core-js/3.30.1: + resolution: {integrity: sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ==} requiresBuild: true dev: true @@ -2428,8 +2635,8 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cosmiconfig-typescript-loader/4.1.0_lmcvhluzh3a7wwwkanu7ndhele: - resolution: {integrity: sha512-HbWIuR5O+XO5Oj9SZ5bzgrD4nN+rfhrm2PMb0FVx+t+XIvC45n8F0oTNnztXtspWGw0i2IzHaUWFD5LzV1JB4A==} + /cosmiconfig-typescript-loader/4.3.0_zulaepqzabcjiyzbkdbfeduf6u: + resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' @@ -2437,14 +2644,14 @@ packages: ts-node: '>=10' typescript: '>=3' dependencies: - '@types/node': 18.15.0 - cosmiconfig: 8.1.0 - ts-node: 10.9.1_lwgqdwokjtwlohdqtbb6s252kq - typescript: 4.9.5 + '@types/node': 18.15.11 + cosmiconfig: 8.1.3 + ts-node: 10.9.1_bhanhq442dy43ncydsavgi4jfi + typescript: 5.0.4 dev: true - /cosmiconfig/8.1.0: - resolution: {integrity: sha512-0tLZ9URlPGU7JsKq0DQOQ3FoRsYX8xDZ7xMiATQfaiGMz7EHowNkbU9u1coAOmnh9p/1ySpm0RB3JNWRXM5GCg==} + /cosmiconfig/8.1.3: + resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} engines: {node: '>=14'} dependencies: import-fresh: 3.3.0 @@ -2529,8 +2736,8 @@ packages: ms: 2.1.2 dev: true - /decamelize-keys/1.1.0: - resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==} + /decamelize-keys/1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} dependencies: decamelize: 1.2.0 @@ -2542,8 +2749,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /decimal.js/10.4.1: - resolution: {integrity: sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==} + /decimal.js/10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true /decompress-response/6.0.0: @@ -2566,8 +2773,8 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + /deepmerge/4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} dev: true @@ -2576,8 +2783,8 @@ packages: engines: {node: '>=10'} dev: true - /define-properties/1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} + /define-properties/1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} dependencies: has-property-descriptors: 1.0.0 @@ -2593,9 +2800,9 @@ packages: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: true - /depd/1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} + /depd/2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} dev: true /detect-newline/3.1.0: @@ -2603,11 +2810,6 @@ packages: engines: {node: '>=8'} dev: true - /diff-sequences/29.3.1: - resolution: {integrity: sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - /diff-sequences/29.4.3: resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2657,8 +2859,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium/1.4.261: - resolution: {integrity: sha512-fVXliNUGJ7XUVJSAasPseBbVgJIeyw5M1xIkgXdTSRjlmCqBbiSTsEdLOCJS31Fc8B7CaloQ/BFAg8By3ODLdg==} + /electron-to-chromium/1.4.368: + resolution: {integrity: sha512-e2aeCAixCj9M7nJxdB/wDjO6mbYX+lJJxSJCXDzlr5YPGYVofuJwGN9nKg2o6wWInjX6XmxRinn3AeJMK81ltw==} dev: true /email-addresses/5.0.0: @@ -2693,8 +2895,8 @@ packages: ansi-colors: 4.1.3 dev: true - /entities/4.4.0: - resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} + /entities/4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} dev: true @@ -2703,263 +2905,102 @@ packages: engines: {node: '>=6'} dev: true - /err-code/2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - dev: true - - /error-ex/1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: true - - /es-abstract/1.20.3: - resolution: {integrity: sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - es-to-primitive: 1.2.1 - function-bind: 1.1.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.1.3 - get-symbol-description: 1.0.0 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-symbols: 1.0.3 - internal-slot: 1.0.3 - 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-weakref: 1.0.2 - object-inspect: 1.12.2 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - safe-regex-test: 1.0.0 - string.prototype.trimend: 1.0.5 - string.prototype.trimstart: 1.0.5 - unbox-primitive: 1.0.2 - dev: true - - /es-to-primitive/1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - - /esbuild-android-64/0.15.15: - resolution: {integrity: sha512-F+WjjQxO+JQOva3tJWNdVjouFMLK6R6i5gjDvgUthLYJnIZJsp1HlF523k73hELY20WPyEO8xcz7aaYBVkeg5Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /esbuild-android-arm64/0.15.15: - resolution: {integrity: sha512-attlyhD6Y22jNyQ0fIIQ7mnPvDWKw7k6FKnsXlBvQE6s3z6s6cuEHcSgoirquQc7TmZgVCK5fD/2uxmRN+ZpcQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /esbuild-darwin-64/0.15.15: - resolution: {integrity: sha512-ohZtF8W1SHJ4JWldsPVdk8st0r9ExbAOSrBOh5L+Mq47i696GVwv1ab/KlmbUoikSTNoXEhDzVpxUR/WIO19FQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /esbuild-darwin-arm64/0.15.15: - resolution: {integrity: sha512-P8jOZ5zshCNIuGn+9KehKs/cq5uIniC+BeCykvdVhx/rBXSxmtj3CUIKZz4sDCuESMbitK54drf/2QX9QHG5Ag==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-64/0.15.15: - resolution: {integrity: sha512-KkTg+AmDXz1IvA9S1gt8dE24C8Thx0X5oM0KGF322DuP+P3evwTL9YyusHAWNsh4qLsR80nvBr/EIYs29VSwuA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-arm64/0.15.15: - resolution: {integrity: sha512-FUcML0DRsuyqCMfAC+HoeAqvWxMeq0qXvclZZ/lt2kLU6XBnDA5uKTLUd379WYEyVD4KKFctqWd9tTuk8C/96g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-32/0.15.15: - resolution: {integrity: sha512-q28Qn5pZgHNqug02aTkzw5sW9OklSo96b5nm17Mq0pDXrdTBcQ+M6Q9A1B+dalFeynunwh/pvfrNucjzwDXj+Q==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-64/0.15.15: - resolution: {integrity: sha512-217KPmWMirkf8liO+fj2qrPwbIbhNTGNVtvqI1TnOWJgcMjUWvd677Gq3fTzXEjilkx2yWypVnTswM2KbXgoAg==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm/0.15.15: - resolution: {integrity: sha512-RYVW9o2yN8yM7SB1yaWr378CwrjvGCyGybX3SdzPHpikUHkME2AP55Ma20uNwkNyY2eSYFX9D55kDrfQmQBR4w==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm64/0.15.15: - resolution: {integrity: sha512-/ltmNFs0FivZkYsTzAsXIfLQX38lFnwJTWCJts0IbCqWZQe+jjj0vYBNbI0kmXLb3y5NljiM5USVAO1NVkdh2g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-mips64le/0.15.15: - resolution: {integrity: sha512-PksEPb321/28GFFxtvL33yVPfnMZihxkEv5zME2zapXGp7fA1X2jYeiTUK+9tJ/EGgcNWuwvtawPxJG7Mmn86A==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-ppc64le/0.15.15: - resolution: {integrity: sha512-ek8gJBEIhcpGI327eAZigBOHl58QqrJrYYIZBWQCnH3UnXoeWMrMZLeeZL8BI2XMBhP+sQ6ERctD5X+ajL/AIA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-riscv64/0.15.15: - resolution: {integrity: sha512-H5ilTZb33/GnUBrZMNJtBk7/OXzDHDXjIzoLXHSutwwsLxSNaLxzAaMoDGDd/keZoS+GDBqNVxdCkpuiRW4OSw==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-s390x/0.15.15: - resolution: {integrity: sha512-jKaLUg78mua3rrtrkpv4Or2dNTJU7bgHN4bEjT4OX4GR7nLBSA9dfJezQouTxMmIW7opwEC5/iR9mpC18utnxQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-netbsd-64/0.15.15: - resolution: {integrity: sha512-aOvmF/UkjFuW6F36HbIlImJTTx45KUCHJndtKo+KdP8Dhq3mgLRKW9+6Ircpm8bX/RcS3zZMMmaBLkvGY06Gvw==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-openbsd-64/0.15.15: - resolution: {integrity: sha512-HFFX+WYedx1w2yJ1VyR1Dfo8zyYGQZf1cA69bLdrHzu9svj6KH6ZLK0k3A1/LFPhcEY9idSOhsB2UyU0tHPxgQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true + /err-code/2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} dev: true - optional: true - /esbuild-sunos-64/0.15.15: - resolution: {integrity: sha512-jOPBudffG4HN8yJXcK9rib/ZTFoTA5pvIKbRrt3IKAGMq1EpBi4xoVoSRrq/0d4OgZLaQbmkHp8RO9eZIn5atA==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 dev: true - optional: true - /esbuild-windows-32/0.15.15: - resolution: {integrity: sha512-MDkJ3QkjnCetKF0fKxCyYNBnOq6dmidcwstBVeMtXSgGYTy8XSwBeIE4+HuKiSsG6I/mXEb++px3IGSmTN0XiA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true + /es-abstract/1.21.2: + resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.0 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + 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.10 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.9 dev: true - optional: true - /esbuild-windows-64/0.15.15: - resolution: {integrity: sha512-xaAUIB2qllE888SsMU3j9nrqyLbkqqkpQyWVkfwSil6BBPgcPk3zOFitTTncEKCLTQy3XV9RuH7PDj3aJDljWA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true + /es-set-tostringtag/2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + has-tostringtag: 1.0.0 dev: true - optional: true - /esbuild-windows-arm64/0.15.15: - resolution: {integrity: sha512-ttuoCYCIJAFx4UUKKWYnFdrVpoXa3+3WWkXVI6s09U+YjhnyM5h96ewTq/WgQj9LFSIlABQvadHSOQyAVjW5xQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true + /es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 dev: true - optional: true - /esbuild/0.15.15: - resolution: {integrity: sha512-TEw/lwK4Zzld9x3FedV6jy8onOUHqcEX3ADFk4k+gzPUwrxn8nWV62tH0udo8jOtjFodlEfc4ypsqX3e+WWO6w==} + /esbuild/0.17.17: + resolution: {integrity: sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.15.15 - '@esbuild/linux-loong64': 0.15.15 - esbuild-android-64: 0.15.15 - esbuild-android-arm64: 0.15.15 - esbuild-darwin-64: 0.15.15 - esbuild-darwin-arm64: 0.15.15 - esbuild-freebsd-64: 0.15.15 - esbuild-freebsd-arm64: 0.15.15 - esbuild-linux-32: 0.15.15 - esbuild-linux-64: 0.15.15 - esbuild-linux-arm: 0.15.15 - esbuild-linux-arm64: 0.15.15 - esbuild-linux-mips64le: 0.15.15 - esbuild-linux-ppc64le: 0.15.15 - esbuild-linux-riscv64: 0.15.15 - esbuild-linux-s390x: 0.15.15 - esbuild-netbsd-64: 0.15.15 - esbuild-openbsd-64: 0.15.15 - esbuild-sunos-64: 0.15.15 - esbuild-windows-32: 0.15.15 - esbuild-windows-64: 0.15.15 - esbuild-windows-arm64: 0.15.15 + '@esbuild/android-arm': 0.17.17 + '@esbuild/android-arm64': 0.17.17 + '@esbuild/android-x64': 0.17.17 + '@esbuild/darwin-arm64': 0.17.17 + '@esbuild/darwin-x64': 0.17.17 + '@esbuild/freebsd-arm64': 0.17.17 + '@esbuild/freebsd-x64': 0.17.17 + '@esbuild/linux-arm': 0.17.17 + '@esbuild/linux-arm64': 0.17.17 + '@esbuild/linux-ia32': 0.17.17 + '@esbuild/linux-loong64': 0.17.17 + '@esbuild/linux-mips64el': 0.17.17 + '@esbuild/linux-ppc64': 0.17.17 + '@esbuild/linux-riscv64': 0.17.17 + '@esbuild/linux-s390x': 0.17.17 + '@esbuild/linux-x64': 0.17.17 + '@esbuild/netbsd-x64': 0.17.17 + '@esbuild/openbsd-x64': 0.17.17 + '@esbuild/sunos-x64': 0.17.17 + '@esbuild/win32-arm64': 0.17.17 + '@esbuild/win32-ia32': 0.17.17 + '@esbuild/win32-x64': 0.17.17 dev: true /escalade/3.1.1: @@ -3000,16 +3041,16 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier/8.7.0_eslint@8.35.0: - resolution: {integrity: sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==} + /eslint-config-prettier/8.8.0_eslint@8.38.0: + resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.35.0 + eslint: 8.38.0 dev: true - /eslint-plugin-prettier/4.2.1_xprnzp4ul2bcpmfe73av4voica: + /eslint-plugin-prettier/4.2.1_mrzcadguhkbme6yx3ehduvsjxu: resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -3020,9 +3061,9 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.35.0 - eslint-config-prettier: 8.7.0_eslint@8.35.0 - prettier: 2.8.4 + eslint: 8.38.0 + eslint-config-prettier: 8.8.0_eslint@8.38.0 + prettier: 2.8.7 prettier-linter-helpers: 1.0.0 dev: true @@ -3034,41 +3075,28 @@ packages: estraverse: 4.3.0 dev: true - /eslint-scope/7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + /eslint-scope/7.2.0: + resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.35.0: - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.35.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys/2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - - /eslint-visitor-keys/3.3.0: - resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + /eslint-visitor-keys/3.4.0: + resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.35.0: - resolution: {integrity: sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==} + /eslint/8.38.0: + resolution: {integrity: sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 2.0.0 - '@eslint/js': 8.35.0 + '@eslint-community/eslint-utils': 4.4.0_eslint@8.38.0 + '@eslint-community/regexpp': 4.5.0 + '@eslint/eslintrc': 2.0.2 + '@eslint/js': 8.38.0 '@humanwhocodes/config-array': 0.11.8 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -3078,10 +3106,9 @@ packages: debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.35.0 - eslint-visitor-keys: 3.3.0 - espree: 9.4.0 + eslint-scope: 7.2.0 + eslint-visitor-keys: 3.4.0 + espree: 9.5.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -3090,12 +3117,12 @@ packages: glob-parent: 6.0.2 globals: 13.20.0 grapheme-splitter: 1.0.4 - ignore: 5.2.0 + ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.1.4 + js-sdsl: 4.4.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -3103,7 +3130,6 @@ packages: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.1 - regexpp: 3.2.0 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 @@ -3115,16 +3141,16 @@ packages: resolution: {integrity: sha512-6slSBEV1lMKcX13DBifvnDFpNno5WXhw4j/ff7RI0y51BZiDqEe5dNhhjhIQ3iCOQuzsm2MbVzmwqbN78BBhPg==} hasBin: true dependencies: - tsx: 3.12.1 + tsx: 3.12.6 dev: true - /espree/9.4.0: - resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==} + /espree/9.5.1: + resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.0 - acorn-jsx: 5.3.2_acorn@8.8.0 - eslint-visitor-keys: 3.3.0 + acorn: 8.8.2 + acorn-jsx: 5.3.2_acorn@8.8.2 + eslint-visitor-keys: 3.4.0 dev: true /esprima/4.0.1: @@ -3181,28 +3207,13 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa/6.1.0: - resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 3.0.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - dev: true - - /execa/7.0.0: - resolution: {integrity: sha512-tQbH0pH/8LHTnwTrsKWideqi6rFB/QNUawEwrn+WHyz7PX1Tuz2u7wfTvbaNBdP5JD5LVWxNo8/A8CHNZ3bV6g==} + /execa/7.1.1: + resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 - human-signals: 4.3.0 + human-signals: 4.3.1 is-stream: 3.0.0 merge-stream: 2.0.0 npm-run-path: 5.1.0 @@ -3216,17 +3227,6 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /expect/29.3.1: - resolution: {integrity: sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/expect-utils': 29.3.1 - jest-get-type: 29.2.0 - jest-matcher-utils: 29.3.1 - jest-message-util: 29.3.1 - jest-util: 29.3.1 - dev: true - /expect/29.5.0: resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3269,8 +3269,8 @@ packages: resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} dev: true - /fastq/1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + /fastq/1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true @@ -3353,8 +3353,14 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /form-data-encoder/2.1.2: - resolution: {integrity: sha512-FCaIOVTRA9E0siY6FeXid7D5yrCqpsErplUkE2a1BEiKj1BE9z6FbKB4ntDTwC4NVLie9p+4E9nX4mWwEOT05A==} + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /form-data-encoder/2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} dev: true @@ -3376,16 +3382,16 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 dev: true - /fs-extra/11.1.0: - resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} + /fs-extra/11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 dev: true @@ -3394,7 +3400,7 @@ packages: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 dev: true @@ -3403,7 +3409,7 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 dev: true @@ -3412,14 +3418,14 @@ packages: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} dependencies: - minipass: 3.3.4 + minipass: 3.3.6 dev: true /fs-minipass/3.0.1: resolution: {integrity: sha512-MhaJDcFRTuLidHrIttu0RDGyyXs/IYHVmlcxfLAEFIWjc1vdLAkdwT7Ace2u7DbitWC0toKMl5eJZRYNVreIMw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minipass: 4.2.4 + minipass: 4.2.8 dev: true /fs.realpath/1.0.0: @@ -3443,8 +3449,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.3 + define-properties: 1.2.0 + es-abstract: 1.21.2 functions-have-names: 1.2.3 dev: true @@ -3476,8 +3482,8 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic/1.1.3: - resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} + /get-intrinsic/1.2.0: + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 has: 1.0.3 @@ -3515,11 +3521,11 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 dev: true - /get-tsconfig/4.2.0: - resolution: {integrity: sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==} + /get-tsconfig/4.5.0: + resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} dev: true /gh-pages/5.0.0: @@ -3596,25 +3602,25 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/8.0.3: - resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==} + /glob/8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 5.1.0 + minimatch: 5.1.6 once: 1.4.0 dev: true - /glob/9.2.1: - resolution: {integrity: sha512-Pxxgq3W0HyA3XUvSXcFhRSs+43Jsx0ddxcFrbjxNGkL2Ak5BAUBxLqI5G6ADDeCHLfzzXFhe0b1yYcctGmytMA==} + /glob/9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} dependencies: fs.realpath: 1.0.0 - minimatch: 7.4.2 - minipass: 4.2.4 - path-scurry: 1.6.1 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.7.0 dev: true /global-dirs/0.1.1: @@ -3624,8 +3630,8 @@ packages: ini: 1.3.8 dev: true - /global-dirs/3.0.0: - resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} + /global-dirs/3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} dependencies: ini: 2.0.0 @@ -3643,6 +3649,13 @@ packages: type-fest: 0.20.2 dev: true + /globalthis/1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + dev: true + /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -3650,7 +3663,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.12 - ignore: 5.2.0 + ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -3666,18 +3679,24 @@ packages: pinkie-promise: 2.0.1 dev: true - /got/12.5.0: - resolution: {integrity: sha512-/Bneo/L6bLN1wDyJCeRZ3CLoixvwb9v3rE3IHulFSfTHwP85xSr4QatA8K0c6GlL5+mc4IZ57BzluNZJiXvHIg==} + /gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.0 + dev: true + + /got/12.6.0: + resolution: {integrity: sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==} engines: {node: '>=14.16'} dependencies: '@sindresorhus/is': 5.3.0 '@szmarczak/http-timer': 5.0.1 - cacheable-lookup: 6.1.0 - cacheable-request: 10.2.0 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.9 decompress-response: 6.0.0 - form-data-encoder: 2.1.2 + form-data-encoder: 2.1.4 get-stream: 6.0.1 - http2-wrapper: 2.1.11 + http2-wrapper: 2.2.0 lowercase-keys: 3.0.0 p-cancelable: 3.0.0 responselike: 3.0.0 @@ -3687,6 +3706,10 @@ packages: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true + /graceful-fs/4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true @@ -3701,7 +3724,7 @@ packages: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.17.1 + uglify-js: 3.17.4 dev: true /hard-rejection/2.1.0: @@ -3726,7 +3749,12 @@ packages: /has-property-descriptors/1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 + dev: true + + /has-proto/1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} dev: true /has-symbols/1.0.3: @@ -3768,11 +3796,11 @@ packages: lru-cache: 6.0.0 dev: true - /hosted-git-info/5.1.0: - resolution: {integrity: sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q==} + /hosted-git-info/5.2.1: + resolution: {integrity: sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - lru-cache: 7.14.0 + lru-cache: 7.18.3 dev: true /hosted-git-info/6.1.1: @@ -3793,8 +3821,8 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-cache-semantics/4.1.0: - resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} + /http-cache-semantics/4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: true /http-proxy-agent/5.0.0: @@ -3808,8 +3836,8 @@ packages: - supports-color dev: true - /http2-wrapper/2.1.11: - resolution: {integrity: sha512-aNAk5JzLturWEUiuhAN73Jcbq96R7rTitAoXV54FYMatvihnpD2+6PUgU4ce3D/m5VDbw+F5CsyKSF176ptitQ==} + /http2-wrapper/2.2.0: + resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==} engines: {node: '>=10.19.0'} dependencies: quick-lru: 5.1.1 @@ -3831,13 +3859,8 @@ packages: engines: {node: '>=10.17.0'} dev: true - /human-signals/3.0.1: - resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} - engines: {node: '>=12.20.0'} - dev: true - - /human-signals/4.3.0: - resolution: {integrity: sha512-zyzVyMjpGBX2+6cDVZeFPCdtOtdsxOeseRhB9tkQ6xXmGUNrcnBzdEKPy3VPNYz+4gy1oukVOXcrJCunSyc6QQ==} + /human-signals/4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} dev: true @@ -3860,15 +3883,15 @@ packages: safer-buffer: 2.1.2 dev: true - /ignore-walk/6.0.0: - resolution: {integrity: sha512-bTf9UWe/UP1yxG3QUrj/KOvEhTAUWPcv+WvbFZ28LcqznXabp7Xu6o9y1JEC18+oqODuS7VhTpekV5XvFwsxJg==} + /ignore-walk/6.0.2: + resolution: {integrity: sha512-ezmQ1Dg2b3jVZh2Dh+ar6Eu2MqNSTkyb32HU2MAQQQX9tKM3q/UQ/9lf03lQ5hW+fOeoMnwxwkleZ0xcNp0/qg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minimatch: 5.1.0 + minimatch: 7.4.6 dev: true - /ignore/5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + /ignore/5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true @@ -3928,16 +3951,16 @@ packages: engines: {node: '>=10'} dev: true - /ini/3.0.1: - resolution: {integrity: sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + /ini/4.1.0: + resolution: {integrity: sha512-HLR38RSF2iulAzc3I/sma4CoYxQP844rPYCNfzGDOHqa/YqVlwuuZgBx6M50/X8dKgzk0cm1qRg3+47mK2N+cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /internal-slot/1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + /internal-slot/1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 has: 1.0.3 side-channel: 1.0.4 dev: true @@ -3946,6 +3969,14 @@ packages: resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} dev: true + /is-array-buffer/3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-typed-array: 1.1.10 + dev: true + /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true @@ -3973,11 +4004,11 @@ packages: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true dependencies: - ci-info: 3.4.0 + ci-info: 3.8.0 dev: true - /is-core-module/2.10.0: - resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} + /is-core-module/2.12.0: + resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} dependencies: has: 1.0.3 dev: true @@ -4020,7 +4051,7 @@ packages: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} dependencies: - global-dirs: 3.0.0 + global-dirs: 3.0.1 is-path-inside: 3.0.3 dev: true @@ -4114,6 +4145,17 @@ packages: text-extensions: 1.9.0 dev: true + /is-typed-array/1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + /is-typedarray/1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: true @@ -4124,8 +4166,8 @@ packages: call-bind: 1.0.2 dev: true - /is-yarn-global/0.4.0: - resolution: {integrity: sha512-HneQBCrXGBy15QnaDfcn6OLoU8AQPAa0Qn0IeJR/QCo4E8dNZaGGwxpCwWyEBQC5QvFonP8d6t60iGpAHVAfNA==} + /is-yarn-global/0.4.1: + resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} engines: {node: '>=12'} dev: true @@ -4142,12 +4184,12 @@ packages: engines: {node: '>=8'} dev: true - /istanbul-lib-instrument/5.2.0: - resolution: {integrity: sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==} + /istanbul-lib-instrument/5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.19.1 - '@babel/parser': 7.19.1 + '@babel/core': 7.21.4 + '@babel/parser': 7.21.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -4199,7 +4241,7 @@ packages: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -4212,14 +4254,14 @@ packages: jest-util: 29.5.0 p-limit: 3.1.0 pretty-format: 29.5.0 - pure-rand: 6.0.0 + pure-rand: 6.0.1 slash: 3.0.0 - stack-utils: 2.0.5 + stack-utils: 2.0.6 transitivePeerDependencies: - supports-color dev: true - /jest-cli/29.5.0_@types+node@18.15.0: + /jest-cli/29.5.0_@types+node@18.15.11: resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4234,20 +4276,20 @@ packages: '@jest/types': 29.5.0 chalk: 4.1.2 exit: 0.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0_@types+node@18.15.0 + jest-config: 29.5.0_@types+node@18.15.11 jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 - yargs: 17.5.1 + yargs: 17.7.1 transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /jest-config/29.5.0_@types+node@18.15.0: + /jest-config/29.5.0_@types+node@18.15.11: resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4259,16 +4301,16 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.19.1 + '@babel/core': 7.21.4 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 - babel-jest: 29.5.0_@babel+core@7.19.1 + '@types/node': 18.15.11 + babel-jest: 29.5.0_@babel+core@7.21.4 chalk: 4.1.2 - ci-info: 3.4.0 - deepmerge: 4.2.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-circus: 29.5.0 jest-environment-node: 29.5.0 jest-get-type: 29.4.3 @@ -4286,16 +4328,6 @@ packages: - supports-color dev: true - /jest-diff/29.3.1: - resolution: {integrity: sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 29.3.1 - jest-get-type: 29.2.0 - pretty-format: 29.4.3 - dev: true - /jest-diff/29.5.0: resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4336,11 +4368,11 @@ packages: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/jsdom': 20.0.0 - '@types/node': 18.15.0 + '@types/jsdom': 20.0.1 + '@types/node': 18.15.11 jest-mock: 29.5.0 jest-util: 29.5.0 - jsdom: 20.0.0 + jsdom: 20.0.3 transitivePeerDependencies: - bufferutil - supports-color @@ -4354,16 +4386,11 @@ packages: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 jest-mock: 29.5.0 jest-util: 29.5.0 dev: true - /jest-get-type/29.2.0: - resolution: {integrity: sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true - /jest-get-type/29.4.3: resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4374,11 +4401,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/graceful-fs': 4.1.5 - '@types/node': 18.15.0 - anymatch: 3.1.2 + '@types/graceful-fs': 4.1.6 + '@types/node': 18.15.11 + anymatch: 3.1.3 fb-watchman: 2.0.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-regex-util: 29.4.3 jest-util: 29.5.0 jest-worker: 29.5.0 @@ -4396,16 +4423,6 @@ packages: pretty-format: 29.5.0 dev: true - /jest-matcher-utils/29.3.1: - resolution: {integrity: sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 29.3.1 - jest-get-type: 29.2.0 - pretty-format: 29.3.1 - dev: true - /jest-matcher-utils/29.5.0: resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4416,34 +4433,19 @@ packages: pretty-format: 29.5.0 dev: true - /jest-message-util/29.3.1: - resolution: {integrity: sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/code-frame': 7.18.6 - '@jest/types': 29.4.3 - '@types/stack-utils': 2.0.1 - chalk: 4.1.2 - graceful-fs: 4.2.10 - micromatch: 4.0.5 - pretty-format: 29.3.1 - slash: 3.0.0 - stack-utils: 2.0.5 - dev: true - /jest-message-util/29.5.0: resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.21.4 '@jest/types': 29.5.0 '@types/stack-utils': 2.0.1 chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 micromatch: 4.0.5 pretty-format: 29.5.0 slash: 3.0.0 - stack-utils: 2.0.5 + stack-utils: 2.0.6 dev: true /jest-mock/29.5.0: @@ -4451,12 +4453,12 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 jest-util: 29.5.0 dev: true - /jest-pnp-resolver/1.2.2_jest-resolve@29.5.0: - resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} + /jest-pnp-resolver/1.2.3_jest-resolve@29.5.0: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: jest-resolve: '*' @@ -4487,13 +4489,13 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.5.0 - jest-pnp-resolver: 1.2.2_jest-resolve@29.5.0 + jest-pnp-resolver: 1.2.3_jest-resolve@29.5.0 jest-util: 29.5.0 jest-validate: 29.5.0 - resolve: 1.22.1 - resolve.exports: 2.0.0 + resolve: 1.22.2 + resolve.exports: 2.0.2 slash: 3.0.0 dev: true @@ -4506,10 +4508,10 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 chalk: 4.1.2 emittery: 0.13.1 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-docblock: 29.4.3 jest-environment-node: 29.5.0 jest-haste-map: 29.5.0 @@ -4537,12 +4539,12 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-mock: 29.5.0 @@ -4560,21 +4562,21 @@ packages: resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.19.1 - '@babel/generator': 7.19.0 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.1 - '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.19.1 - '@babel/traverse': 7.19.1 - '@babel/types': 7.19.0 + '@babel/core': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/plugin-syntax-jsx': 7.21.4_@babel+core@7.21.4 + '@babel/plugin-syntax-typescript': 7.21.4_@babel+core@7.21.4 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 '@jest/expect-utils': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/babel__traverse': 7.18.2 - '@types/prettier': 2.7.1 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.19.1 + '@types/babel__traverse': 7.18.3 + '@types/prettier': 2.7.2 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.4 chalk: 4.1.2 expect: 29.5.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jest-diff: 29.5.0 jest-get-type: 29.4.3 jest-matcher-utils: 29.5.0 @@ -4582,32 +4584,20 @@ packages: jest-util: 29.5.0 natural-compare: 1.4.0 pretty-format: 29.5.0 - semver: 7.3.8 + semver: 7.5.0 transitivePeerDependencies: - supports-color dev: true - /jest-util/29.3.1: - resolution: {integrity: sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.4.3 - '@types/node': 18.15.0 - chalk: 4.1.2 - ci-info: 3.4.0 - graceful-fs: 4.2.10 - picomatch: 2.3.1 - dev: true - /jest-util/29.5.0: resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 chalk: 4.1.2 - ci-info: 3.4.0 - graceful-fs: 4.2.10 + ci-info: 3.8.0 + graceful-fs: 4.2.11 picomatch: 2.3.1 dev: true @@ -4629,7 +4619,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.15.0 + '@types/node': 18.15.11 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -4641,7 +4631,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -4650,13 +4640,13 @@ packages: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.15.0 + '@types/node': 18.15.11 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest/29.5.0_@types+node@18.15.0: + /jest/29.5.0_@types+node@18.15.11: resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4669,7 +4659,7 @@ packages: '@jest/core': 29.5.0 '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0_@types+node@18.15.0 + jest-cli: 29.5.0_@types+node@18.15.11 transitivePeerDependencies: - '@types/node' - supports-color @@ -4680,8 +4670,8 @@ packages: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true - /js-sdsl/4.1.4: - resolution: {integrity: sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==} + /js-sdsl/4.4.0: + resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} dev: true /js-tokens/4.0.0: @@ -4703,8 +4693,8 @@ packages: argparse: 2.0.1 dev: true - /jsdom/20.0.0: - resolution: {integrity: sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==} + /jsdom/20.0.3: + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 @@ -4713,12 +4703,12 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.0 - acorn-globals: 6.0.0 + acorn: 8.8.2 + acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 data-urls: 3.0.2 - decimal.js: 10.4.1 + decimal.js: 10.4.3 domexception: 4.0.0 escodegen: 2.0.0 form-data: 4.0.0 @@ -4726,18 +4716,17 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.2 - parse5: 7.1.1 + nwsapi: 2.2.4 + parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.2 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 3.0.0 + w3c-xmlserializer: 4.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.9.0 + ws: 8.13.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -4803,7 +4792,7 @@ packages: /jsonfile/4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /jsonfile/6.1.0: @@ -4811,7 +4800,7 @@ packages: dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 dev: true /jsonlines/0.1.1: @@ -4823,8 +4812,8 @@ packages: engines: {'0': node >= 0.2.0} dev: true - /keyv/4.5.0: - resolution: {integrity: sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==} + /keyv/4.5.2: + resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} dependencies: json-buffer: 3.0.1 dev: true @@ -4872,8 +4861,8 @@ packages: type-check: 0.4.0 dev: true - /lilconfig/2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} + /lilconfig/2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} dev: true @@ -4881,31 +4870,31 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lint-staged/13.1.2_enquirer@2.3.6: - resolution: {integrity: sha512-K9b4FPbWkpnupvK3WXZLbgu9pchUJ6N7TtVZjbaPsoizkqFUDkUReUL25xdrCljJs7uLUF3tZ7nVPeo/6lp+6w==} + /lint-staged/13.2.1_enquirer@2.3.6: + resolution: {integrity: sha512-8gfzinVXoPfga5Dz/ZOn8I2GOhf81Wvs+KwbEXQn/oWZAvCVS2PivrXfVbFJc93zD16uC0neS47RXHIjXKYZQw==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true dependencies: + chalk: 5.2.0 cli-truncate: 3.1.0 - colorette: 2.0.19 - commander: 9.4.1 + commander: 10.0.1 debug: 4.3.4 - execa: 6.1.0 - lilconfig: 2.0.6 - listr2: 5.0.7_enquirer@2.3.6 + execa: 7.1.1 + lilconfig: 2.1.0 + listr2: 5.0.8_enquirer@2.3.6 micromatch: 4.0.5 normalize-path: 3.0.0 - object-inspect: 1.12.2 + object-inspect: 1.12.3 pidtree: 0.6.0 string-argv: 0.3.1 - yaml: 2.1.3 + yaml: 2.2.1 transitivePeerDependencies: - enquirer - supports-color dev: true - /listr2/5.0.7_enquirer@2.3.6: - resolution: {integrity: sha512-MD+qXHPmtivrHIDRwPYdfNkrzqDiuaKU/rfBcec3WMyMF3xylQj3jMq344OtvQxz7zaCFViRAeqlr2AFhPvXHw==} + /listr2/5.0.8_enquirer@2.3.6: + resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} engines: {node: ^14.13.1 || >=16.0.0} peerDependencies: enquirer: '>= 2.3.0 < 3' @@ -4914,7 +4903,7 @@ packages: optional: true dependencies: cli-truncate: 2.1.0 - colorette: 2.0.19 + colorette: 2.0.20 enquirer: 2.3.6 log-update: 4.0.0 p-map: 4.0.0 @@ -4928,7 +4917,7 @@ packages: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 @@ -5031,6 +5020,12 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -5038,16 +5033,16 @@ packages: yallist: 4.0.0 dev: true - /lru-cache/7.14.0: - resolution: {integrity: sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==} - engines: {node: '>=12'} - dev: true - /lru-cache/7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} dev: true + /lru-cache/9.1.0: + resolution: {integrity: sha512-qFXQEwchrZcMVen2uIDceR8Tii6kCJak5rzDStfEM0qA3YLMswaxIEZO0DhIbJ3aqaJiDjt+3crlplOb0tDtKQ==} + engines: {node: 14 || >=16.14} + dev: true + /lunr/2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} dev: true @@ -5067,14 +5062,14 @@ packages: resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - agentkeepalive: 4.2.1 + agentkeepalive: 4.3.0 cacache: 16.1.3 - http-cache-semantics: 4.1.0 + http-cache-semantics: 4.1.1 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-lambda: 1.0.1 lru-cache: 7.18.3 - minipass: 3.3.4 + minipass: 3.3.6 minipass-collect: 1.0.2 minipass-fetch: 2.1.2 minipass-flush: 1.0.5 @@ -5088,26 +5083,25 @@ packages: - supports-color dev: true - /make-fetch-happen/11.0.1: - resolution: {integrity: sha512-clv3IblugXn2CDUmqFhNzii3rjKa46u5wNeivc+QlLXkGI5FjLX3rGboo+y2kwf1pd8W0iDiC384cemeDtw9kw==} + /make-fetch-happen/11.1.0: + resolution: {integrity: sha512-7ChuOzCb1LzdQZrTy0ky6RsCoMYeM+Fh4cY0+4zsJVhNcH5Q3OJojLY1mGkD0xAhWB29lskECVb6ZopofwjldA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - agentkeepalive: 4.2.1 - cacache: 17.0.2 - http-cache-semantics: 4.1.0 + agentkeepalive: 4.3.0 + cacache: 17.0.5 + http-cache-semantics: 4.1.1 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-lambda: 1.0.1 lru-cache: 7.18.3 - minipass: 3.3.4 - minipass-collect: 1.0.2 - minipass-fetch: 3.0.0 + minipass: 4.2.8 + minipass-fetch: 3.0.2 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 negotiator: 0.6.3 promise-retry: 2.0.1 socks-proxy-agent: 7.0.0 - ssri: 10.0.0 + ssri: 10.0.3 transitivePeerDependencies: - bluebird - supports-color @@ -5129,8 +5123,8 @@ packages: engines: {node: '>=8'} dev: true - /marked/4.2.12: - resolution: {integrity: sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==} + /marked/4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} engines: {node: '>= 12'} hasBin: true dev: true @@ -5146,7 +5140,7 @@ packages: dependencies: '@types/minimist': 1.2.2 camelcase-keys: 6.2.2 - decamelize-keys: 1.1.0 + decamelize-keys: 1.1.1 hard-rejection: 2.1.0 minimist-options: 4.1.0 normalize-package-data: 3.0.3 @@ -5217,23 +5211,30 @@ packages: brace-expansion: 1.1.11 dev: true - /minimatch/5.1.0: - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} + /minimatch/5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true - /minimatch/6.2.0: - resolution: {integrity: sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==} + /minimatch/7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true - /minimatch/7.4.2: - resolution: {integrity: sha512-xy4q7wou3vUoC9k1xGTXc+awNdGaGVHtFUaey8tiX4H1QRc04DZ/rmDFwNm2EBsuYEhAZ6SgMmYf3InGY6OauA==} - engines: {node: '>=10'} + /minimatch/8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch/9.0.0: + resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} + engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 dev: true @@ -5255,25 +5256,25 @@ packages: resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} engines: {node: '>= 8'} dependencies: - minipass: 3.3.4 + minipass: 3.3.6 dev: true /minipass-fetch/2.1.2: resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - minipass: 3.3.4 + minipass: 3.3.6 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: encoding: 0.1.13 dev: true - /minipass-fetch/3.0.0: - resolution: {integrity: sha512-NSx3k5gR4Q5Ts2poCM/19d45VwhVLBtJZ6ypYcthj2BwmDx/e7lW8Aadnyt3edd2W0ecb+b0o7FYLRYE2AGcQg==} + /minipass-fetch/3.0.2: + resolution: {integrity: sha512-/ZpF1CQaWYqjbhfFgKNt3azxztEpc/JUPuMkqOgrnMQqcU8CbE409AUdJYTIWryl3PP5CBaTJZT71N49MXP/YA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minipass: 3.3.4 + minipass: 4.2.8 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: @@ -5284,39 +5285,44 @@ packages: resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} engines: {node: '>= 8'} dependencies: - minipass: 3.3.4 + minipass: 3.3.6 dev: true /minipass-json-stream/1.0.1: resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==} dependencies: jsonparse: 1.3.1 - minipass: 3.3.4 + minipass: 3.3.6 dev: true /minipass-pipeline/1.2.4: resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} engines: {node: '>=8'} dependencies: - minipass: 3.3.4 + minipass: 3.3.6 dev: true /minipass-sized/1.0.3: resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} engines: {node: '>=8'} dependencies: - minipass: 3.3.4 + minipass: 3.3.6 dev: true - /minipass/3.3.4: - resolution: {integrity: sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==} + /minipass/3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} dependencies: yallist: 4.0.0 dev: true - /minipass/4.2.4: - resolution: {integrity: sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ==} + /minipass/4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + dev: true + + /minipass/5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} dev: true @@ -5324,7 +5330,7 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} dependencies: - minipass: 3.3.4 + minipass: 3.3.6 yallist: 4.0.0 dev: true @@ -5368,20 +5374,20 @@ packages: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true - /node-gyp/9.1.0: - resolution: {integrity: sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==} - engines: {node: ^12.22 || ^14.13 || >=16} + /node-gyp/9.3.1: + resolution: {integrity: sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==} + engines: {node: ^12.13 || ^14.13 || >=16} hasBin: true dependencies: env-paths: 2.2.1 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 make-fetch-happen: 10.2.1 - nopt: 5.0.0 + nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.3.8 - tar: 6.1.11 + semver: 7.5.0 + tar: 6.1.13 which: 2.0.2 transitivePeerDependencies: - bluebird @@ -5392,13 +5398,13 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases/2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + /node-releases/2.0.10: + resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: true - /nopt/5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} + /nopt/6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} hasBin: true dependencies: abbrev: 1.1.1 @@ -5408,7 +5414,7 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.1 + resolve: 1.22.2 semver: 5.7.1 validate-npm-package-license: 3.0.4 dev: true @@ -5418,8 +5424,8 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.10.0 - semver: 7.3.8 + is-core-module: 2.12.0 + semver: 7.5.0 validate-npm-package-license: 3.0.4 dev: true @@ -5428,8 +5434,8 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: hosted-git-info: 6.1.1 - is-core-module: 2.10.0 - semver: 7.3.8 + is-core-module: 2.12.0 + semver: 7.5.0 validate-npm-package-license: 3.0.4 dev: true @@ -5438,9 +5444,9 @@ packages: engines: {node: '>=0.10.0'} dev: true - /normalize-url/7.1.0: - resolution: {integrity: sha512-JgkdydFdLe1E5Q7DpLvKVyBZOOwXYGhIbMbOMm3lJ06XKzaiit+qo1HciO3z3IFklStfarzJHVQf9ZcNPTvZlw==} - engines: {node: '>=12.20'} + /normalize-url/8.0.0: + resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + engines: {node: '>=14.16'} dev: true /npm-bundled/3.0.0: @@ -5450,51 +5456,51 @@ packages: npm-normalize-package-bin: 3.0.0 dev: true - /npm-check-updates/16.7.12: - resolution: {integrity: sha512-ejYl/BiWhkUxDs1ISQd/6blgTIfHabSdsfR5JWoA7PK+cGn8hCqVKO5p+nNI2PqX+0F21ExGqkt8b7cg2yxuYg==} + /npm-check-updates/16.10.8: + resolution: {integrity: sha512-e+p3rUCvaU0iKOvi+/Xiyx+mLe9/aRTu9Zrc7+TR6H2q+uFgmXEwqbXYN9Ngqsta8gdTjpn751UD5MEOogO5cA==} engines: {node: '>=14.14'} hasBin: true dependencies: chalk: 5.2.0 - cli-table: 0.3.11 - commander: 10.0.0 + cli-table3: 0.6.3 + commander: 10.0.1 fast-memoize: 2.5.2 find-up: 5.0.0 fp-and-or: 0.1.3 get-stdin: 8.0.0 globby: 11.1.0 - hosted-git-info: 5.1.0 - ini: 3.0.1 + hosted-git-info: 5.2.1 + ini: 4.1.0 + js-yaml: 4.1.0 json-parse-helpfulerror: 1.0.3 jsonlines: 0.1.1 lodash: 4.17.21 - minimatch: 7.4.2 + minimatch: 8.0.4 p-map: 4.0.0 pacote: 15.1.1 parse-github-url: 1.0.2 progress: 2.0.3 - prompts-ncu: 2.5.1 + prompts-ncu: 3.0.0 rc-config-loader: 4.1.2 remote-git-tags: 3.0.0 - rimraf: 4.4.0 - semver: 7.3.8 + rimraf: 4.4.1 + semver: 7.5.0 semver-utils: 1.1.4 source-map-support: 0.5.21 spawn-please: 2.0.1 strip-json-comments: 5.0.0 untildify: 4.0.0 update-notifier: 6.0.2 - yaml: 2.2.1 transitivePeerDependencies: - bluebird - supports-color dev: true - /npm-install-checks/6.0.0: - resolution: {integrity: sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==} + /npm-install-checks/6.1.1: + resolution: {integrity: sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.3.8 + semver: 7.5.0 dev: true /npm-normalize-package-bin/3.0.0: @@ -5502,43 +5508,43 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /npm-package-arg/10.0.0: - resolution: {integrity: sha512-7dkh8mRp7s0KwVHKIVJnFCJQ2B34gOGnzgBjDGyprycmARq/82SX/lhilQ95ZuacP/G/1gsS345iAkKmxWBQ2Q==} + /npm-package-arg/10.1.0: + resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: hosted-git-info: 6.1.1 proc-log: 3.0.0 - semver: 7.3.8 + semver: 7.5.0 validate-npm-package-name: 5.0.0 dev: true - /npm-packlist/7.0.2: - resolution: {integrity: sha512-d2+7RMySjVXssww23rV5NuIq1NzGvM04OlI5kwnvtYKfFTAPVs6Zxmxns2HRtJEA1oNj7D/BbFXeVAOLmW3N3Q==} + /npm-packlist/7.0.4: + resolution: {integrity: sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - ignore-walk: 6.0.0 + ignore-walk: 6.0.2 dev: true /npm-pick-manifest/8.0.1: resolution: {integrity: sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - npm-install-checks: 6.0.0 + npm-install-checks: 6.1.1 npm-normalize-package-bin: 3.0.0 - npm-package-arg: 10.0.0 - semver: 7.3.8 + npm-package-arg: 10.1.0 + semver: 7.5.0 dev: true - /npm-registry-fetch/14.0.2: - resolution: {integrity: sha512-TMenrMagFA9KF81E2bkS5XRyzERK4KXu70vgXt5+i8FcrFeLNgNsc6e5hekTqjDwPDkL3HGn/holWcXDMfnFgw==} + /npm-registry-fetch/14.0.4: + resolution: {integrity: sha512-pMS2DRkwg+M44ct65zrN/Cr9IHK1+n6weuefAo6Er4lc+/8YBCU0Czq04H3ZiSigluh7pb2rMM5JpgcytctB+Q==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - make-fetch-happen: 11.0.1 - minipass: 3.3.4 - minipass-fetch: 3.0.0 + make-fetch-happen: 11.1.0 + minipass: 4.2.8 + minipass-fetch: 3.0.2 minipass-json-stream: 1.0.1 minizlib: 2.1.2 - npm-package-arg: 10.0.0 + npm-package-arg: 10.1.0 proc-log: 3.0.0 transitivePeerDependencies: - bluebird @@ -5557,8 +5563,8 @@ packages: minimatch: 3.1.2 pidtree: 0.3.1 read-pkg: 3.0.0 - shell-quote: 1.7.3 - string.prototype.padend: 3.1.3 + shell-quote: 1.8.1 + string.prototype.padend: 3.1.4 dev: true /npm-run-path/4.0.1: @@ -5585,8 +5591,8 @@ packages: set-blocking: 2.0.0 dev: true - /nwsapi/2.2.2: - resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} + /nwsapi/2.2.4: + resolution: {integrity: sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==} dev: true /object-assign/4.1.1: @@ -5594,8 +5600,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /object-inspect/1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true /object-keys/1.1.1: @@ -5608,7 +5614,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true @@ -5725,10 +5731,10 @@ packages: resolution: {integrity: sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg==} engines: {node: '>=14.16'} dependencies: - got: 12.5.0 - registry-auth-token: 5.0.1 + got: 12.6.0 + registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.3.8 + semver: 7.5.0 dev: true /pacote/15.1.1: @@ -5736,24 +5742,24 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true dependencies: - '@npmcli/git': 4.0.3 - '@npmcli/installed-package-contents': 2.0.1 - '@npmcli/promise-spawn': 6.0.1 + '@npmcli/git': 4.0.4 + '@npmcli/installed-package-contents': 2.0.2 + '@npmcli/promise-spawn': 6.0.2 '@npmcli/run-script': 6.0.0 - cacache: 17.0.2 + cacache: 17.0.5 fs-minipass: 3.0.1 - minipass: 4.2.4 - npm-package-arg: 10.0.0 - npm-packlist: 7.0.2 + minipass: 4.2.8 + npm-package-arg: 10.1.0 + npm-packlist: 7.0.4 npm-pick-manifest: 8.0.1 - npm-registry-fetch: 14.0.2 + npm-registry-fetch: 14.0.4 proc-log: 3.0.0 promise-retry: 2.0.1 - read-package-json: 6.0.0 - read-package-json-fast: 3.0.1 - sigstore: 1.0.0 - ssri: 10.0.0 - tar: 6.1.11 + read-package-json: 6.0.1 + read-package-json-fast: 3.0.2 + sigstore: 1.3.0 + ssri: 10.0.3 + tar: 6.1.13 transitivePeerDependencies: - bluebird - supports-color @@ -5784,16 +5790,16 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.21.4 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 dev: true - /parse5/7.1.1: - resolution: {integrity: sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==} + /parse5/7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: - entities: 4.4.0 + entities: 4.5.0 dev: true /path-exists/3.0.0: @@ -5830,12 +5836,12 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry/1.6.1: - resolution: {integrity: sha512-OW+5s+7cw6253Q4E+8qQ/u1fVvcJQCJo/VFD8pje+dbJCF1n5ZRMV2AEHbGp+5Q7jxQIYJxkHopnj6nzdGeZLA==} - engines: {node: '>=14'} + /path-scurry/1.7.0: + resolution: {integrity: sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==} + engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 7.18.3 - minipass: 4.2.4 + lru-cache: 9.1.0 + minipass: 5.0.0 dev: true /path-type/3.0.0: @@ -5922,30 +5928,12 @@ packages: fast-diff: 1.2.0 dev: true - /prettier/2.8.4: - resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==} + /prettier/2.8.7: + resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} engines: {node: '>=10.13.0'} hasBin: true dev: true - /pretty-format/29.3.1: - resolution: {integrity: sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.0.0 - ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: true - - /pretty-format/29.4.3: - resolution: {integrity: sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.4.3 - ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: true - /pretty-format/29.5.0: resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5986,9 +5974,9 @@ packages: retry: 0.12.0 dev: true - /prompts-ncu/2.5.1: - resolution: {integrity: sha512-Hdd7GgV7b76Yh9FP9HL1D9xqtJCJdVPpiM2vDtuoc8W1KfweJe15gutFYmxkq83ViFaagFM8K0UcPCQ/tZq8bA==} - engines: {node: '>= 6'} + /prompts-ncu/3.0.0: + resolution: {integrity: sha512-qyz9UxZ5MlPKWVhWrCmSZ1ahm2GVYdjLb8og2sg0IPth1KRuhcggHGuijz0e41dkx35p1t1q3GRISGH7QGALFA==} + engines: {node: '>= 14'} dependencies: kleur: 4.1.5 sisteransi: 1.0.5 @@ -6010,8 +5998,8 @@ packages: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true - /punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + /punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} dev: true @@ -6022,8 +6010,8 @@ packages: escape-goat: 4.0.0 dev: true - /pure-rand/6.0.0: - resolution: {integrity: sha512-rLSBxJjP+4DQOgcJAx6RZHT2he2pkhQdSnofG5VWyVl6GRq/K02ISOuOLcsMOrtKDIJb8JN2zm3FFzWNbezdPw==} + /pure-rand/6.0.1: + resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==} dev: true /q/1.5.1: @@ -6080,19 +6068,19 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true - /read-package-json-fast/3.0.1: - resolution: {integrity: sha512-8+HW7Yo+cjfF+md8DqsZHgats2mxf7gGYow/+2JjxrftoHFZz9v4dzd0EubzYbkNaLxrTVcnllHwklXN2+7aTQ==} + /read-package-json-fast/3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: json-parse-even-better-errors: 3.0.0 npm-normalize-package-bin: 3.0.0 dev: true - /read-package-json/6.0.0: - resolution: {integrity: sha512-b/9jxWJ8EwogJPpv99ma+QwtqB7FSl3+V6UXS7Aaay8/5VwMY50oIFooY1UKXMWpfNCM6T/PoGqa5GD1g9xf9w==} + /read-package-json/6.0.1: + resolution: {integrity: sha512-AaHqXxfAVa+fNL07x8iAghfKOds/XXsu7zoouIVsbm7PEbQ3nMWXlvjcbrNLjElnUHWQtAo4QEa0RXuvD4XlpA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - glob: 8.0.3 + glob: 9.3.5 json-parse-even-better-errors: 3.0.0 normalize-package-data: 5.0.0 npm-normalize-package-bin: 3.0.0 @@ -6134,8 +6122,8 @@ packages: type-fest: 0.6.0 dev: true - /readable-stream/2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + /readable-stream/2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -6146,8 +6134,8 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + /readable-stream/3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: inherits: 2.0.4 @@ -6163,25 +6151,20 @@ packages: strip-indent: 3.0.0 dev: true - /regexp.prototype.flags/1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + /regexp.prototype.flags/1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 functions-have-names: 1.2.3 dev: true - /regexpp/3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true - - /registry-auth-token/5.0.1: - resolution: {integrity: sha512-UfxVOj8seK1yaIOiieV4FIP01vfBDLsY0H9sQzi9EbbUdJiuuBjJgLa1DpImXMNPnVkBD4eVxTEXcrZA6kfpJA==} + /registry-auth-token/5.0.2: + resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} dependencies: - '@pnpm/npm-conf': 1.0.5 + '@pnpm/npm-conf': 2.1.1 dev: true /registry-url/6.0.1: @@ -6238,23 +6221,23 @@ packages: global-dirs: 0.1.1 dev: true - /resolve.exports/2.0.0: - resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} + /resolve.exports/2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} dev: true /resolve/1.19.0: resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: - is-core-module: 2.10.0 + is-core-module: 2.12.0 path-parse: 1.0.7 dev: true - /resolve/1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + /resolve/1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: - is-core-module: 2.10.0 + is-core-module: 2.12.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -6295,27 +6278,28 @@ packages: glob: 7.2.3 dev: true - /rimraf/4.4.0: - resolution: {integrity: sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==} + /rimraf/4.4.1: + resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} engines: {node: '>=14'} hasBin: true dependencies: - glob: 9.2.1 + glob: 9.3.5 dev: true - /rollup-plugin-terser/7.0.2_rollup@3.19.0: + /rollup-plugin-terser/7.0.2_rollup@3.20.6: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser peerDependencies: rollup: ^2.0.0 dependencies: - '@babel/code-frame': 7.18.6 + '@babel/code-frame': 7.21.4 jest-worker: 26.6.2 - rollup: 3.19.0 + rollup: 3.20.6 serialize-javascript: 4.0.0 - terser: 5.16.0 + terser: 5.17.1 dev: true - /rollup-plugin-typescript2/0.34.1_ieayrmpiqxgv5ae4n2ikmwkgsu: + /rollup-plugin-typescript2/0.34.1_7z4wb4mnpapsgobacn7mivmt6i: resolution: {integrity: sha512-P4cHLtGikESmqi1CA+tdMDUv8WbQV48mzPYt77TSTOPJpERyZ9TXdDgjSDix8Fkqce6soYz3+fa4lrC93IEkcw==} peerDependencies: rollup: '>=1.26.3' @@ -6324,14 +6308,14 @@ packages: '@rollup/pluginutils': 4.2.1 find-cache-dir: 3.3.2 fs-extra: 10.1.0 - rollup: 3.19.0 - semver: 7.3.8 + rollup: 3.20.6 + semver: 7.5.0 tslib: 2.5.0 - typescript: 4.9.5 + typescript: 5.0.4 dev: true - /rollup/3.19.0: - resolution: {integrity: sha512-xZzJZlH9Ca6cosfdNGPwl2z7Pby8dTi9TrYLPeg6/j7aUoDOhBd706tCUFvbiBj45h/cS7z/a4gS8xd5Yg0jBw==} + /rollup/3.20.6: + resolution: {integrity: sha512-2yEB3nQXp/tBQDN0hJScJQheXdvU2wFhh6ld7K/aiZ1vYcak6N/BKjY1QrU6BvO2JWYS8bEs14FRaxXosxy2zw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -6362,7 +6346,7 @@ packages: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 is-regex: 1.1.4 dev: true @@ -6381,7 +6365,7 @@ packages: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} engines: {node: '>=12'} dependencies: - semver: 7.3.8 + semver: 7.5.0 dev: true /semver-utils/1.1.4: @@ -6406,6 +6390,14 @@ packages: lru-cache: 6.0.0 dev: true + /semver/7.5.0: + resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + /serialize-javascript/4.0.0: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} dependencies: @@ -6440,8 +6432,8 @@ packages: engines: {node: '>=8'} dev: true - /shell-quote/1.7.3: - resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} + /shell-quote/1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: true /shiki/0.14.1: @@ -6457,21 +6449,22 @@ packages: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 - object-inspect: 1.12.2 + get-intrinsic: 1.2.0 + object-inspect: 1.12.3 dev: true /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /sigstore/1.0.0: - resolution: {integrity: sha512-e+qfbn/zf1+rCza/BhIA//Awmf0v1pa5HQS8Xk8iXrn9bgytytVLqYD0P7NSqZ6IELTgq+tcDvLPkQjNHyWLNg==} + /sigstore/1.3.0: + resolution: {integrity: sha512-dhdv+jOAi1RgLHw13lxumk3rlgZtumUz9QrCNPTx9MazUnUV3BfAb74oYAMPQQ7uaeogB5vTosbz3POzKbEHUQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true dependencies: - make-fetch-happen: 11.0.1 - tuf-js: 1.0.0 + '@sigstore/protobuf-specs': 0.1.0 + make-fetch-happen: 11.1.0 + tuf-js: 1.1.4 transitivePeerDependencies: - bluebird - supports-color @@ -6508,7 +6501,7 @@ packages: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} dependencies: - ansi-styles: 6.1.1 + ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 dev: true @@ -6523,13 +6516,13 @@ packages: dependencies: agent-base: 6.0.2 debug: 4.3.4 - socks: 2.7.0 + socks: 2.7.1 transitivePeerDependencies: - supports-color dev: true - /socks/2.7.0: - resolution: {integrity: sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==} + /socks/2.7.1: + resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} dependencies: ip: 2.0.0 @@ -6562,11 +6555,11 @@ packages: cross-spawn: 7.0.3 dev: true - /spdx-correct/3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + /spdx-correct/3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.13 dev: true /spdx-exceptions/2.3.0: @@ -6577,11 +6570,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.12 + spdx-license-ids: 3.0.13 dev: true - /spdx-license-ids/3.0.12: - resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} + /spdx-license-ids/3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true /split/1.0.1: @@ -6593,29 +6586,29 @@ packages: /split2/3.2.2: resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} dependencies: - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /ssri/10.0.0: - resolution: {integrity: sha512-64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw==} + /ssri/10.0.3: + resolution: {integrity: sha512-lJtX/BFPI/VEtxZmLfeh7pzisIs6micwZ3eruD3+ds9aPsXKlYpwDS2Q7omD6WC42WO9+bnUSzlMmfv8uK8meg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minipass: 3.3.4 + minipass: 4.2.8 dev: true /ssri/9.0.1: resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - minipass: 3.3.4 + minipass: 3.3.6 dev: true - /stack-utils/2.0.5: - resolution: {integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==} + /stack-utils/2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 @@ -6652,29 +6645,38 @@ packages: strip-ansi: 7.0.1 dev: true - /string.prototype.padend/3.1.3: - resolution: {integrity: sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==} + /string.prototype.padend/3.1.4: + resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + dev: true + + /string.prototype.trim/1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.3 + define-properties: 1.2.0 + es-abstract: 1.21.2 dev: true - /string.prototype.trimend/1.0.5: - resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} + /string.prototype.trimend/1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.3 + define-properties: 1.2.0 + es-abstract: 1.21.2 dev: true - /string.prototype.trimstart/1.0.5: - resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} + /string.prototype.trimstart/1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.3 + define-properties: 1.2.0 + es-abstract: 1.21.2 dev: true /string_decoder/1.1.1: @@ -6782,13 +6784,13 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /tar/6.1.11: - resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==} - engines: {node: '>= 10'} + /tar/6.1.13: + resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} + engines: {node: '>=10'} dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 - minipass: 3.3.4 + minipass: 4.2.8 minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 @@ -6807,13 +6809,13 @@ packages: uuid: 3.4.0 dev: true - /terser/5.16.0: - resolution: {integrity: sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==} + /terser/5.17.1: + resolution: {integrity: sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.2 - acorn: 8.8.0 + '@jridgewell/source-map': 0.3.3 + acorn: 8.8.2 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -6843,14 +6845,14 @@ packages: /through2/2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: - readable-stream: 2.3.7 + readable-stream: 2.3.8 xtend: 4.0.2 dev: true /through2/4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} dependencies: - readable-stream: 3.6.0 + readable-stream: 3.6.2 dev: true /tmpl/1.0.5: @@ -6874,7 +6876,7 @@ packages: engines: {node: '>=6'} dependencies: psl: 1.9.0 - punycode: 2.1.1 + punycode: 2.3.0 universalify: 0.2.0 url-parse: 1.5.10 dev: true @@ -6883,7 +6885,7 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} dependencies: - punycode: 2.1.1 + punycode: 2.3.0 dev: true /trim-newlines/3.0.1: @@ -6898,8 +6900,8 @@ packages: escape-string-regexp: 1.0.5 dev: true - /ts-jest/29.0.5_doipufordlnvh5g4adbwayvyvy: - resolution: {integrity: sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==} + /ts-jest/29.1.0_tobmchb5uviuq5lwsinkw5fvje: + resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -6908,7 +6910,7 @@ packages: babel-jest: ^29.0.0 esbuild: '*' jest: ^29.0.0 - typescript: '>=4.3' + typescript: '>=4.3 <6' peerDependenciesMeta: '@babel/core': optional: true @@ -6921,17 +6923,17 @@ packages: dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.5.0_@types+node@18.15.0 - jest-util: 29.3.1 + jest: 29.5.0_@types+node@18.15.11 + jest-util: 29.5.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.3.8 - typescript: 4.9.5 + semver: 7.5.0 + typescript: 5.0.4 yargs-parser: 21.1.1 dev: true - /ts-node/10.9.1_lwgqdwokjtwlohdqtbb6s252kq: + /ts-node/10.9.1_bhanhq442dy43ncydsavgi4jfi: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -6950,14 +6952,14 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 18.15.0 - acorn: 8.8.0 + '@types/node': 18.15.11 + acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.9.5 + typescript: 5.0.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -6970,33 +6972,33 @@ packages: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} dev: true - /tsutils/3.21.0_typescript@4.9.5: + /tsutils/3.21.0_typescript@5.0.4: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 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' dependencies: tslib: 1.14.1 - typescript: 4.9.5 + typescript: 5.0.4 dev: true - /tsx/3.12.1: - resolution: {integrity: sha512-Rcg1x+rNe7qwlP8j7kx4VjP/pJo/V57k+17hlrn6a7FuQLNwkaw5W4JF75tYornNVCxkXdSUnqlIT8JY/ttvIw==} + /tsx/3.12.6: + resolution: {integrity: sha512-q93WgS3lBdHlPgS0h1i+87Pt6n9K/qULIMNYZo07nSeu2z5QE2CellcAZfofVXBo2tQg9av2ZcRMQ2S2i5oadQ==} hasBin: true dependencies: - '@esbuild-kit/cjs-loader': 2.4.1 - '@esbuild-kit/core-utils': 3.0.0 - '@esbuild-kit/esm-loader': 2.5.1 + '@esbuild-kit/cjs-loader': 2.4.2 + '@esbuild-kit/core-utils': 3.1.0 + '@esbuild-kit/esm-loader': 2.5.5 optionalDependencies: fsevents: 2.3.2 dev: true - /tuf-js/1.0.0: - resolution: {integrity: sha512-1dxsQwESDzACJjTdYHQ4wJ1f/of7jALWKfJEHSBWUQB/5UTJUx9SW6GHXp4mZ1KvdBRJCpGjssoPFGi4hvw8/A==} + /tuf-js/1.1.4: + resolution: {integrity: sha512-Lw2JRM3HTYhEtQJM2Th3aNCPbnXirtWMl065BawwmM2pX6XStH/ZO9e8T2hh0zk/HUa+1i6j+Lv6eDitKTau6A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - make-fetch-happen: 11.0.1 - minimatch: 6.2.0 + '@tufjs/models': 1.0.3 + make-fetch-happen: 11.1.0 transitivePeerDependencies: - bluebird - supports-color @@ -7056,24 +7058,32 @@ packages: engines: {node: '>=12.20'} dev: true + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.10 + dev: true + /typedarray-to-buffer/3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 dev: true - /typedoc/0.24.1_typescript@4.9.5: - resolution: {integrity: sha512-u4HwjZcSQhQSkkhLjgcs0ooAf6HrFVLDHHrwU2xZW8WxH0KnGZlNkaWxiOcK5Gagj7mxJSgwWx0dv8ACDAOXAQ==} + /typedoc/0.24.4_typescript@5.0.4: + resolution: {integrity: sha512-vQuliyGhJEGeKzzCFHbkS3m0gHoIL6cfr0fHf6eX658iGELtq2J9mWe0b+X5McEYgFoMuHFt5Py3Zug6Sxjn/Q==} engines: {node: '>= 14.14'} hasBin: true peerDependencies: typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x dependencies: lunr: 2.3.9 - marked: 4.2.12 - minimatch: 7.4.2 + marked: 4.3.0 + minimatch: 9.0.0 shiki: 0.14.1 - typescript: 4.9.5 + typescript: 5.0.4 dev: true /typescript/4.8.4: @@ -7082,14 +7092,14 @@ packages: hasBin: true dev: true - /typescript/4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} + /typescript/5.0.4: + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} + engines: {node: '>=12.20'} hasBin: true dev: true - /uglify-js/3.17.1: - resolution: {integrity: sha512-+juFBsLLw7AqMaqJ0GFvlsGZwdQfI2ooKQB39PSBgMnMakcFosi9O8jCwE+2/2nMNcc0z63r9mwjoDG8zr+q0Q==} + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} hasBin: true requiresBuild: true @@ -7160,13 +7170,13 @@ packages: engines: {node: '>=8'} dev: true - /update-browserslist-db/1.0.9_browserslist@4.21.4: - resolution: {integrity: sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==} + /update-browserslist-db/1.0.11_browserslist@4.21.5: + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.4 + browserslist: 4.21.5 escalade: 3.1.1 picocolors: 1.0.0 dev: true @@ -7175,7 +7185,7 @@ packages: resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} engines: {node: '>=14.16'} dependencies: - boxen: 7.0.0 + boxen: 7.0.2 chalk: 5.2.0 configstore: 6.0.0 has-yarn: 3.0.0 @@ -7183,10 +7193,10 @@ packages: is-ci: 3.0.1 is-installed-globally: 0.4.0 is-npm: 6.0.0 - is-yarn-global: 0.4.0 + is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.3.8 + semver: 7.5.0 semver-diff: 4.0.0 xdg-basedir: 5.1.0 dev: true @@ -7194,7 +7204,7 @@ packages: /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.1.1 + punycode: 2.3.0 dev: true /url-parse/1.5.10: @@ -7218,19 +7228,19 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-to-istanbul/9.0.1: - resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} + /v8-to-istanbul/9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/trace-mapping': 0.3.18 '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.8.0 + convert-source-map: 1.9.0 dev: true /validate-npm-package-license/3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: - spdx-correct: 3.1.1 + spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 dev: true @@ -7241,8 +7251,8 @@ packages: builtins: 5.0.1 dev: true - /validator/13.7.0: - resolution: {integrity: sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==} + /validator/13.9.0: + resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==} engines: {node: '>= 0.10'} dev: true @@ -7254,16 +7264,9 @@ packages: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: true - /w3c-hr-time/1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - dependencies: - browser-process-hrtime: 1.0.0 - dev: true - - /w3c-xmlserializer/3.0.0: - resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} - engines: {node: '>=12'} + /w3c-xmlserializer/4.0.0: + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} dependencies: xml-name-validator: 4.0.0 dev: true @@ -7309,6 +7312,18 @@ packages: is-symbol: 1.0.4 dev: true + /which-typed-array/1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.10 + dev: true + /which/1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -7372,11 +7387,11 @@ packages: strip-ansi: 6.0.1 dev: true - /wrap-ansi/8.0.1: - resolution: {integrity: sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==} + /wrap-ansi/8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} dependencies: - ansi-styles: 6.1.1 + ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.0.1 dev: true @@ -7402,12 +7417,12 @@ packages: signal-exit: 3.0.7 dev: true - /ws/8.9.0: - resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==} + /ws/8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true @@ -7439,13 +7454,12 @@ packages: engines: {node: '>=10'} dev: true - /yallist/4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true - /yaml/2.1.3: - resolution: {integrity: sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==} - engines: {node: '>= 14'} + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true /yaml/2.2.1: @@ -7476,11 +7490,11 @@ packages: yargs-parser: 20.2.9 dev: true - /yargs/17.5.1: - resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} + /yargs/17.7.1: + resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} engines: {node: '>=12'} dependencies: - cliui: 7.0.4 + cliui: 8.0.1 escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 @@ -7499,14 +7513,14 @@ packages: engines: {node: '>=10'} dev: true - /z-schema/5.0.4: - resolution: {integrity: sha512-gm/lx3hDzJNcLwseIeQVm1UcwhWIKpSB4NqH89pTBtFns4k/HDHudsICtvG05Bvw/Mv3jMyk700y5dadueLHdA==} + /z-schema/5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} engines: {node: '>=8.0.0'} hasBin: true dependencies: lodash.get: 4.4.2 lodash.isequal: 4.5.0 - validator: 13.7.0 + validator: 13.9.0 optionalDependencies: - commander: 2.20.3 + commander: 9.5.0 dev: true From 6c976f8bf5e7f63d956b024809daaa6ebcb4a563 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Wed, 19 Apr 2023 22:44:43 +0800 Subject: [PATCH 11/30] chore(tsconfig): update ts5.0 config --- tsconfig.json | 1 - 1 file changed, 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 4bf4b842..a2f0ab48 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,6 @@ // "rootDir": "src", "forceConsistentCasingInFileNames": false, "importHelpers": true, - "suppressImplicitAnyIndexErrors": true, "experimentalDecorators": true, "esModuleInterop": true, "strict": true, From d056a0607e0713c9dd6ca2e86270bc557fdc2da4 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Wed, 19 Apr 2023 22:45:16 +0800 Subject: [PATCH 12/30] refactor(object/iterate): fix types --- src/object/iterate.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/object/iterate.ts b/src/object/iterate.ts index 2f2a0848..07546044 100644 --- a/src/object/iterate.ts +++ b/src/object/iterate.ts @@ -65,7 +65,7 @@ export function replaceValues | Array replacement: (v: unknown, k: string, target: T) => unknown, ) { forEachObj(target, (v, k): void => { - target[k as string] = replacement(v, k as string, target); + (target as any)[k] = replacement(v, k as string, target); }); return target; } From ac01c6846f0226eab8359cc9858590545e7cb107 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Wed, 19 Apr 2023 23:38:38 +0800 Subject: [PATCH 13/30] =?UTF-8?q?feat(time):=20getStartOfWeek=20=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=9F=90=E6=97=A5=E6=89=80=E5=9C=A8=E6=98=9F=E6=9C=9F?= =?UTF-8?q?=E5=BC=80=E5=A7=8B=E7=9A=84date?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/time/getStartOfWeek.ts | 28 ++++++++++++++++++++++++++++ src/time/index.ts | 1 + 2 files changed, 29 insertions(+) create mode 100644 src/time/getStartOfWeek.ts diff --git a/src/time/getStartOfWeek.ts b/src/time/getStartOfWeek.ts new file mode 100644 index 00000000..93328290 --- /dev/null +++ b/src/time/getStartOfWeek.ts @@ -0,0 +1,28 @@ +import { getStartOfDate } from './getStartOfDate'; + +/** + * 获取某日所在星期开始的date + * + * @example + * + * ```typescript + * formatDate(getStartOfWeek(new Date('2023/04/19'))); // '2023-04-17 00:00:00' + * formatDate(getStartOfWeek(new Date('2023/04/20'))); // '2023-04-17 00:00:00' + * formatDate(getStartOfWeek(new Date('2023/04/16'))); // '2023-04-10 00:00:00' + * formatDate(getStartOfWeek(new Date('2023/04/10'))); // '2023-04-10 00:00:00' + * + * formatDate(getStartOfWeek(new Date('2023/04/19'), 'SunDay')); // '2023-04-16 00:00:00' + * formatDate(getStartOfWeek(new Date('2023/04/16'), 'SunDay')); // '2023-04-16 00:00:00' + * formatDate(getStartOfWeek(new Date('2023/04/09'), 'SunDay')); // '2023-04-09 00:00:00' + * formatDate(getStartOfWeek(new Date('2023/04/10'), 'SunDay')); // '2023-04-09 00:00:00' + * ``` + * + * @param date + * @param [weekBegin='monday'] 每个星期开始,可选'SunDay'|'MonDay' 周一 周日,默认周一 + */ +export function getStartOfWeek(date: Date, weekBegin: 'SunDay' | 'MonDay' = 'MonDay'): Date { + const d = new Date(date); + const [begin, offset] = weekBegin === 'MonDay' ? [7, -1] : [0, 0]; + d.setDate(d.getDate() - ((d.getDay() || begin) + offset)); + return getStartOfDate(d); +} diff --git a/src/time/index.ts b/src/time/index.ts index 2b1f506e..52e6139f 100644 --- a/src/time/index.ts +++ b/src/time/index.ts @@ -1,2 +1,3 @@ export * from './time'; export * from './getStartOfDate'; +export * from './getStartOfWeek'; From 6357dfd0a7b1b021fec33820cdeec9d490eb7021 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Wed, 19 Apr 2023 23:40:31 +0800 Subject: [PATCH 14/30] =?UTF-8?q?test(time):=20getStartOfWeek=20=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=9F=90=E4=B8=80=E5=A4=A9=E7=9A=84=E5=BC=80=E5=A7=8B?= =?UTF-8?q?Date?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __tests__/time.test.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/__tests__/time.test.ts b/__tests__/time.test.ts index ecb66eb3..cf624f95 100644 --- a/__tests__/time.test.ts +++ b/__tests__/time.test.ts @@ -15,6 +15,7 @@ import { getTimePeriodConst, howLongAgo, getStartOfDate, + getStartOfWeek, } from '../src/time'; import { chunk, createArray, inRange } from '@mxssfd/core'; @@ -495,4 +496,23 @@ describe('time', function () { test('getDateBegin', () => { expect(formatDate(getStartOfDate(new Date('2023/04/19 12:10:50')))).toBe('2023-04-19 00:00:00'); }); + test('getStartOfWeek', () => { + expect(formatDate(getStartOfWeek(new Date('2023/04/19')))).toBe('2023-04-17 00:00:00'); + expect(formatDate(getStartOfWeek(new Date('2023/04/20')))).toBe('2023-04-17 00:00:00'); + expect(formatDate(getStartOfWeek(new Date('2023/04/16')))).toBe('2023-04-10 00:00:00'); + expect(formatDate(getStartOfWeek(new Date('2023/04/10')))).toBe('2023-04-10 00:00:00'); + + expect(formatDate(getStartOfWeek(new Date('2023/04/19'), 'SunDay'))).toBe( + '2023-04-16 00:00:00', + ); + expect(formatDate(getStartOfWeek(new Date('2023/04/16'), 'SunDay'))).toBe( + '2023-04-16 00:00:00', + ); + expect(formatDate(getStartOfWeek(new Date('2023/04/09'), 'SunDay'))).toBe( + '2023-04-09 00:00:00', + ); + expect(formatDate(getStartOfWeek(new Date('2023/04/10'), 'SunDay'))).toBe( + '2023-04-09 00:00:00', + ); + }); }); From 871f258e65ad96bcec0f4b34727cff8b90c7eca8 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Wed, 19 Apr 2023 23:41:56 +0800 Subject: [PATCH 15/30] =?UTF-8?q?feat(time):=20getStartOfNextWeek=20?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9F=90=E6=97=A5=E4=B8=8B=E4=B8=AA=E6=98=9F?= =?UTF-8?q?=E6=9C=9F=E5=BC=80=E5=A7=8B=E7=9A=84date?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/time/getStartOfNextWeek.ts | 27 +++++++++++++++++++++++++++ src/time/index.ts | 1 + 2 files changed, 28 insertions(+) create mode 100644 src/time/getStartOfNextWeek.ts diff --git a/src/time/getStartOfNextWeek.ts b/src/time/getStartOfNextWeek.ts new file mode 100644 index 00000000..fc8a681a --- /dev/null +++ b/src/time/getStartOfNextWeek.ts @@ -0,0 +1,27 @@ +import { getStartOfWeek } from './getStartOfWeek'; + +/** + * 获取某日下个星期开始的date + * + * @example + * + * ```typescript + * formatDate(getStartOfNextWeek(new Date('2023/04/19'))); // '2023-04-24 00:00:00' + * formatDate(getStartOfNextWeek(new Date('2023/04/20'))); // '2023-04-24 00:00:00' + * formatDate(getStartOfNextWeek(new Date('2023/04/16'))); // '2023-04-17 00:00:00' + * formatDate(getStartOfNextWeek(new Date('2023/04/10'))); // '2023-04-17 00:00:00' + * + * formatDate(getStartOfNextWeek(new Date('2023/04/19'), 'SunDay')); // '2023-04-23 00:00:00' + * formatDate(getStartOfNextWeek(new Date('2023/04/16'), 'SunDay')); // '2023-04-23 00:00:00' + * formatDate(getStartOfNextWeek(new Date('2023/04/09'), 'SunDay')); // '2023-04-16 00:00:00' + * formatDate(getStartOfNextWeek(new Date('2023/04/10'), 'SunDay')); // '2023-04-16 00:00:00' + * ``` + * + * @param date + * @param [weekBegin='monday'] 每个星期开始,可选'SunDay'|'MonDay' 周一 周日,默认周一 + */ +export function getStartOfNextWeek(date: Date, weekBegin: 'SunDay' | 'MonDay' = 'MonDay'): Date { + const d = getStartOfWeek(date, weekBegin); + d.setDate(d.getDate() + 7); + return d; +} diff --git a/src/time/index.ts b/src/time/index.ts index 52e6139f..3685e2d0 100644 --- a/src/time/index.ts +++ b/src/time/index.ts @@ -1,3 +1,4 @@ export * from './time'; export * from './getStartOfDate'; export * from './getStartOfWeek'; +export * from './getStartOfNextWeek'; From 73c117441a8e01e7bd1e62ff8b6c4cfa94fb5eb0 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Wed, 19 Apr 2023 23:42:53 +0800 Subject: [PATCH 16/30] =?UTF-8?q?test(time):=20getStartOfNextWeek=20?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9F=90=E6=97=A5=E4=B8=8B=E4=B8=AA=E6=98=9F?= =?UTF-8?q?=E6=9C=9F=E5=BC=80=E5=A7=8B=E7=9A=84date?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __tests__/time.test.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/__tests__/time.test.ts b/__tests__/time.test.ts index cf624f95..87622774 100644 --- a/__tests__/time.test.ts +++ b/__tests__/time.test.ts @@ -16,6 +16,7 @@ import { howLongAgo, getStartOfDate, getStartOfWeek, + getStartOfNextWeek, } from '../src/time'; import { chunk, createArray, inRange } from '@mxssfd/core'; @@ -515,4 +516,23 @@ describe('time', function () { '2023-04-09 00:00:00', ); }); + test('getStartOfNextWeek', () => { + expect(formatDate(getStartOfNextWeek(new Date('2023/04/19')))).toBe('2023-04-24 00:00:00'); + expect(formatDate(getStartOfNextWeek(new Date('2023/04/20')))).toBe('2023-04-24 00:00:00'); + expect(formatDate(getStartOfNextWeek(new Date('2023/04/16')))).toBe('2023-04-17 00:00:00'); + expect(formatDate(getStartOfNextWeek(new Date('2023/04/10')))).toBe('2023-04-17 00:00:00'); + + expect(formatDate(getStartOfNextWeek(new Date('2023/04/19'), 'SunDay'))).toBe( + '2023-04-23 00:00:00', + ); + expect(formatDate(getStartOfNextWeek(new Date('2023/04/16'), 'SunDay'))).toBe( + '2023-04-23 00:00:00', + ); + expect(formatDate(getStartOfNextWeek(new Date('2023/04/09'), 'SunDay'))).toBe( + '2023-04-16 00:00:00', + ); + expect(formatDate(getStartOfNextWeek(new Date('2023/04/10'), 'SunDay'))).toBe( + '2023-04-16 00:00:00', + ); + }); }); From fecefdef0cc2fcffba221febd287789de7a21995 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 20 Apr 2023 12:19:04 +0800 Subject: [PATCH 17/30] =?UTF-8?q?fix(time/getTheLastDateOfAMonth):=20?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E6=97=B6=E9=97=B4=E6=9C=AA=E5=BD=92=E9=9B=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/time/time.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/time/time.ts b/src/time/time.ts index 1dd067a1..c29f9048 100644 --- a/src/time/time.ts +++ b/src/time/time.ts @@ -402,9 +402,8 @@ export function createTimeCountDown(timeout: number): ReturnType Date: Thu, 20 Apr 2023 12:19:14 +0800 Subject: [PATCH 18/30] =?UTF-8?q?test(time/getTheLastDateOfAMonth):=20?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E6=97=B6=E9=97=B4=E6=9C=AA=E5=BD=92=E9=9B=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __tests__/time.test.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/__tests__/time.test.ts b/__tests__/time.test.ts index 87622774..0b19f597 100644 --- a/__tests__/time.test.ts +++ b/__tests__/time.test.ts @@ -239,6 +239,15 @@ describe('time', function () { expect(getTheLastDateOfAMonth(new Date('2021-11')).getDate()).toBe(30); expect(getTheLastDateOfAMonth(new Date('2021-12')).getDate()).toBe(31); expect(getTheLastDateOfAMonth(new Date('2020-2')).getDate()).toBe(29); + expect(formatDate(getTheLastDateOfAMonth(new Date('2020/02/10 10:00:00')))).toBe( + '2020-02-29 00:00:00', + ); + expect(formatDate(getTheLastDateOfAMonth(new Date('2020/12/10 10:00:00')))).toBe( + '2020-12-31 00:00:00', + ); + expect(formatDate(getTheLastDateOfAMonth(new Date('2023/12/10 10:00:00')))).toBe( + '2023-12-31 00:00:00', + ); }); test('getMonthTheNthWeekday', async () => { // const fn = t.getMonthTheLastWeekDay; From e6794a207e46920c838a8fd03260e83b532be2e1 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 20 Apr 2023 12:28:33 +0800 Subject: [PATCH 19/30] test: fix ts type --- __tests__/object/iterate.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/__tests__/object/iterate.test.ts b/__tests__/object/iterate.test.ts index 5578eb69..6e930348 100644 --- a/__tests__/object/iterate.test.ts +++ b/__tests__/object/iterate.test.ts @@ -29,7 +29,7 @@ describe('object.iterate', function () { expect( forEachObj( [1, 2], - (i) => (i > 0 ? false : undefined), + (i) => ((i as number) > 0 ? false : undefined), () => (ec = 1), ), ).toBeFalsy(); @@ -55,7 +55,7 @@ describe('object.iterate', function () { expect(feo(obj)).toEqual( Object.keys(obj).reduce((res, key) => { - res.push([obj[key], key, obj]); + res.push([obj[key as keyof typeof obj], key, obj]); return res; }, [] as any[]), ); From cf57ef78708a33be6623a7233a91f6c05e4cf2ee Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 20 Apr 2023 12:30:38 +0800 Subject: [PATCH 20/30] =?UTF-8?q?feat(time):=20getTheLastDateOfAMonth=20?= =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D=E4=B8=BA=20getEndOfMonth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BREAKING CHANGE: getTheLastDateOfAMonth 不能再使用 --- src/time/getEndOfMonth.ts | 25 +++++++++++++++++++++++++ src/time/index.ts | 1 + src/time/time.ts | 31 +++---------------------------- 3 files changed, 29 insertions(+), 28 deletions(-) create mode 100644 src/time/getEndOfMonth.ts diff --git a/src/time/getEndOfMonth.ts b/src/time/getEndOfMonth.ts new file mode 100644 index 00000000..1a9c9fbb --- /dev/null +++ b/src/time/getEndOfMonth.ts @@ -0,0 +1,25 @@ +/** + * 获取某月最后一天的date + * + * @example + * + * getEndOfMonth(new Date('2021-1')).getDate(); // 31 + * getEndOfMonth(new Date('2021-2')).getDate(); // 28 + * getEndOfMonth(new Date('2021-3')).getDate(); // 31 + * getEndOfMonth(new Date('2021-4')).getDate(); // 30 + * getEndOfMonth(new Date('2021-5')).getDate(); // 31 + * getEndOfMonth(new Date('2021-6')).getDate(); // 30 + * getEndOfMonth(new Date('2021-7')).getDate(); // 31 + * getEndOfMonth(new Date('2021-8')).getDate(); // 31 + * getEndOfMonth(new Date('2021-9')).getDate(); // 30 + * getEndOfMonth(new Date('2021-10')).getDate(); // 31 + * getEndOfMonth(new Date('2021-11')).getDate(); // 30 + * getEndOfMonth(new Date('2021-12')).getDate(); // 31 + * getEndOfMonth(new Date('2020-2')).getDate(); // 29 + * + */ +export function getEndOfMonth(monthDate: Date): Date { + const lastDate = new Date(monthDate.getFullYear(), monthDate.getMonth() + 1, monthDate.getDate()); + lastDate.setDate(0); + return lastDate; +} diff --git a/src/time/index.ts b/src/time/index.ts index 3685e2d0..e7af4186 100644 --- a/src/time/index.ts +++ b/src/time/index.ts @@ -1,4 +1,5 @@ export * from './time'; +export * from './getEndOfMonth'; export * from './getStartOfDate'; export * from './getStartOfWeek'; export * from './getStartOfNextWeek'; diff --git a/src/time/time.ts b/src/time/time.ts index c29f9048..77737bc8 100644 --- a/src/time/time.ts +++ b/src/time/time.ts @@ -1,4 +1,5 @@ import { inRange } from '../array'; +import { getEndOfMonth } from './getEndOfMonth'; /** * 把毫秒值转为天数 @@ -382,32 +383,6 @@ export function createTimeCountDown(timeout: number): ReturnType 7) return null; if (!nth || !inRange(weekday, [0, 7])) return null; const monthTime = month.getTime(); - const endDate = getTheLastDateOfAMonth(month); + const endDate = getEndOfMonth(month); let date: Date; if (nth > 0) { @@ -612,7 +587,7 @@ export function yearDiff(a: Date, b: Date): number { const dates = a.getDate() - b.getDate(); - months += ~~((dates * 100) / (getTheLastDateOfAMonth(a).getDate() - 1)) / 100; + months += ~~((dates * 100) / (getEndOfMonth(a).getDate() - 1)) / 100; return ~~((months * 1000) / 12) / 1000; } From 0f4b49e5ce45f84172f11b3e697918573e35bd9b Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 20 Apr 2023 12:30:56 +0800 Subject: [PATCH 21/30] =?UTF-8?q?test(time):=20getTheLastDateOfAMonth=20?= =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D=E4=B8=BA=20getEndOfMonth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __tests__/time.test.ts | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/__tests__/time.test.ts b/__tests__/time.test.ts index 0b19f597..4589b231 100644 --- a/__tests__/time.test.ts +++ b/__tests__/time.test.ts @@ -4,7 +4,7 @@ import { formatDate, createTimeCountUp, createTimeCountDown, - getTheLastDateOfAMonth, + getEndOfMonth, dateDiff, isSameTime, inSameWeek, @@ -225,29 +225,23 @@ describe('time', function () { // ); }); - test('getTheLastDayOfAMonth', async () => { - expect(getTheLastDateOfAMonth(new Date('2021-1')).getDate()).toBe(31); - expect(getTheLastDateOfAMonth(new Date('2021-2')).getDate()).toBe(28); - expect(getTheLastDateOfAMonth(new Date('2021-3')).getDate()).toBe(31); - expect(getTheLastDateOfAMonth(new Date('2021-4')).getDate()).toBe(30); - expect(getTheLastDateOfAMonth(new Date('2021-5')).getDate()).toBe(31); - expect(getTheLastDateOfAMonth(new Date('2021-6')).getDate()).toBe(30); - expect(getTheLastDateOfAMonth(new Date('2021-7')).getDate()).toBe(31); - expect(getTheLastDateOfAMonth(new Date('2021-8')).getDate()).toBe(31); - expect(getTheLastDateOfAMonth(new Date('2021-9')).getDate()).toBe(30); - expect(getTheLastDateOfAMonth(new Date('2021-10')).getDate()).toBe(31); - expect(getTheLastDateOfAMonth(new Date('2021-11')).getDate()).toBe(30); - expect(getTheLastDateOfAMonth(new Date('2021-12')).getDate()).toBe(31); - expect(getTheLastDateOfAMonth(new Date('2020-2')).getDate()).toBe(29); - expect(formatDate(getTheLastDateOfAMonth(new Date('2020/02/10 10:00:00')))).toBe( - '2020-02-29 00:00:00', - ); - expect(formatDate(getTheLastDateOfAMonth(new Date('2020/12/10 10:00:00')))).toBe( - '2020-12-31 00:00:00', - ); - expect(formatDate(getTheLastDateOfAMonth(new Date('2023/12/10 10:00:00')))).toBe( - '2023-12-31 00:00:00', - ); + test('getEndOfMonth', async () => { + expect(getEndOfMonth(new Date('2021-1')).getDate()).toBe(31); + expect(getEndOfMonth(new Date('2021-2')).getDate()).toBe(28); + expect(getEndOfMonth(new Date('2021-3')).getDate()).toBe(31); + expect(getEndOfMonth(new Date('2021-4')).getDate()).toBe(30); + expect(getEndOfMonth(new Date('2021-5')).getDate()).toBe(31); + expect(getEndOfMonth(new Date('2021-6')).getDate()).toBe(30); + expect(getEndOfMonth(new Date('2021-7')).getDate()).toBe(31); + expect(getEndOfMonth(new Date('2021-8')).getDate()).toBe(31); + expect(getEndOfMonth(new Date('2021-9')).getDate()).toBe(30); + expect(getEndOfMonth(new Date('2021-10')).getDate()).toBe(31); + expect(getEndOfMonth(new Date('2021-11')).getDate()).toBe(30); + expect(getEndOfMonth(new Date('2021-12')).getDate()).toBe(31); + expect(getEndOfMonth(new Date('2020-2')).getDate()).toBe(29); + expect(formatDate(getEndOfMonth(new Date('2020/02/10 10:00:00')))).toBe('2020-02-29 00:00:00'); + expect(formatDate(getEndOfMonth(new Date('2020/12/10 10:00:00')))).toBe('2020-12-31 00:00:00'); + expect(formatDate(getEndOfMonth(new Date('2023/12/10 10:00:00')))).toBe('2023-12-31 00:00:00'); }); test('getMonthTheNthWeekday', async () => { // const fn = t.getMonthTheLastWeekDay; From 0e03f14c015e23c2e18729acb3e88ac872ca4122 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 20 Apr 2023 17:37:04 +0800 Subject: [PATCH 22/30] =?UTF-8?q?chore(scripts):=20add=20single-fn-file.ts?= =?UTF-8?q?=EF=BC=9B=E6=8B=86=E5=88=86=E5=A4=9A=E5=87=BD=E6=95=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=BA=E5=8D=95=E5=87=BD=E6=95=B0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 9 ++- pnpm-lock.yaml | 123 ++++++++++++++++++++++++++++++- scripts/single-fn-file.ts | 147 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 276 insertions(+), 3 deletions(-) create mode 100644 scripts/single-fn-file.ts diff --git a/package.json b/package.json index bc505616..b4b5e576 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "typedoc:deploy": "gh-pages -d docs-html", "build": "esno scripts/build.ts -t", "release": "esno scripts/release.ts", - "yalc:publish": "yalc publish" + "yalc:publish": "yalc publish", + "split:fn": "esno scripts/single-fn-file.ts" }, "lint-staged": { "*.{json,html,md,yaml}": [ @@ -48,12 +49,18 @@ }, "homepage": "https://github.com/js-tool-pack/basic#readme", "devDependencies": { + "@babel/core": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/parser": "^7.21.4", + "@babel/preset-typescript": "^7.21.4", + "@babel/types": "^7.21.4", "@commitlint/cli": "^17.6.1", "@commitlint/config-conventional": "^17.6.1", "@microsoft/api-extractor": "^7.34.4", "@mxssfd/core": "5.0.1-beta.1", "@mxssfd/typedoc-theme": "^1.1.1", "@rollup/plugin-json": "^6.0.0", + "@types/babel__generator": "^7.6.4", "@types/fs-extra": "^11.0.1", "@types/jest": "^29.5.1", "@types/minimist": "^1.2.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6a8a2b37..b60fa761 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,6 +1,11 @@ lockfileVersion: 5.4 specifiers: + '@babel/core': ^7.21.4 + '@babel/generator': ^7.21.4 + '@babel/parser': ^7.21.4 + '@babel/preset-typescript': ^7.21.4 + '@babel/types': ^7.21.4 '@commitlint/cli': ^17.6.1 '@commitlint/config-conventional': ^17.6.1 '@microsoft/api-extractor': ^7.34.4 @@ -8,6 +13,7 @@ specifiers: '@mxssfd/typedoc-theme': ^1.1.1 '@rollup/plugin-json': ^6.0.0 '@tool-pack/types': ^0.0.2 + '@types/babel__generator': ^7.6.4 '@types/fs-extra': ^11.0.1 '@types/jest': ^29.5.1 '@types/minimist': ^1.2.2 @@ -48,12 +54,18 @@ dependencies: '@tool-pack/types': 0.0.2 devDependencies: + '@babel/core': 7.21.4 + '@babel/generator': 7.21.4 + '@babel/parser': 7.21.4 + '@babel/preset-typescript': 7.21.4_@babel+core@7.21.4 + '@babel/types': 7.21.4 '@commitlint/cli': 17.6.1 '@commitlint/config-conventional': 17.6.1 '@microsoft/api-extractor': 7.34.4_@types+node@18.15.11 '@mxssfd/core': 5.0.1-beta.1 '@mxssfd/typedoc-theme': 1.1.1_typedoc@0.24.4 '@rollup/plugin-json': 6.0.0_rollup@3.20.6 + '@types/babel__generator': 7.6.4 '@types/fs-extra': 11.0.1 '@types/jest': 29.5.1 '@types/minimist': 1.2.2 @@ -85,7 +97,7 @@ devDependencies: rollup-plugin-terser: 7.0.2_rollup@3.20.6 rollup-plugin-typescript2: 0.34.1_7z4wb4mnpapsgobacn7mivmt6i semver: 7.5.0 - ts-jest: 29.1.0_tobmchb5uviuq5lwsinkw5fvje + ts-jest: 29.1.0_ein22xsozyc5ohjtbndctplfiq tslib: 2.5.0 typedoc: 0.24.4_typescript@5.0.4 typescript: 5.0.4 @@ -145,6 +157,13 @@ packages: jsesc: 2.5.2 dev: true + /@babel/helper-annotate-as-pure/7.18.6: + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + dev: true + /@babel/helper-compilation-targets/7.21.4_@babel+core@7.21.4: resolution: {integrity: sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==} engines: {node: '>=6.9.0'} @@ -159,6 +178,25 @@ packages: semver: 6.3.0 dev: true + /@babel/helper-create-class-features-plugin/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-member-expression-to-functions': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.20.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-split-export-declaration': 7.18.6 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-environment-visitor/7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} @@ -179,6 +217,13 @@ packages: '@babel/types': 7.21.4 dev: true + /@babel/helper-member-expression-to-functions/7.21.0: + resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + dev: true + /@babel/helper-module-imports/7.21.4: resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} engines: {node: '>=6.9.0'} @@ -202,11 +247,32 @@ packages: - supports-color dev: true + /@babel/helper-optimise-call-expression/7.18.6: + resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + dev: true + /@babel/helper-plugin-utils/7.20.2: resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} dev: true + /@babel/helper-replace-supers/7.20.7: + resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-member-expression-to-functions': 7.21.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.4 + '@babel/types': 7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-simple-access/7.20.2: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} @@ -214,6 +280,13 @@ packages: '@babel/types': 7.21.4 dev: true + /@babel/helper-skip-transparent-expression-wrappers/7.20.0: + resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.4 + dev: true + /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} @@ -393,6 +466,51 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-transform-modules-commonjs/7.21.2_@babel+core@7.21.4: + resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-module-transforms': 7.21.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-simple-access': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-typescript/7.21.3_@babel+core@7.21.4: + resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.21.4_@babel+core@7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-typescript': 7.21.4_@babel+core@7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-typescript/7.21.4_@babel+core@7.21.4: + resolution: {integrity: sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.4 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-option': 7.21.0 + '@babel/plugin-syntax-jsx': 7.21.4_@babel+core@7.21.4 + '@babel/plugin-transform-modules-commonjs': 7.21.2_@babel+core@7.21.4 + '@babel/plugin-transform-typescript': 7.21.3_@babel+core@7.21.4 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/template/7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} @@ -6900,7 +7018,7 @@ packages: escape-string-regexp: 1.0.5 dev: true - /ts-jest/29.1.0_tobmchb5uviuq5lwsinkw5fvje: + /ts-jest/29.1.0_ein22xsozyc5ohjtbndctplfiq: resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -6921,6 +7039,7 @@ packages: esbuild: optional: true dependencies: + '@babel/core': 7.21.4 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 29.5.0_@types+node@18.15.11 diff --git a/scripts/single-fn-file.ts b/scripts/single-fn-file.ts new file mode 100644 index 00000000..a572798d --- /dev/null +++ b/scripts/single-fn-file.ts @@ -0,0 +1,147 @@ +import * as Path from 'path'; +import * as FS from 'fs'; +import type { + Declaration, + ExportNamedDeclaration, + FunctionDeclaration, + VariableDeclaration, +} from '@babel/types'; +import { parse } from '@babel/parser'; +import generate from '@babel/generator'; +import { prompt } from 'enquirer'; +import { Identifier } from '@babel/types'; +import chalk from 'chalk'; + +/** + * 把一个大函数集合文件转成单函数文件 + */ +async function run() { + console.log('*'.repeat(10), '大函数集合文件转成单函数文件', '*'.repeat(10)); + try { + const filepath = await selectFile(Path.resolve(__dirname, '..')); + + const functions = extractFunctionsFromFile(filepath); + console.log( + `\n提取了 ${chalk.green(functions.length)} 个函数:\n`, + chalk.green(JSON.stringify(functions, null, 2)), + ); + } catch (e) { + console.error(e); + } +} + +/** + * 大函数集合文件转成单函数文件 + */ +function extractFunctionsFromFile(filepath: string): string[] { + const fileContent = FS.readFileSync(filepath, 'utf-8'); + // 解析文件内容为 AST + const ast = parse(fileContent, { sourceType: 'module', plugins: ['typescript'] }); + + // 提取函数定义 + const nodes = ast.program.body.filter( + (node) => node.type === 'ExportNamedDeclaration', + ) as ExportNamedDeclaration[]; + + const dirname = Path.dirname(filepath); + + function getFnName(declaration: Declaration): string { + switch (declaration.type) { + case 'FunctionDeclaration': + return (declaration as FunctionDeclaration).id!.name; + case 'VariableDeclaration': + return ((declaration as VariableDeclaration).declarations[0]!.id as Identifier).name; + case 'ExportNamedDeclaration': + return getFnName((declaration as ExportNamedDeclaration).declaration!); + default: + console.error(declaration); + throw new Error(`未识别的类型:${declaration.type}`); + } + } + + // 创建文件流 + const indexStream = FS.createWriteStream(Path.resolve(dirname, `index.ts`), 'utf-8'); + nodes.forEach((node) => { + // 生成单独的函数文件内容 + const functionFileContent = generate({ + ...node, + // 去除代码后面的注释 + trailingComments: [], + }).code; + + // 获取函数名 + const filename = getFnName(node.declaration!); + + // 生成单独的函数文件 + FS.writeFileSync(Path.resolve(dirname, filename + '.ts'), functionFileContent + '\n'); + + // 写入流 index.ts导出 + indexStream.write(`export * from './${filename}';\n`); + }); + // 关闭流 + indexStream.end(); + + // 返回函数名列表 + return nodes.map(getFnName); +} + +const ignoreList = [ + /^\./, + /\.(md|json|js|tsbuildinfo|yaml|css)$/, + 'dist', + 'node_modules', + '__tests__', + 'docs-html', + 'dist', + 'scripts', + 'temp', + 'LICENSE', +]; + +/** + * 选择文件 + */ +async function selectFile(rootPath: string): Promise { + const paths = FS.readdirSync(rootPath) + .filter( + (path) => + !ignoreList.some((ignore) => + typeof ignore === 'string' ? ignore === path : ignore.test(path), + ), + ) + .map((name) => { + const path = Path.resolve(rootPath, name); + const isFile = FS.statSync(path).isFile(); + return { name, path, isFile }; + }) + .sort((a, b) => Number(a.isFile) - Number(b.isFile)); + + const { path } = await prompt<{ path: string }>([ + { + type: 'select', + name: 'path', + message: `选择文件`, + choices: paths.map<{ name: string; hint: string }>(({ name, path, isFile }) => { + return { + message: name, + name: path, + hint: isFile ? 'file' : 'dir', + }; + }), + }, + ]); + + if (!paths.find((p) => p.path === path)!.isFile) return await selectFile(path); + + const { confirm } = await prompt<{ confirm: boolean }>({ + type: 'confirm', + name: 'confirm', + message: `确定转换该文件(${path})?`, + }); + + if (!confirm) throw '取消选择文件....'; + + return path; +} + +run(); From d114f14d5ec376621228c8ac1732289bcf26d5ff Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 20 Apr 2023 17:54:20 +0800 Subject: [PATCH 23/30] test(howLongAgo): cov --- __tests__/time.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/__tests__/time.test.ts b/__tests__/time.test.ts index 4589b231..a90a99b7 100644 --- a/__tests__/time.test.ts +++ b/__tests__/time.test.ts @@ -418,6 +418,7 @@ describe('time', function () { test('howLongAgo', () => { const date = new Date('2023/4/7 00:00:00'); expect(howLongAgo(date, { now: date })).toBe('刚刚'); + expect(howLongAgo(new Date())).toBe('刚刚'); expect(howLongAgo(date, { now: new Date('2023/4/7 00:00:20') })).toBe('20秒前'); expect(howLongAgo(date, { now: new Date('2023/4/7 00:10:20') })).toBe('10分钟前'); expect(howLongAgo(date, { now: new Date('2023/4/7 08:00:00') })).toBe('8小时前'); From 8f72e86ca20664dc5678292dd61e163ec1b70d87 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 20 Apr 2023 17:55:42 +0800 Subject: [PATCH 24/30] =?UTF-8?q?refactor(time):=20=E6=8B=86=E5=88=86time?= =?UTF-8?q?=E4=B8=BA=E5=8D=95=E5=87=BD=E6=95=B0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/time/calcRelativeDate.ts | 23 + src/time/createTimeCountDown.ts | 56 +++ src/time/createTimeCountUp.ts | 47 ++ src/time/dateDiff.ts | 78 +++ src/time/formatDate.ts | 118 +++++ src/time/getMilliseconds.ts | 44 ++ src/time/getMonthTheNthWeekday.ts | 53 ++ src/time/getTimePeriodConst.ts | 40 ++ src/time/howLongAgo.ts | 147 ++++++ src/time/inSameWeek.ts | 58 +++ src/time/index.ts | 15 +- src/time/isSameTime.ts | 22 + src/time/msToDateStr.ts | 40 ++ src/time/strToDate.ts | 52 ++ src/time/time.ts | 798 ------------------------------ src/time/yearDiff.ts | 25 + 16 files changed, 817 insertions(+), 799 deletions(-) create mode 100644 src/time/calcRelativeDate.ts create mode 100644 src/time/createTimeCountDown.ts create mode 100644 src/time/createTimeCountUp.ts create mode 100644 src/time/dateDiff.ts create mode 100644 src/time/formatDate.ts create mode 100644 src/time/getMilliseconds.ts create mode 100644 src/time/getMonthTheNthWeekday.ts create mode 100644 src/time/getTimePeriodConst.ts create mode 100644 src/time/howLongAgo.ts create mode 100644 src/time/inSameWeek.ts create mode 100644 src/time/isSameTime.ts create mode 100644 src/time/msToDateStr.ts create mode 100644 src/time/strToDate.ts delete mode 100644 src/time/time.ts create mode 100644 src/time/yearDiff.ts diff --git a/src/time/calcRelativeDate.ts b/src/time/calcRelativeDate.ts new file mode 100644 index 00000000..a08a0e0c --- /dev/null +++ b/src/time/calcRelativeDate.ts @@ -0,0 +1,23 @@ +/** + * 比如根据服务器与本地时间的差值计算实际日期 + * + * @example + * + * const now = new Date(); + * const d = calcRelativeDate(now); + * + * d().getTime() === now.getTime(); // true + * + * await sleep(100); + * now.getTime() + 90 <= d().getTime() && d().getTime() <= now.getTime() + 110; // true + * + * await sleep(100); + * now.getTime() + 190 <= d().getTime() && d().getTime() <= now.getTime() + 210; // true + * + * @param init 服务器日期 + * @return {() => Date} 返回一个闭包,闭包返回实际日期,每次调用都返回实际日期 + */ +export function calcRelativeDate(init: Date) { + const diff = init.getTime() - Date.now(); + return () => new Date(Date.now() + diff); +} diff --git a/src/time/createTimeCountDown.ts b/src/time/createTimeCountDown.ts new file mode 100644 index 00000000..b09ca467 --- /dev/null +++ b/src/time/createTimeCountDown.ts @@ -0,0 +1,56 @@ +import { createTimeCountUp } from './createTimeCountUp'; + +/** + * 创建一个倒计时闭包函数 + * + * @example + * + * const timeout = 500; + * const timeCountDown = createTimeCountDown(timeout); + * + * await sleep(50); + * let t1 = timeCountDown(); + * timeout - 150 <= t1 && t1 <= timeout - 50; // true + * + * await sleep(150); + * t1 = timeCountDown(); + * timeout - 300 <= t1 && t1 <= timeout - 200; // true + * + * await sleep(350); + * timeCountDown(); // 0 + * + * t1.pause(); // 暂停 + * t1.play(); // 继续 + * + * @param timeout 倒计时时长(毫秒) + * @returns {()=> number} 返回一个闭包函数,闭包返回的是倒计时,倒计时最小为0,不会是负数 + */ +export function createTimeCountDown(timeout: number): ReturnType { + const timeCountUp = createTimeCountUp(); + const finishedFn = () => 0; + let resFn = () => { + const res = timeout - timeCountUp(); + if (res > 0) return res; + resFn = finishedFn; + return 0; + }; + function closure(): number { + return resFn(); + } + closure.pause = timeCountUp.pause; + closure.play = timeCountUp.play; + return closure; +} + +/* +/!** + * 创建一个倒计时函数 + * @param countDown 目标毫秒 + *!/ +export function createTimeCountDown(countDown: number): () => number { + const startTime = Date.now(); + return function () { + const ms = Date.now() - startTime; + return countDown - ms; + }; +}*/ diff --git a/src/time/createTimeCountUp.ts b/src/time/createTimeCountUp.ts new file mode 100644 index 00000000..d1008643 --- /dev/null +++ b/src/time/createTimeCountUp.ts @@ -0,0 +1,47 @@ +/** + * 创建一个记录了调用时间的计时器闭包函数 + * + * @example + * + * const timeCountUp = createTimeCountUp(); + * timeCountUp(); // 0 + * + * await sleep(100); + * const t1 = timeCountUp(); + * 100 <= t1 && t1 <= 200; // true + * + * await sleep(100); + * const t2 = timeCountUp(); + * 200 <= t2 && t2 <= 300; // true + * + * await sleep(600); + * const t3 = timeCountUp(); + * 800 <= t3 && t3 <= 900; // true + * + * t3.pause(); // 暂停 + * t3.play(); // 继续 + * + */ +export function createTimeCountUp(): { + (): number; + pause(): void; + play(): void; +} { + const startTime = Date.now(); + const pause = { + total: 0, + startTime: 0, + }; + function closure(this: any) { + const endTime = pause.startTime ? pause.startTime : Date.now(); + return endTime - startTime - pause.total; + } + closure.pause = function () { + pause.startTime = Date.now(); + }; + closure.play = function () { + pause.total += Date.now() - pause.startTime; + pause.startTime = 0; + }; + return closure; +} diff --git a/src/time/dateDiff.ts b/src/time/dateDiff.ts new file mode 100644 index 00000000..3968d5ec --- /dev/null +++ b/src/time/dateDiff.ts @@ -0,0 +1,78 @@ +/** + * 比较两个日期相差年天时分秒 + * + * 用于倒计时等,可与createTimeCountUp等搭配使用 + * + * @example + * + * dateDiff(new Date('2020-05-01'), new Date('2020-05-06')); // '0年5天00时00分00秒' + * dateDiff(new Date('2020-05-01'), new Date('2020-05-06'), 'dd天 hh时mm分ss秒'); // '05天 00时00分00秒' + * dateDiff(new Date('2020-05-06'), new Date('2020-05-01 3:20:10'), 'd天 hh时mm分ss秒'); // '5天 04时39分50秒' + * dateDiff(new Date('2020-05-01'), new Date('2020-05-06'), 'd天 h时m分s秒'); // '5天 0时0分0秒' + * + * @param start + * @param end + * @param [format="y年d天hh时mm分ss秒"] + */ +export function dateDiff(start: Date, end: Date, format = 'y年d天hh时mm分ss秒'): string { + let result = format; + if (start.getTime() > end.getTime()) { + [start, end] = [end, start]; + } + const targetTime = end.getTime() - start.getTime(); + const seconds = ~~(targetTime / 1000); + const obj: { + [k: string]: number; + } = { + 'S+': targetTime % 1000, + 's+': seconds % 60, + 'm+': ~~(seconds / 60) % 60, + 'h+': ~~(seconds / (60 * 60)) % 24, + 'd+': (function (): number { + const day = ~~(seconds / (60 * 60 * 24)); + // 如果要显示年,则把天余年,否则全部显示天 + // 默认一年等于365天 + return /y+/.test(result) ? day % 365 : day; + })(), + // "M+": 0, + 'y+': ~~(seconds / (60 * 60 * 24 * 365)), + }; + for (const k in obj) { + const reg = new RegExp('(' + k + ')'); + if (reg.test(result)) { + // 奇怪的bug 本地调试的时候RegExp.$1不准确,"s+"的时候$1是空字符串; 非调试的时候又没问题 + const s1 = RegExp.$1; + const v = obj[k]; + let value = String(v).padStart(s1.length, '0'); + // substring(start,end) start小于0的时候为0 substr(from,len)from小于0的时候为字符串的长度+from + value = value.substring(value.length - s1.length); //手动切割00:00 m:s "00".length - "s".length,因为strPadStart当字符串长度大于length的话不会切割 + result = result.replace(s1, value); + } + } + return result; +} + +// 比较两个日期相差年天时分秒 用于倒计时等 +/* +export function dateDiff(first: Date, second: Date, format: string = "Y年d天 H时m分s秒"): string { + const seconds = ~~((second.getTime() - first.getTime()) / 1000); + const Time: { [k: string]: number } = { + "s+": seconds % 60, + "m+": ~~(seconds / 60) % 60, + "H+": ~~(seconds / (60 * 60)) % 24, + "d+": (function (): number { + const day = ~~(seconds / (60 * 60 * 24)); + // 如果要显示年,则把天余年,否则全部显示天 + // 默认一年等于365天 + return /Y+/.test(format) ? day % 365 : day; + })(), + // "M+": 0, + "Y+": ~~(seconds / (60 * 60 * 24 * 365)), + }; + + for (let k in Time) { + format = format.replace(new RegExp(k), String(Time[k])); + } + return format; +} +*/ diff --git a/src/time/formatDate.ts b/src/time/formatDate.ts new file mode 100644 index 00000000..d0d81a32 --- /dev/null +++ b/src/time/formatDate.ts @@ -0,0 +1,118 @@ +/** + * 格式化日期 + * + * @example + * + * // 使用默认options + * const date1 = t.strToDate('2020-02-02 10:10:10') as Date; + * formatDate(date1, 'yyyy-MM-dd'); // '2020-02-02' + * formatDate(date1, 'hh:mm:ss'); // '10:10:10' + * formatDate(date1, 'dd-MM-yyyy'); // '02-02-2020' + * formatDate(date1, 'yyyyq季'); // '2020冬季' + * + * // 星期 + * formatDate(new Date('2020-01-12'), '周w'); // '周日' + * formatDate(new Date('2020-01-12'), 'w'); // '日' + * formatDate(new Date('2020-01-13'), 'w'); // '一' + * formatDate(new Date('2020-01-14'), 'w'); // '二' + * formatDate(new Date('2020-01-15'), 'w'); // '三' + * formatDate(new Date('2020-01-16'), 'w'); // '四' + * formatDate(new Date('2020-01-17'), 'w'); // '五' + * formatDate(new Date('2020-01-18'), 'w'); // '六' + * + * // 季节 + * formatDate(new Date('2020-01-12'), 'q'); // '冬' + * formatDate(new Date('2020-02-12'), 'q'); // '冬' + * formatDate(new Date('2020-03-13'), 'q'); // '春' + * formatDate(new Date('2020-04-14'), 'q'); // '春' + * formatDate(new Date('2020-05-15'), 'q'); // '春' + * formatDate(new Date('2020-06-16'), 'q'); // '夏' + * formatDate(new Date('2020-07-17'), 'q'); // '夏' + * formatDate(new Date('2020-08-18'), 'q'); // '夏' + * formatDate(new Date('2020-09-18'), 'q'); // '秋' + * formatDate(new Date('2020-10-18'), 'q'); // '秋' + * formatDate(new Date('2020-11-18'), 'q'); // '秋' + * formatDate(new Date('2020-12-18'), 'q'); // '冬' + * + * // 自定义季节名 + * const seasonNames = ['spring', 'summer', 'autumn', 'winter']; + * formatDate(new Date('2020-01-12'), 'q', { seasonNames }); // 'winter' + * + * // 自定义季节所在月份范围 + * const seasonRanges: number[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]; + * formatDate(new Date('2020-01-12'), 'q', { seasonNames, seasonRanges }); // 'spring' + * formatDate(new Date('2020-12-12'), 'q', { seasonNames, seasonRanges }); // 'winter' + * + * // 自定义星期名字 + * const weekNames = ['sunday', 'monday']; + * formatDate(new Date('2020-01-12'), 'w', { weekNames }); // 'sunday' + * + * @param [formular='yyyy-MM-dd hh:mm:ss'] + * @param formular 格式,默认:'yyyy-MM-dd hh:mm:ss' + * @param date 日期 + * @param options 可选选项 + * @param options.seasonNames 季节名数组,默认:['春', '夏', '秋', '冬'] + * @param options.seasonRanges 季节所在月份范围,默认:春季为3-5月,夏季为6-8月、秋季为9-11月、冬季为12-2月 + * @param options.weekNames 星期名数组,默认:['日', '一', '二', '三', '四', '五', '六'] + */ +export function formatDate( + date: Date, + formular = 'yyyy-MM-dd hh:mm:ss', + options?: { + seasonNames?: string[]; + seasonRanges?: number[][]; + weekNames?: string[]; + }, +) { + const opt = { + weekNames: ['日', '一', '二', '三', '四', '五', '六'], + seasonNames: ['春', '夏', '秋', '冬'], + seasonRanges: [ + [3, 4, 5], + [6, 7, 8], + [9, 10, 11], + [12, 1, 2], + ], + ...options, + }; + const o: Record = { + 'M+': () => date.getMonth() + 1, + //月份 + 'd+': () => date.getDate(), + //日 + 'h+': () => date.getHours(), + //小时 + 'm+': () => date.getMinutes(), + //分 + 's+': () => date.getSeconds(), + //秒 + q: () => { + //季度 + // 按月份区分的季度并不真的准确 + // 春季为3-5月,夏季为6-8月、秋季为9-11月、冬季为12-2月 + const month = date.getMonth() + 1; + const qIndex = opt.seasonRanges.findIndex((range) => range.includes(month)); + return opt.seasonNames[qIndex]; + }, + 'S+': () => date.getMilliseconds(), + //毫秒 + w: () => opt.weekNames[date.getDay()], //周 + }; + + if (/(y+)/.test(formular)) { + const y = RegExp.$1; + formular = formular.replace( + y, + String(date.getFullYear()).padStart(y.length, '0').slice(-y.length), + ); + } + let result = formular; + for (const k in o) { + if (new RegExp('(' + k + ')').test(formular)) { + const s1 = RegExp.$1; + const v = String((o[k] as Function)()); + result = result.replace(s1, v.padStart(s1.length, '0')); + } + } + return result; +} diff --git a/src/time/getMilliseconds.ts b/src/time/getMilliseconds.ts new file mode 100644 index 00000000..942149ee --- /dev/null +++ b/src/time/getMilliseconds.ts @@ -0,0 +1,44 @@ +/** + * 把天数、小时数,分钟数转换毫秒数 + * + * @example + * + * const fn = t.getMilliseconds; + * + * fn(); // 0 + * fn({ seconds: 1 }); // 1000 + * fn({ seconds: 1.5 }); // 1500 + * fn({ seconds: 60 }); // 1000 * 60 + * fn({ minutes: 1 }); // 1000 * 60 + * fn({ minutes: 1.5 }); // 1000 * 90 + * fn({ minutes: 1 }); // === fn({ seconds: 60 }) + * fn({ minutes: 1.5 }); // === fn({ seconds: 90 }) + * fn({ hours: 1 }); // === fn({ minutes: 60 }) + * fn({ days: 1 }); // === fn({ hours: 24 }) + * fn({ days: 1.5 }); // === fn({ hours: 36 }) + * + * @param [days=0] + * @param [hours=0] + * @param [minutes=0] + * @param [seconds=0] + */ +export function getMilliseconds({ + days = 0, + hours = 0, + minutes = 0, + seconds = 0, +}: { + days?: number; + hours?: number; + minutes?: number; + seconds?: number; +} = {}): number { + const second = 1000; + const minute = second * 60; + const hour = minute * 60; + let result = seconds * second; + result += minutes * minute; + result += hours * hour; + result += days * hour * 24; + return result; +} diff --git a/src/time/getMonthTheNthWeekday.ts b/src/time/getMonthTheNthWeekday.ts new file mode 100644 index 00000000..85fb7725 --- /dev/null +++ b/src/time/getMonthTheNthWeekday.ts @@ -0,0 +1,53 @@ +import { inRange } from '../array'; +import { getEndOfMonth } from './getEndOfMonth'; + +/** + * 获取指定某年月份(month)第n(nth)个星期几(weekday)的Date + * + * @example + * + * const fn = getMonthTheNthWeekday; + * // 2021年4月第一个周4 是 4月1号 + * fn(new Date('2021-4'), 1, 4)?.getDate(); // 1 + * // 2021年4月第一个周5 是 4月2号 + * fn(new Date('2021-4'), 1, 5)?.getDate(); // 2 + * // ... + * fn(new Date('2021-4'), 1, 6)?.getDate(); // 3 + * fn(new Date('2021-4'), 1, 0)?.getDate(); // 4 + * fn(new Date('2021-4'), 1, 7)?.getDate(); // 4 + * fn(new Date('2021-4'), 1, 7)?.getDate(); // 4 + * fn(new Date('2021-4'), 1, 1)?.getDate(); // 5 + * + * // 2021年1月最后一个周日 是 1月31号 + * fn(new Date('2021-1'), -1)?.getDate(); // 31 + * + * @param month 月份所在Date + * @param nth nth为负的时候从月末开始倒数 + * @param [weekday=0] 0和7都是周日 + */ +export function getMonthTheNthWeekday(month: Date, nth: number, weekday = 0) { + // if (!nth || weekday < 0 || weekday > 7) return null; + if (!nth || !inRange(weekday, [0, 7])) return null; + const monthTime = month.getTime(); + const endDate = getEndOfMonth(month); + let date: Date; + if (nth > 0) { + date = new Date(monthTime); + date.setDate(1); + } else { + date = new Date(endDate.getTime()); + } + weekday = weekday === 0 ? 7 : weekday; + const diff = weekday - date.getDay(); + if (nth > 0) { + diff >= 0 && nth--; + } else { + diff <= 0 && nth++; + } + const dayDate = nth * 7 + date.getDate() + diff; + if (dayDate > endDate.getDate() || dayDate < 1) { + return null; + } + date.setDate(dayDate); + return date; +} diff --git a/src/time/getTimePeriodConst.ts b/src/time/getTimePeriodConst.ts new file mode 100644 index 00000000..8c296f4c --- /dev/null +++ b/src/time/getTimePeriodConst.ts @@ -0,0 +1,40 @@ +/** + * 获取时间段常数 + * + * @returns return { + * millisecond: 1, + * second: 1000, + * minute: 60 * 1000, + * hour: 60 * 60 * 1000, + * day: 24 * 60 * 60 * 1000, + * week: 7 * 24 * 60 * 60 * 1000, + * month: 30 * 24 * 60 * 60 * 1000, + * season: (365 / 4) * 24 * 60 * 60 * 1000, + * year: 365 * 24 * 60 * 60 * 1000, + * } + */ +export const getTimePeriodConst = (function () { + const millisecond = 1; + const second = millisecond * 1000; + const minute = second * 60; + const hour = minute * 60; + const day = hour * 24; + const month = day * 30; + const season = day * (365 / 4); + const year = day * 365; + const week = day * 7; + const timeConst = { + millisecond, + second, + minute, + hour, + day, + week, + month, + season, + year, + } as const; + return function () { + return timeConst; + }; +})(); diff --git a/src/time/howLongAgo.ts b/src/time/howLongAgo.ts new file mode 100644 index 00000000..56469641 --- /dev/null +++ b/src/time/howLongAgo.ts @@ -0,0 +1,147 @@ +import { getTimePeriodConst } from './getTimePeriodConst'; +import { formatDate } from './formatDate'; + +/** + * 获取过去时间数 + * --- + * 时间匹配顺序:年、季、月、周、天、时、分、秒 + * + * @example + * ```ts + * const date = new Date('2023/4/7 00:00:00'); + * howLongAgo(date, { now: new Date('2023/4/7 00:00:20') }); // '20秒前' + * howLongAgo(date, { now: new Date('2023/4/7 00:10:20') }); // '10分钟前' + * howLongAgo(date, { now: new Date('2023/4/7 08:00:00') }); // '8小时前' + * howLongAgo(date, { now: new Date('2023/4/10 00:00:00') }); // '3天前' + * + * howLongAgo(date, { now: new Date('2023/4/15 00:00:00') }); // '1周前' + * howLongAgo(date, { now: new Date('2023/5/6 00:00:00') }); // '4周前' + * + * howLongAgo(date, { now: new Date('2023/5/7 00:00:00') }); // '1月前' + * // 因为过去多少月是按天数算的,5月有31天,所以到6月6号已经是2月前了 + * howLongAgo(date, { now: new Date('2023/6/6 00:00:00') }); // '2月前' + * howLongAgo(date, { now: new Date('2023/7/7 00:00:00') }); // '3月前' + * + * // 按天数算的,5月有31天,一季按91.25(365/4)天算 + * howLongAgo(date, { now: new Date('2023/7/8 00:00:00') }); // '1季前' + * + * howLongAgo(date, { now: new Date('2024/7/7 00:00:00') }); // '1年前' + * + * // now比date小 + * howLongAgo(date, { now: new Date('2022/7/8 00:00:00') }); // '2023-04-07 00:00:00' + * howLongAgo(date, { now: new Date('2022/7/8 00:00:00'), def: '--' }); // '--' + * howLongAgo(date, { now: new Date('2022/7/8 00:00:00'), defaultFormat: 'yyyy' }); // '2023' + * + * // 更换模板 + * const templates: Required>[1]['templates'] = {}; + * + * // 更换秒数模板 + * templates.second = '刚刚'; + * howLongAgo(date, { now: new Date('2023/4/7 00:00:20'), templates }); // '刚刚' + * + * // 更换小时数模板 + * templates.hour = '${ago} hours ago'; + * howLongAgo(date, { now: new Date('2023/4/7 08:00:00'), templates }); // '8 hours ago' + * + * // 更换周数模板 + * templates.week = '${ago}星期前'; + * howLongAgo(date, { now: new Date('2023/4/15 00:00:00'), templates }); // '1星期前' + * howLongAgo(date, { now: new Date('2023/5/6 00:00:00'), templates }); // '4星期前' + * + * // 去掉周数 + * templates.week = '~~'; + * howLongAgo(date, { now: new Date('2023/4/15 00:00:00'), templates }); // '8天前' + * howLongAgo(date, { now: new Date('2023/5/6 00:00:00'), templates }); // '29天前' + * + * // 去掉季节 + * templates.season = '~~'; + * howLongAgo(date, { now: new Date('2023/7/8 00:00:00'), templates }); // '3月前' + * + * // ------- filter ------- + * // 使用filter替换季数 + * howLongAgo(date, { + * now: new Date('2023/10/8 00:00:00'), + * filter: (res, diff) => + * res.endsWith('季前') ? ~~(diff / getTimePeriodConst().season) + ' seasons ago' : res, + * }); // '2 seasons ago' + * + * // 混合 + * howLongAgo(date, { + * now: new Date('2023/4/7 02:10:00'), + * filter: (res, diff) => { + * if (res.endsWith('小时前')) { + * const tpc = getTimePeriodConst(); + * return `${~~(diff / tpc.hour)}小时${~~((diff % tpc.hour) / tpc.minute)}分钟前`; + * } + * return res; + * }, + * }); // '2小时10分钟前' + * ``` + * + * @param date 过去的时间 + * @param {{}} options + * @param options.now 当前时间;默认为new Date() + * @param options.defaultFormat def参数${time}插槽的时间格式化模板;默认为'yyyy-MM-dd hh:mm:ss' + * @param options.def 未匹配到模版时返回的模板,支持${time}插槽;默认为'${time}' + * @param options.templates 匹配模板,支持${ago}插;当模板字符串为'~~'时会跳过该匹配模板,取自markdown的~~标记;默认为 + * { + * year: '${ago}年前', + * season: '${ago}季前', + * month: '${ago}月前', + * week: '${ago}周前', + * day: '${ago}天前', + * hour: '${ago}小时前', + * minute: '${ago}分钟前', + * second: '${ago}秒前', + * },传入模板时只会替换已填写部分模板 + * @param options.filter 过滤函数 + */ +export function howLongAgo( + date: Date, + { + now = new Date(), + defaultFormat = 'yyyy-MM-dd hh:mm:ss', + def = '${time}', + templates, + filter, + }: { + defaultFormat?: string; + def?: string; + filter?: (result: string, diff: number) => string; + now?: Date; + templates?: Partial< + Record, 'millisecond'> | 'now', string> + >; + } = {}, +): string { + const searchValue = '${ago}'; + const _templates: Required = { + now: '刚刚', + year: `${searchValue}年前`, + season: `${searchValue}季前`, + month: `${searchValue}月前`, + week: `${searchValue}周前`, + day: `${searchValue}天前`, + hour: `${searchValue}小时前`, + minute: `${searchValue}分钟前`, + second: `${searchValue}秒前`, + ...templates, + }; + const timePeriodConst = getTimePeriodConst(); + const matches: Array<[condition: number, template: string]> = ( + ['year', 'season', 'month', 'week', 'day', 'hour', 'minute', 'second'] satisfies Array< + keyof typeof _templates + > + ).map((key) => [timePeriodConst[key], _templates[key]]); + const _filter = filter || ((result) => result); + const diff = now.getTime() - date.getTime(); + const found = matches.find(([cond, tpl]) => tpl !== '~~' && diff >= cond); + if (!found) { + if (diff >= 0 && diff < 1000) return _filter(_templates.now, diff); + const res = def.replace('${time}', formatDate(date, defaultFormat)); + return _filter(res, diff); + } + const [condition, template] = found; + const res = template.replace(searchValue, String(Math.floor(diff / condition))); + return _filter(res, diff); +} diff --git a/src/time/inSameWeek.ts b/src/time/inSameWeek.ts new file mode 100644 index 00000000..ce961c10 --- /dev/null +++ b/src/time/inSameWeek.ts @@ -0,0 +1,58 @@ +/** + * 判断两个日期是否在同一个星期内 + * + * @example + * + * // 星期一 + * const monday = new Date('2022-07-11'); + * + * // 上个星期天 + * const lastSunday = new Date('2022-07-10'); + * inSameWeek({ now: monday, date: lastSunday }); // false + * inSameWeek({ now: monday, date: lastSunday, weekStart: 'Mon' }); // false + * inSameWeek({ now: monday, date: lastSunday, weekStart: 'Sun' }); // true + * + * // 星期一到星期六 + * for (let i = 0; i < 6; i++) { + * const time = new Date('2022-07-' + (11 + i)); + * inSameWeek({ now: monday, date: time }); // true + * inSameWeek({ now: monday, date: time, weekStart: 'Mon' }); // true + * inSameWeek({ now: monday, date: time, weekStart: 'Sun' }); // true + * } + * + * // 这个星期天 + * const curSunday = new Date('2022-07-17'); + * inSameWeek({ now: monday, date: curSunday }); // true + * inSameWeek({ now: monday, date: curSunday, weekStart: 'Mon' }); // true + * inSameWeek({ now: monday, date: curSunday, weekStart: 'Sun' }); // false + * + * // 与当天对比 + * inSameWeek({ date: new Date() }); // true + * + * @param options + * @param options.date 要对比的日期 + * @param options.weekStart 每个星期开始为星期一或星期天, 默认星期一 + * @param options.now 日期 默认为当天 + */ +export function inSameWeek({ + date, + weekStart = 'Mon', + now = new Date(), +}: { + date: Date; + weekStart?: 'Mon' | 'Sun'; + now?: Date; +}): boolean { + const timeStamp = date.getTime(); + const day = now.getDay() || (weekStart === 'Mon' ? 7 : 0); + const dateNum = now.getDate(); + // 时分秒归零 + const start = new Date(now.getFullYear(), now.getMonth(), dateNum); + const end = new Date(start); + const weekStartValue = weekStart === 'Mon' ? 1 : 0; + start.setDate(dateNum - day + weekStartValue); + end.setDate(dateNum + (7 - day + weekStartValue)); + const startTime = start.getTime(); + const endTime = end.getTime(); + return startTime <= timeStamp && timeStamp < endTime; +} diff --git a/src/time/index.ts b/src/time/index.ts index e7af4186..ca38ad66 100644 --- a/src/time/index.ts +++ b/src/time/index.ts @@ -1,4 +1,17 @@ -export * from './time'; +export * from './msToDateStr'; +export * from './formatDate'; +export * from './strToDate'; +export * from './dateDiff'; +export * from './createTimeCountUp'; +export * from './createTimeCountDown'; +export * from './getMonthTheNthWeekday'; +export * from './getMilliseconds'; +export * from './isSameTime'; +export * from './inSameWeek'; +export * from './yearDiff'; +export * from './calcRelativeDate'; +export * from './getTimePeriodConst'; +export * from './howLongAgo'; export * from './getEndOfMonth'; export * from './getStartOfDate'; export * from './getStartOfWeek'; diff --git a/src/time/isSameTime.ts b/src/time/isSameTime.ts new file mode 100644 index 00000000..d63f8e6c --- /dev/null +++ b/src/time/isSameTime.ts @@ -0,0 +1,22 @@ +import { formatDate } from './formatDate'; + +/** + * 判断时间是否相同 + * + * @example + * + * const date = new Date('2021-10-10'); + * const date2 = new Date('2021-10-30'); + * + * isSameTime('yyyy-MM', date, date2); // true + * isSameTime('yyyy-MM-dd', date, date2); // false + * isSameTime('yyyy hh:mm:ss', date, date2); // true + * + * @param format yyyy-MM-dd hh:mm:ss + * @param date + * @param dates + */ +export function isSameTime(format: string, date: Date, ...dates: Date[]): boolean { + const dt = formatDate(date, format); + return dates.every((date) => formatDate(date, format) === dt); +} diff --git a/src/time/msToDateStr.ts b/src/time/msToDateStr.ts new file mode 100644 index 00000000..d467ff3c --- /dev/null +++ b/src/time/msToDateStr.ts @@ -0,0 +1,40 @@ +/** + * 把毫秒值转为天数 + * + * @example + * + * msToDateStr(1000, 'd天hh时'); // '0天00时' + * msToDateStr(1000); // '0天00时00分01秒' + * msToDateStr(60 * 1000); // '0天00时01分00秒' + * msToDateStr(60 * 60 * 1000); // '0天01时00分00秒' + * msToDateStr(60 * 60 * 24 * 1000); // '1天00时00分00秒' + * + * @param ms 毫秒值 + * @param [format=d天hh时mm分ss秒] - 格式化模板,默认'd天hh时mm分ss秒' + */ +export function msToDateStr(ms: number, format = 'd天hh时mm分ss秒') { + let result = format; + const seconds = ms / 1000; + const obj: { + [k: string]: number; + } = { + 's+': seconds % 60, + 'm+': ~~(seconds / 60) % 60, + 'h+': ~~(seconds / (60 * 60)) % 24, + // 'd+': ~~(seconds / (60 * 60 * 24)) + }; + // 有多少天就显示多少天,但不会补0 + const days = ~~(seconds / (60 * 60 * 24)); + result = result.replace(/d+/, String(days)); + for (const k in obj) { + const reg = new RegExp('(' + k + ')'); + if (reg.test(result)) { + const s1 = RegExp.$1; + const v = obj[k]; + let value = String(v).padStart(s1.length, '0'); + value = value.substring(value.length - s1.length); + result = result.replace(s1, value); + } + } + return result; +} diff --git a/src/time/strToDate.ts b/src/time/strToDate.ts new file mode 100644 index 00000000..669259d0 --- /dev/null +++ b/src/time/strToDate.ts @@ -0,0 +1,52 @@ +/** + * 字符串转为date对象 + * --- + * 因为部分浏览器如苹果手机直接new Date("2018-08-01 10:20:10")会失败,所以提取出这样一个函数 + * + * 直接new Date还有时区问题,例如 + * + * ``` + * new Date('2020-05-06').getHours(); // 8 默认8点(东八区) + * new Date('2020-5-6').getHours(); // 0 默认0点 + * ``` + * + * 只有`'Tue Dec 13 2022 01:16:59 GMT+0800 (中国标准时间)'`这种时间才直接new + * + * @example + * + * [ + * '2020-02-02 10:10:10', + * '2020/02/02 10:10:10', + * '2020/02-02-10-10-10', + * '2020/02/02 10/10/10', + * '2020/02/02/10/10/10', + * ].forEach((time: any) => { + * formatDate(strToDate(time); // '2020-02-02 10:10:10' + * }); + * strToDate('' as any); // null + * strToDate('123cvsd213' as any); // null + * strToDate('2020l02/02/10/10/10' as any); // null + * strToDate(undefined as any); // null + * + * @param [date='yyyy-MM-dd hh:mm:ss'] 格式,默认值: 'yyyy-MM-dd hh:mm:ss' + */ +export function strToDate( + date: + | `${number}-${number}-${number}` + | `${number}-${number}-${number} ${number}:${number}` + | `${number}-${number}-${number} ${number}:${number}:${number}` + | `${number}/${number}/${number}` + | `${number}/${number}/${number} ${number}:${number}` + | `${number}/${number}/${number} ${number}:${number}:${number}`, +): Date | null { + // 检测非数字、非/、非:、非- + if (!date || /[^/\d: -]/.test(date)) return null; // 去除不符合规范的字符串 + const arr: number[] = date.split(/[- :/]/).map((item) => Number(item)); + if (arr.length < 6) { + for (let i = arr.length; i < 6; i++) { + arr[i] = i < 3 ? 1 : 0; // 年月日最小为1 + } + } + + return new Date(arr[0] as number, (arr[1] as number) - 1, arr[2], arr[3], arr[4], arr[5]); +} diff --git a/src/time/time.ts b/src/time/time.ts deleted file mode 100644 index 77737bc8..00000000 --- a/src/time/time.ts +++ /dev/null @@ -1,798 +0,0 @@ -import { inRange } from '../array'; -import { getEndOfMonth } from './getEndOfMonth'; - -/** - * 把毫秒值转为天数 - * - * @example - * - * msToDateStr(1000, 'd天hh时'); // '0天00时' - * msToDateStr(1000); // '0天00时00分01秒' - * msToDateStr(60 * 1000); // '0天00时01分00秒' - * msToDateStr(60 * 60 * 1000); // '0天01时00分00秒' - * msToDateStr(60 * 60 * 24 * 1000); // '1天00时00分00秒' - * - * @param ms 毫秒值 - * @param [format=d天hh时mm分ss秒] - 格式化模板,默认'd天hh时mm分ss秒' - */ -export function msToDateStr(ms: number, format = 'd天hh时mm分ss秒') { - let result = format; - const seconds = ms / 1000; - const obj: { [k: string]: number } = { - 's+': seconds % 60, - 'm+': ~~(seconds / 60) % 60, - 'h+': ~~(seconds / (60 * 60)) % 24, - // 'd+': ~~(seconds / (60 * 60 * 24)) - }; - // 有多少天就显示多少天,但不会补0 - const days = ~~(seconds / (60 * 60 * 24)); - result = result.replace(/d+/, String(days)); - for (const k in obj) { - const reg = new RegExp('(' + k + ')'); - if (reg.test(result)) { - const s1 = RegExp.$1; - const v = obj[k]; - let value = String(v).padStart(s1.length, '0'); - value = value.substring(value.length - s1.length); - result = result.replace(s1, value); - } - } - return result; -} - -/** - * 格式化日期 - * - * @example - * - * // 使用默认options - * const date1 = t.strToDate('2020-02-02 10:10:10') as Date; - * formatDate(date1, 'yyyy-MM-dd'); // '2020-02-02' - * formatDate(date1, 'hh:mm:ss'); // '10:10:10' - * formatDate(date1, 'dd-MM-yyyy'); // '02-02-2020' - * formatDate(date1, 'yyyyq季'); // '2020冬季' - * - * // 星期 - * formatDate(new Date('2020-01-12'), '周w'); // '周日' - * formatDate(new Date('2020-01-12'), 'w'); // '日' - * formatDate(new Date('2020-01-13'), 'w'); // '一' - * formatDate(new Date('2020-01-14'), 'w'); // '二' - * formatDate(new Date('2020-01-15'), 'w'); // '三' - * formatDate(new Date('2020-01-16'), 'w'); // '四' - * formatDate(new Date('2020-01-17'), 'w'); // '五' - * formatDate(new Date('2020-01-18'), 'w'); // '六' - * - * // 季节 - * formatDate(new Date('2020-01-12'), 'q'); // '冬' - * formatDate(new Date('2020-02-12'), 'q'); // '冬' - * formatDate(new Date('2020-03-13'), 'q'); // '春' - * formatDate(new Date('2020-04-14'), 'q'); // '春' - * formatDate(new Date('2020-05-15'), 'q'); // '春' - * formatDate(new Date('2020-06-16'), 'q'); // '夏' - * formatDate(new Date('2020-07-17'), 'q'); // '夏' - * formatDate(new Date('2020-08-18'), 'q'); // '夏' - * formatDate(new Date('2020-09-18'), 'q'); // '秋' - * formatDate(new Date('2020-10-18'), 'q'); // '秋' - * formatDate(new Date('2020-11-18'), 'q'); // '秋' - * formatDate(new Date('2020-12-18'), 'q'); // '冬' - * - * // 自定义季节名 - * const seasonNames = ['spring', 'summer', 'autumn', 'winter']; - * formatDate(new Date('2020-01-12'), 'q', { seasonNames }); // 'winter' - * - * // 自定义季节所在月份范围 - * const seasonRanges: number[][] = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]; - * formatDate(new Date('2020-01-12'), 'q', { seasonNames, seasonRanges }); // 'spring' - * formatDate(new Date('2020-12-12'), 'q', { seasonNames, seasonRanges }); // 'winter' - * - * // 自定义星期名字 - * const weekNames = ['sunday', 'monday']; - * formatDate(new Date('2020-01-12'), 'w', { weekNames }); // 'sunday' - * - * @param [formular='yyyy-MM-dd hh:mm:ss'] - * @param formular 格式,默认:'yyyy-MM-dd hh:mm:ss' - * @param date 日期 - * @param options 可选选项 - * @param options.seasonNames 季节名数组,默认:['春', '夏', '秋', '冬'] - * @param options.seasonRanges 季节所在月份范围,默认:春季为3-5月,夏季为6-8月、秋季为9-11月、冬季为12-2月 - * @param options.weekNames 星期名数组,默认:['日', '一', '二', '三', '四', '五', '六'] - */ -export function formatDate( - date: Date, - formular = 'yyyy-MM-dd hh:mm:ss', - options?: { - seasonNames?: string[]; - seasonRanges?: number[][]; - weekNames?: string[]; - }, -) { - const opt = { - weekNames: ['日', '一', '二', '三', '四', '五', '六'], - seasonNames: ['春', '夏', '秋', '冬'], - seasonRanges: [ - [3, 4, 5], - [6, 7, 8], - [9, 10, 11], - [12, 1, 2], - ], - ...options, - }; - const o: Record = { - 'M+': () => date.getMonth() + 1, //月份 - 'd+': () => date.getDate(), //日 - 'h+': () => date.getHours(), //小时 - 'm+': () => date.getMinutes(), //分 - 's+': () => date.getSeconds(), //秒 - q: () => { - //季度 - // 按月份区分的季度并不真的准确 - // 春季为3-5月,夏季为6-8月、秋季为9-11月、冬季为12-2月 - const month = date.getMonth() + 1; - const qIndex = opt.seasonRanges.findIndex((range) => range.includes(month)); - return opt.seasonNames[qIndex]; - }, - 'S+': () => date.getMilliseconds(), //毫秒 - w: () => opt.weekNames[date.getDay()], //周 - }; - if (/(y+)/.test(formular)) { - const y = RegExp.$1; - formular = formular.replace( - y, - String(date.getFullYear()).padStart(y.length, '0').slice(-y.length), - ); - } - let result = formular; - for (const k in o) { - if (new RegExp('(' + k + ')').test(formular)) { - const s1 = RegExp.$1; - const v = String((o[k] as Function)()); - result = result.replace(s1, v.padStart(s1.length, '0')); - } - } - return result; -} - -/** - * 字符串转为date对象 - * --- - * 因为部分浏览器如苹果手机直接new Date("2018-08-01 10:20:10")会失败,所以提取出这样一个函数 - * - * 直接new Date还有时区问题,例如 - * - * ``` - * new Date('2020-05-06').getHours(); // 8 默认8点(东八区) - * new Date('2020-5-6').getHours(); // 0 默认0点 - * ``` - * - * 只有`'Tue Dec 13 2022 01:16:59 GMT+0800 (中国标准时间)'`这种时间才直接new - * - * @example - * - * [ - * '2020-02-02 10:10:10', - * '2020/02/02 10:10:10', - * '2020/02-02-10-10-10', - * '2020/02/02 10/10/10', - * '2020/02/02/10/10/10', - * ].forEach((time: any) => { - * formatDate(strToDate(time); // '2020-02-02 10:10:10' - * }); - * strToDate('' as any); // null - * strToDate('123cvsd213' as any); // null - * strToDate('2020l02/02/10/10/10' as any); // null - * strToDate(undefined as any); // null - * - * @param [date='yyyy-MM-dd hh:mm:ss'] 格式,默认值: 'yyyy-MM-dd hh:mm:ss' - */ -export function strToDate( - date: - | `${number}-${number}-${number}` - | `${number}-${number}-${number} ${number}:${number}` - | `${number}-${number}-${number} ${number}:${number}:${number}` - | `${number}/${number}/${number}` - | `${number}/${number}/${number} ${number}:${number}` - | `${number}/${number}/${number} ${number}:${number}:${number}`, -): Date | null { - // 检测非数字、非/、非:、非- - if (!date || /[^/\d: -]/.test(date)) return null; // 去除不符合规范的字符串 - const arr: number[] = date.split(/[- :/]/).map((item) => Number(item)); - if (arr.length < 6) { - for (let i = arr.length; i < 6; i++) { - arr[i] = i < 3 ? 1 : 0; // 年月日最小为1 - } - } - return new Date(arr[0] as number, (arr[1] as number) - 1, arr[2], arr[3], arr[4], arr[5]); -} - -/** - * 比较两个日期相差年天时分秒 - * - * 用于倒计时等,可与createTimeCountUp等搭配使用 - * - * @example - * - * dateDiff(new Date('2020-05-01'), new Date('2020-05-06')); // '0年5天00时00分00秒' - * dateDiff(new Date('2020-05-01'), new Date('2020-05-06'), 'dd天 hh时mm分ss秒'); // '05天 00时00分00秒' - * dateDiff(new Date('2020-05-06'), new Date('2020-05-01 3:20:10'), 'd天 hh时mm分ss秒'); // '5天 04时39分50秒' - * dateDiff(new Date('2020-05-01'), new Date('2020-05-06'), 'd天 h时m分s秒'); // '5天 0时0分0秒' - * - * @param start - * @param end - * @param [format="y年d天hh时mm分ss秒"] - */ -export function dateDiff(start: Date, end: Date, format = 'y年d天hh时mm分ss秒'): string { - let result = format; - if (start.getTime() > end.getTime()) { - [start, end] = [end, start]; - } - const targetTime = end.getTime() - start.getTime(); - const seconds = ~~(targetTime / 1000); - const obj: { [k: string]: number } = { - 'S+': targetTime % 1000, - 's+': seconds % 60, - 'm+': ~~(seconds / 60) % 60, - 'h+': ~~(seconds / (60 * 60)) % 24, - 'd+': (function (): number { - const day = ~~(seconds / (60 * 60 * 24)); - // 如果要显示年,则把天余年,否则全部显示天 - // 默认一年等于365天 - return /y+/.test(result) ? day % 365 : day; - })(), - // "M+": 0, - 'y+': ~~(seconds / (60 * 60 * 24 * 365)), - }; - - for (const k in obj) { - const reg = new RegExp('(' + k + ')'); - if (reg.test(result)) { - // 奇怪的bug 本地调试的时候RegExp.$1不准确,"s+"的时候$1是空字符串; 非调试的时候又没问题 - const s1 = RegExp.$1; - const v = obj[k]; - let value = String(v).padStart(s1.length, '0'); - // substring(start,end) start小于0的时候为0 substr(from,len)from小于0的时候为字符串的长度+from - value = value.substring(value.length - s1.length); //手动切割00:00 m:s "00".length - "s".length,因为strPadStart当字符串长度大于length的话不会切割 - result = result.replace(s1, value); - } - } - return result; -} - -// 比较两个日期相差年天时分秒 用于倒计时等 -/* -export function dateDiff(first: Date, second: Date, format: string = "Y年d天 H时m分s秒"): string { - const seconds = ~~((second.getTime() - first.getTime()) / 1000); - const Time: { [k: string]: number } = { - "s+": seconds % 60, - "m+": ~~(seconds / 60) % 60, - "H+": ~~(seconds / (60 * 60)) % 24, - "d+": (function (): number { - const day = ~~(seconds / (60 * 60 * 24)); - // 如果要显示年,则把天余年,否则全部显示天 - // 默认一年等于365天 - return /Y+/.test(format) ? day % 365 : day; - })(), - // "M+": 0, - "Y+": ~~(seconds / (60 * 60 * 24 * 365)), - }; - - for (let k in Time) { - format = format.replace(new RegExp(k), String(Time[k])); - } - return format; -} -*/ - -/** - * 创建一个记录了调用时间的计时器闭包函数 - * - * @example - * - * const timeCountUp = createTimeCountUp(); - * timeCountUp(); // 0 - * - * await sleep(100); - * const t1 = timeCountUp(); - * 100 <= t1 && t1 <= 200; // true - * - * await sleep(100); - * const t2 = timeCountUp(); - * 200 <= t2 && t2 <= 300; // true - * - * await sleep(600); - * const t3 = timeCountUp(); - * 800 <= t3 && t3 <= 900; // true - * - * t3.pause(); // 暂停 - * t3.play(); // 继续 - * - */ -export function createTimeCountUp(): { (): number; pause(): void; play(): void } { - const startTime = Date.now(); - const pause = { - total: 0, - startTime: 0, - }; - - function closure(this: any) { - const endTime = pause.startTime ? pause.startTime : Date.now(); - return endTime - startTime - pause.total; - } - closure.pause = function () { - pause.startTime = Date.now(); - }; - closure.play = function () { - pause.total += Date.now() - pause.startTime; - pause.startTime = 0; - }; - return closure; -} - -/* -/!** - * 创建一个倒计时函数 - * @param countDown 目标毫秒 - *!/ -export function createTimeCountDown(countDown: number): () => number { - const startTime = Date.now(); - return function () { - const ms = Date.now() - startTime; - return countDown - ms; - }; -}*/ - -/** - * 创建一个倒计时闭包函数 - * - * @example - * - * const timeout = 500; - * const timeCountDown = createTimeCountDown(timeout); - * - * await sleep(50); - * let t1 = timeCountDown(); - * timeout - 150 <= t1 && t1 <= timeout - 50; // true - * - * await sleep(150); - * t1 = timeCountDown(); - * timeout - 300 <= t1 && t1 <= timeout - 200; // true - * - * await sleep(350); - * timeCountDown(); // 0 - * - * t1.pause(); // 暂停 - * t1.play(); // 继续 - * - * @param timeout 倒计时时长(毫秒) - * @returns {()=> number} 返回一个闭包函数,闭包返回的是倒计时,倒计时最小为0,不会是负数 - */ -export function createTimeCountDown(timeout: number): ReturnType { - const timeCountUp = createTimeCountUp(); - - const finishedFn = () => 0; - let resFn = () => { - const res = timeout - timeCountUp(); - if (res > 0) return res; - resFn = finishedFn; - return 0; - }; - function closure(): number { - return resFn(); - } - closure.pause = timeCountUp.pause; - closure.play = timeCountUp.play; - return closure; -} - -/** - * 获取指定某年月份(month)第n(nth)个星期几(weekday)的Date - * - * @example - * - * const fn = getMonthTheNthWeekday; - * // 2021年4月第一个周4 是 4月1号 - * fn(new Date('2021-4'), 1, 4)?.getDate(); // 1 - * // 2021年4月第一个周5 是 4月2号 - * fn(new Date('2021-4'), 1, 5)?.getDate(); // 2 - * // ... - * fn(new Date('2021-4'), 1, 6)?.getDate(); // 3 - * fn(new Date('2021-4'), 1, 0)?.getDate(); // 4 - * fn(new Date('2021-4'), 1, 7)?.getDate(); // 4 - * fn(new Date('2021-4'), 1, 7)?.getDate(); // 4 - * fn(new Date('2021-4'), 1, 1)?.getDate(); // 5 - * - * // 2021年1月最后一个周日 是 1月31号 - * fn(new Date('2021-1'), -1)?.getDate(); // 31 - * - * @param month 月份所在Date - * @param nth nth为负的时候从月末开始倒数 - * @param [weekday=0] 0和7都是周日 - */ -export function getMonthTheNthWeekday(month: Date, nth: number, weekday = 0) { - // if (!nth || weekday < 0 || weekday > 7) return null; - if (!nth || !inRange(weekday, [0, 7])) return null; - const monthTime = month.getTime(); - const endDate = getEndOfMonth(month); - - let date: Date; - if (nth > 0) { - date = new Date(monthTime); - date.setDate(1); - } else { - date = new Date(endDate.getTime()); - } - weekday = weekday === 0 ? 7 : weekday; - const diff = weekday - date.getDay(); - if (nth > 0) { - diff >= 0 && nth--; - } else { - diff <= 0 && nth++; - } - const dayDate = nth * 7 + date.getDate() + diff; - if (dayDate > endDate.getDate() || dayDate < 1) { - return null; - } - date.setDate(dayDate); - return date; -} - -/** - * 把天数、小时数,分钟数转换毫秒数 - * - * @example - * - * const fn = t.getMilliseconds; - * - * fn(); // 0 - * fn({ seconds: 1 }); // 1000 - * fn({ seconds: 1.5 }); // 1500 - * fn({ seconds: 60 }); // 1000 * 60 - * fn({ minutes: 1 }); // 1000 * 60 - * fn({ minutes: 1.5 }); // 1000 * 90 - * fn({ minutes: 1 }); // === fn({ seconds: 60 }) - * fn({ minutes: 1.5 }); // === fn({ seconds: 90 }) - * fn({ hours: 1 }); // === fn({ minutes: 60 }) - * fn({ days: 1 }); // === fn({ hours: 24 }) - * fn({ days: 1.5 }); // === fn({ hours: 36 }) - * - * @param [days=0] - * @param [hours=0] - * @param [minutes=0] - * @param [seconds=0] - */ -export function getMilliseconds({ - days = 0, - hours = 0, - minutes = 0, - seconds = 0, -}: { - days?: number; - hours?: number; - minutes?: number; - seconds?: number; -} = {}): number { - const second = 1000; - const minute = second * 60; - const hour = minute * 60; - - let result = seconds * second; - result += minutes * minute; - result += hours * hour; - result += days * hour * 24; - return result; -} - -/** - * 判断时间是否相同 - * - * @example - * - * const date = new Date('2021-10-10'); - * const date2 = new Date('2021-10-30'); - * - * isSameTime('yyyy-MM', date, date2); // true - * isSameTime('yyyy-MM-dd', date, date2); // false - * isSameTime('yyyy hh:mm:ss', date, date2); // true - * - * @param format yyyy-MM-dd hh:mm:ss - * @param date - * @param dates - */ -export function isSameTime(format: string, date: Date, ...dates: Date[]): boolean { - const dt = formatDate(date, format); - return dates.every((date) => formatDate(date, format) === dt); -} - -/** - * 判断两个日期是否在同一个星期内 - * - * @example - * - * // 星期一 - * const monday = new Date('2022-07-11'); - * - * // 上个星期天 - * const lastSunday = new Date('2022-07-10'); - * inSameWeek({ now: monday, date: lastSunday }); // false - * inSameWeek({ now: monday, date: lastSunday, weekStart: 'Mon' }); // false - * inSameWeek({ now: monday, date: lastSunday, weekStart: 'Sun' }); // true - * - * // 星期一到星期六 - * for (let i = 0; i < 6; i++) { - * const time = new Date('2022-07-' + (11 + i)); - * inSameWeek({ now: monday, date: time }); // true - * inSameWeek({ now: monday, date: time, weekStart: 'Mon' }); // true - * inSameWeek({ now: monday, date: time, weekStart: 'Sun' }); // true - * } - * - * // 这个星期天 - * const curSunday = new Date('2022-07-17'); - * inSameWeek({ now: monday, date: curSunday }); // true - * inSameWeek({ now: monday, date: curSunday, weekStart: 'Mon' }); // true - * inSameWeek({ now: monday, date: curSunday, weekStart: 'Sun' }); // false - * - * // 与当天对比 - * inSameWeek({ date: new Date() }); // true - * - * @param options - * @param options.date 要对比的日期 - * @param options.weekStart 每个星期开始为星期一或星期天, 默认星期一 - * @param options.now 日期 默认为当天 - */ -export function inSameWeek({ - date, - weekStart = 'Mon', - now = new Date(), -}: { - date: Date; - weekStart?: 'Mon' | 'Sun'; - now?: Date; -}): boolean { - const timeStamp = date.getTime(); - const day = now.getDay() || (weekStart === 'Mon' ? 7 : 0); - const dateNum = now.getDate(); - // 时分秒归零 - const start = new Date(now.getFullYear(), now.getMonth(), dateNum); - const end = new Date(start); - - const weekStartValue = weekStart === 'Mon' ? 1 : 0; - - start.setDate(dateNum - day + weekStartValue); - end.setDate(dateNum + (7 - day + weekStartValue)); - - const startTime = start.getTime(); - const endTime = end.getTime(); - - return startTime <= timeStamp && timeStamp < endTime; -} - -/** - * 计算两个日期间相差的年数 a - b - * - * @example - * - * yearDiff(new Date('2022-07-01'), new Date('2020-7-1')); // 2 - * yearDiff(new Date('2022-07-02'), new Date('2020-7-1')); // 2.002 - * yearDiff(new Date('2022-07-01'), new Date('2022-1-1')); // 0.5 - * yearDiff(new Date('2022-1-1'), new Date('2022-07-01')); // -0.5 - * yearDiff(new Date('2022-1-30'), new Date('2022-01-31')); // -0.002 - * - * @param a - * @param b - * @returns {number} - */ -export function yearDiff(a: Date, b: Date): number { - let months = a.getMonth() - b.getMonth(); - const years = a.getFullYear() - b.getFullYear(); - months += years * 12; - - const dates = a.getDate() - b.getDate(); - - months += ~~((dates * 100) / (getEndOfMonth(a).getDate() - 1)) / 100; - - return ~~((months * 1000) / 12) / 1000; -} - -/** - * 比如根据服务器与本地时间的差值计算实际日期 - * - * @example - * - * const now = new Date(); - * const d = calcRelativeDate(now); - * - * d().getTime() === now.getTime(); // true - * - * await sleep(100); - * now.getTime() + 90 <= d().getTime() && d().getTime() <= now.getTime() + 110; // true - * - * await sleep(100); - * now.getTime() + 190 <= d().getTime() && d().getTime() <= now.getTime() + 210; // true - * - * @param init 服务器日期 - * @return {() => Date} 返回一个闭包,闭包返回实际日期,每次调用都返回实际日期 - */ -export function calcRelativeDate(init: Date) { - const diff = init.getTime() - Date.now(); - return () => new Date(Date.now() + diff); -} - -/** - * 获取时间段常数 - * - * @returns return { - * millisecond: 1, - * second: 1000, - * minute: 60 * 1000, - * hour: 60 * 60 * 1000, - * day: 24 * 60 * 60 * 1000, - * week: 7 * 24 * 60 * 60 * 1000, - * month: 30 * 24 * 60 * 60 * 1000, - * season: (365 / 4) * 24 * 60 * 60 * 1000, - * year: 365 * 24 * 60 * 60 * 1000, - * } - */ -export const getTimePeriodConst = (function () { - const millisecond = 1; - const second = millisecond * 1000; - const minute = second * 60; - const hour = minute * 60; - const day = hour * 24; - const month = day * 30; - const season = day * (365 / 4); - const year = day * 365; - const week = day * 7; - - const timeConst = { millisecond, second, minute, hour, day, week, month, season, year } as const; - return function () { - return timeConst; - }; -})(); - -/** - * 获取过去时间数 - * --- - * 时间匹配顺序:年、季、月、周、天、时、分、秒 - * - * @example - * ```ts - * const date = new Date('2023/4/7 00:00:00'); - * howLongAgo(date, { now: new Date('2023/4/7 00:00:20') }); // '20秒前' - * howLongAgo(date, { now: new Date('2023/4/7 00:10:20') }); // '10分钟前' - * howLongAgo(date, { now: new Date('2023/4/7 08:00:00') }); // '8小时前' - * howLongAgo(date, { now: new Date('2023/4/10 00:00:00') }); // '3天前' - * - * howLongAgo(date, { now: new Date('2023/4/15 00:00:00') }); // '1周前' - * howLongAgo(date, { now: new Date('2023/5/6 00:00:00') }); // '4周前' - * - * howLongAgo(date, { now: new Date('2023/5/7 00:00:00') }); // '1月前' - * // 因为过去多少月是按天数算的,5月有31天,所以到6月6号已经是2月前了 - * howLongAgo(date, { now: new Date('2023/6/6 00:00:00') }); // '2月前' - * howLongAgo(date, { now: new Date('2023/7/7 00:00:00') }); // '3月前' - * - * // 按天数算的,5月有31天,一季按91.25(365/4)天算 - * howLongAgo(date, { now: new Date('2023/7/8 00:00:00') }); // '1季前' - * - * howLongAgo(date, { now: new Date('2024/7/7 00:00:00') }); // '1年前' - * - * // now比date小 - * howLongAgo(date, { now: new Date('2022/7/8 00:00:00') }); // '2023-04-07 00:00:00' - * howLongAgo(date, { now: new Date('2022/7/8 00:00:00'), def: '--' }); // '--' - * howLongAgo(date, { now: new Date('2022/7/8 00:00:00'), defaultFormat: 'yyyy' }); // '2023' - * - * // 更换模板 - * const templates: Required>[1]['templates'] = {}; - * - * // 更换秒数模板 - * templates.second = '刚刚'; - * howLongAgo(date, { now: new Date('2023/4/7 00:00:20'), templates }); // '刚刚' - * - * // 更换小时数模板 - * templates.hour = '${ago} hours ago'; - * howLongAgo(date, { now: new Date('2023/4/7 08:00:00'), templates }); // '8 hours ago' - * - * // 更换周数模板 - * templates.week = '${ago}星期前'; - * howLongAgo(date, { now: new Date('2023/4/15 00:00:00'), templates }); // '1星期前' - * howLongAgo(date, { now: new Date('2023/5/6 00:00:00'), templates }); // '4星期前' - * - * // 去掉周数 - * templates.week = '~~'; - * howLongAgo(date, { now: new Date('2023/4/15 00:00:00'), templates }); // '8天前' - * howLongAgo(date, { now: new Date('2023/5/6 00:00:00'), templates }); // '29天前' - * - * // 去掉季节 - * templates.season = '~~'; - * howLongAgo(date, { now: new Date('2023/7/8 00:00:00'), templates }); // '3月前' - * - * // ------- filter ------- - * // 使用filter替换季数 - * howLongAgo(date, { - * now: new Date('2023/10/8 00:00:00'), - * filter: (res, diff) => - * res.endsWith('季前') ? ~~(diff / getTimePeriodConst().season) + ' seasons ago' : res, - * }); // '2 seasons ago' - * - * // 混合 - * howLongAgo(date, { - * now: new Date('2023/4/7 02:10:00'), - * filter: (res, diff) => { - * if (res.endsWith('小时前')) { - * const tpc = getTimePeriodConst(); - * return `${~~(diff / tpc.hour)}小时${~~((diff % tpc.hour) / tpc.minute)}分钟前`; - * } - * return res; - * }, - * }); // '2小时10分钟前' - * ``` - * - * @param date 过去的时间 - * @param {{}} options - * @param options.now 当前时间;默认为new Date() - * @param options.defaultFormat def参数${time}插槽的时间格式化模板;默认为'yyyy-MM-dd hh:mm:ss' - * @param options.def 未匹配到模版时返回的模板,支持${time}插槽;默认为'${time}' - * @param options.templates 匹配模板,支持${ago}插;当模板字符串为'~~'时会跳过该匹配模板,取自markdown的~~标记;默认为 - * { - * year: '${ago}年前', - * season: '${ago}季前', - * month: '${ago}月前', - * week: '${ago}周前', - * day: '${ago}天前', - * hour: '${ago}小时前', - * minute: '${ago}分钟前', - * second: '${ago}秒前', - * },传入模板时只会替换已填写部分模板 - * @param options.filter 过滤函数 - */ -export function howLongAgo( - date: Date, - { - now = new Date(), - defaultFormat = 'yyyy-MM-dd hh:mm:ss', - def = '${time}', - templates, - filter, - }: { - defaultFormat?: string; - def?: string; - filter?: (result: string, diff: number) => string; - now?: Date; - templates?: Partial< - Record, 'millisecond'> | 'now', string> - >; - } = {}, -): string { - const searchValue = '${ago}'; - const _templates: Required = { - now: '刚刚', - year: `${searchValue}年前`, - season: `${searchValue}季前`, - month: `${searchValue}月前`, - week: `${searchValue}周前`, - day: `${searchValue}天前`, - hour: `${searchValue}小时前`, - minute: `${searchValue}分钟前`, - second: `${searchValue}秒前`, - ...templates, - }; - - const timePeriodConst = getTimePeriodConst(); - const matches: Array<[condition: number, template: string]> = ( - ['year', 'season', 'month', 'week', 'day', 'hour', 'minute', 'second'] satisfies Array< - keyof typeof _templates - > - ).map((key) => [timePeriodConst[key], _templates[key]]); - - const _filter = filter || ((result) => result); - const diff = now.getTime() - date.getTime(); - const found = matches.find(([cond, tpl]) => tpl !== '~~' && diff >= cond); - - if (!found) { - if (diff >= 0 && diff < 1000) return _filter(_templates.now, diff); - const res = def.replace('${time}', formatDate(date, defaultFormat)); - return _filter(res, diff); - } - - const [condition, template] = found; - const res = template.replace(searchValue, String(Math.floor(diff / condition))); - return _filter(res, diff); -} diff --git a/src/time/yearDiff.ts b/src/time/yearDiff.ts new file mode 100644 index 00000000..0b0cea40 --- /dev/null +++ b/src/time/yearDiff.ts @@ -0,0 +1,25 @@ +import { getEndOfMonth } from './getEndOfMonth'; + +/** + * 计算两个日期间相差的年数 a - b + * + * @example + * + * yearDiff(new Date('2022-07-01'), new Date('2020-7-1')); // 2 + * yearDiff(new Date('2022-07-02'), new Date('2020-7-1')); // 2.002 + * yearDiff(new Date('2022-07-01'), new Date('2022-1-1')); // 0.5 + * yearDiff(new Date('2022-1-1'), new Date('2022-07-01')); // -0.5 + * yearDiff(new Date('2022-1-30'), new Date('2022-01-31')); // -0.002 + * + * @param a + * @param b + * @returns {number} + */ +export function yearDiff(a: Date, b: Date): number { + let months = a.getMonth() - b.getMonth(); + const years = a.getFullYear() - b.getFullYear(); + months += years * 12; + const dates = a.getDate() - b.getDate(); + months += ~~((dates * 100) / (getEndOfMonth(a).getDate() - 1)) / 100; + return ~~((months * 1000) / 12) / 1000; +} From 999ae8ae0b16ed9a5f175b3d49c33334cdc8b304 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 20 Apr 2023 18:11:09 +0800 Subject: [PATCH 25/30] chore(scripts/single-fn-file.ts): fix ts types --- scripts/single-fn-file.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/scripts/single-fn-file.ts b/scripts/single-fn-file.ts index a572798d..40adec5c 100644 --- a/scripts/single-fn-file.ts +++ b/scripts/single-fn-file.ts @@ -1,11 +1,6 @@ import * as Path from 'path'; import * as FS from 'fs'; -import type { - Declaration, - ExportNamedDeclaration, - FunctionDeclaration, - VariableDeclaration, -} from '@babel/types'; +import type { Declaration, ExportNamedDeclaration } from '@babel/types'; import { parse } from '@babel/parser'; import generate from '@babel/generator'; import { prompt } from 'enquirer'; @@ -48,11 +43,11 @@ function extractFunctionsFromFile(filepath: string): string[] { function getFnName(declaration: Declaration): string { switch (declaration.type) { case 'FunctionDeclaration': - return (declaration as FunctionDeclaration).id!.name; + return declaration.id!.name; case 'VariableDeclaration': - return ((declaration as VariableDeclaration).declarations[0]!.id as Identifier).name; + return (declaration.declarations[0]!.id as Identifier).name; case 'ExportNamedDeclaration': - return getFnName((declaration as ExportNamedDeclaration).declaration!); + return getFnName(declaration.declaration!); default: console.error(declaration); throw new Error(`未识别的类型:${declaration.type}`); From 0fe8c5afb51b953c9ca96094746820bb2d0cc2d1 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 20 Apr 2023 18:23:09 +0800 Subject: [PATCH 26/30] chore(scripts/build.ts): fix ts types --- scripts/build.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build.ts b/scripts/build.ts index 0b84a851..17be0801 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -23,7 +23,7 @@ async function buildAll(targets: string[]) { } async function runParallel(maxConcurrency: number, source: string[], iteratorFn: typeof build) { - const ret = []; + const ret: Promise[] = []; const executing: Promise[] = []; for (const item of source) { const p = Promise.resolve().then(() => iteratorFn(item)); From 9664a5bfda9d763c18ddc3208ca5f6677259c25d Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 27 Apr 2023 03:33:14 +0800 Subject: [PATCH 27/30] =?UTF-8?q?refactor(common):=20=E6=8B=86=E5=88=86com?= =?UTF-8?q?mon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common.ts | 538 ----------------------------- src/common/createEnum.ts | 32 ++ src/common/createUUID.ts | 12 + src/common/debounce.ts | 85 +++++ src/common/functionApply.ts | 27 ++ src/common/generateFunctionCode.ts | 22 ++ src/common/getRoot.ts | 23 ++ src/common/index.ts | 10 + src/common/oneByOne.ts | 45 +++ src/common/parseCmdParams.ts | 70 ++++ src/common/polling.ts | 71 ++++ src/common/throttle.ts | 144 ++++++++ 12 files changed, 541 insertions(+), 538 deletions(-) delete mode 100644 src/common.ts create mode 100644 src/common/createEnum.ts create mode 100644 src/common/createUUID.ts create mode 100644 src/common/debounce.ts create mode 100644 src/common/functionApply.ts create mode 100644 src/common/generateFunctionCode.ts create mode 100644 src/common/getRoot.ts create mode 100644 src/common/index.ts create mode 100644 src/common/oneByOne.ts create mode 100644 src/common/parseCmdParams.ts create mode 100644 src/common/polling.ts create mode 100644 src/common/throttle.ts diff --git a/src/common.ts b/src/common.ts deleted file mode 100644 index ecccc499..00000000 --- a/src/common.ts +++ /dev/null @@ -1,538 +0,0 @@ -import { typeOf } from './data-type'; -import { createTimeCountDown } from './time'; -import { getReversedObj } from './object'; - -/** - * 防抖函数 - * --- - * **规则** - * - 如果是多次执行 debounce 函数,在 debounce 生效期间会返回上一次执行的结果 - * - 开启了 leading 首调用,那么 debounce 生效一次,会执行两次 - * - 手动取消成功时,下一次 leading 一定可以执行 - * - 手动 flush 时,取消定时器,也就是取消当前的尾调用 - * - 如果手动 flush 最近一次调用 debounce 时已经成功执行过了,那么直接返回上一次的结果 - * > 例子:在 debounce 已经停止了,leading 已经重新可以执行的期间,去手动调用 flush,此时直接返回上一次的执行结果 - * - * @example - * - * let times = 0; - * const wrapFn = debounce(() => times++, 100); - * wrapFn(); - * times; // 0 - * // 立即执行上一次的防抖函数 - * wrapFn.flush(); - * times; // 1 - * wrapFn(); - * // 取消上一次的防抖 - * wrapFn.cancel(); - * await sleep(110); - * times; // 1 - * - * @param callback 回调 - * @param delay 延时 - * @param [leading = false] 首调用;debounce本是尾调用,开启了首调用后,除非手动取消否则调用后最少执行两次,也就是会执行首尾调用各一次 - * - * @returns 返回一个函数,并给该函数添加cancel取消执行和flush立即执行两个子函数 - */ -export function debounce any>( - callback: CB, - delay: number, - leading = false, -): CB & { cancel(): void; flush(): ReturnType } { - let lastThis: unknown; - let lastArgs: any; - let lastResult: unknown; - let timer: ReturnType | void; - let canLeadingRun = true; - - const cancel = () => { - if (!timer) return; - clearTimeout(timer); - timer = undefined; - }; - - const flush = () => { - lastResult = callback.apply(lastThis, lastArgs); - lastArgs = undefined; - return lastResult; - }; - - const _debounce = function (this: unknown, ...args: unknown[]) { - cancel(); - - lastThis = this; - lastArgs = args; - - if (canLeadingRun && leading) { - flush(); - canLeadingRun = false; - } - - timer = setTimeout(() => { - flush(); - canLeadingRun = true; - timer = undefined; - }, delay); - - return lastResult; - } as ReturnType; - - _debounce.cancel = () => { - cancel(); - // 手动取消成功时,下一次 leading 一定可以执行 - canLeadingRun = true; - }; - _debounce.flush = () => { - const _timer = timer; - // 手动 flush 时,取消定时器,也就是取消尾调用 - _debounce.cancel(); - // 如果手动 flush 最近一次调用 debounce 时已经 flush 过了,那么直接返回上一次的结果 - if (!_timer) return lastResult; - return flush(); - }; - - return _debounce as any; -} - -/** - * 节流函数 - * --- - * 节流除非是开启了尾调用否则是立即执行的,也就不需要防抖的cancel与flush - * - * @example - * - * // ----------- 基础用法 ----------- - * let count = 0; - * let elseCount = 0; - * let res = ''; - * const wrapFn = throttle((_res: string) => (count++, (res = _res)), 10, { - * invalidCB() { - * elseCount++; - * }, - * }); - * - * wrapFn('0'); - * wrapFn('1'); - * wrapFn('2'); - * - * res; // '0' - * elseCount; // 2 - * - * // ----------- 首调用 ----------- - * let times = 0; - * - * let wrapFn = throttle(() => times++, 100, { leading: false }); - * // 初始时时0次 - * times; // 0 - * // 执行一次 - * wrapFn(); - * // 由于节流包裹函数时就开启了节流,此时还在时间内,所以内部不执行 - * times; // 0 - * await sleep(120); - * // 上一次执行的被丢弃了 - * times; // 0 - * // 在间隔期外执行 - * wrapFn(); - * // 此时成功执行 - * times; // 1 - * - * times = 0; - * // 立即执行 - * wrapFn = throttle(fn, 100, { leading: true }); - * times; // 0 - * wrapFn(); - * // 由于节流包裹时未开启计时,所以 - * times; // 1 - * - * // ----------- 尾调用 ----------- - * - * let times = 0; - * const wrapFn = throttle(() => times++, 100, { leading: false, trailing: true }); - * // 初始时时0次 - * times; // 0 - * // 执行一次 - * wrapFn(); - * wrapFn(); - * wrapFn(); - * // 由于节流包裹函数时就开启了节流,此时还在时间内,所以内部不执行 - * times; // 0 - * await sleep(120); - * // 上一次执行的不会被丢弃 - * times; // 1 - * - * - * @param callback 需要被节流函数包裹的函数 - * @param interval 间隔时间 - * @param options - * @param [options.leading=true] 首调用;未开启时是有个初始倒计时的,为true时关闭初始倒计时,默认true - * @param [options.trailing=false] 尾调用 - * @param options.invalidCB 间隔期间调用throttle返回的函数执行的回调 例如一个按钮5秒点击一次,不可点击时执行该函数 - */ -export function throttle void | any>( - callback: CB, - interval: number, - options: { - leading?: boolean; - trailing?: boolean; - invalidCB?: (timeCountDown: number) => void; - } = {}, -): CB { - const _options: Required[2]> = { - invalidCB: () => void 0, - trailing: false, - leading: true, - ...options, - }; - let getCountDown = _options.leading ? () => 0 : createTimeCountDown(interval); - - const db = _options.trailing ? debounce(callback, interval) : null; - return function (this: unknown, ...args: unknown[]) { - const countDown = getCountDown(); - if (countDown > 0) { - _options.invalidCB(countDown); - db?.apply(this, args); - return; - } - db?.cancel(); - getCountDown = createTimeCountDown(interval); - return callback.apply(this, args); - } as CB; -} - -// 第1种实现方式 -/*export function throttle (void | any)>( - callback: CB, - delay: number, - invalidCB?: (interval: number) => void, -): CB { - let lastTime = 0; - return function (...args: any[]) { - const now = Date.now(); - const interval = now - lastTime; - if (interval < delay) { - invalidCB && invalidCB(delay - interval); - return; - } - lastTime = now; - return callback.apply(this, args); - } as CB; -}*/ - -// 第三种实现方式,不能获取剩余时间或者另外获取时间,有点多余 -/*export function throttleByTimeOut (void | any)>( - callback: CB, - delay: number, - invalidCB?: (interval: number) => void, -): CB { - let throttling = false; - return function (...args: any[]) { - if (throttling) { - return; - } - throttling = true; - setTimeout(() => { - throttling = false; - }, delay); - return callback.apply(this, args); - } as CB; -}*/ - -/** - * 轮询函数 - * - * 用于代替setInterval,回调且支持promise - * - * @example - * - * let t = 0; - * - * let { cancel, promise } = polling((times) => { - * t = times; - * if (times === 10) cancel(); - * }, 10); - * await promise; - * t; // 10 - * - * @param callback 回调,返回值支持promise - * @param interval 间隔 - * @param [immediate=true] 是否马上执行第一次 - */ -export function polling( - callback: (times: number) => void | Promise, - interval: number, - immediate = true, -): { promise: Promise; cancel: () => void } { - enum state { - running, - stopped, - } - - let timer: number; - let status: state; - let times = 1; - let lastTime = Date.now(); - let diff = 0; - let resolve: () => void; - const cancel = () => { - status = state.stopped; - resolve(); - clearTimeout(timer); - }; - const promise = new Promise((res) => { - resolve = res; - - function run() { - const back = callback(times++); - back instanceof Promise ? back.then(timeout, cancel) : timeout(); - } - - function timeout() { - const delay = interval - diff; - timer = setTimeout(() => { - if (status !== state.running) return; - const now = Date.now(); - diff = now - lastTime - delay; - lastTime = now; - run(); - }, delay) as any; - } - - status = state.running; - if (immediate) { - run(); - } else { - timeout(); - } - }); - - return { promise, cancel }; -} - -/** - * 每隔一段事件返回字符串中的一个单词,类似打字机效果 - * - * @example - * - * const s = 'hello world'; - * - * const receive: string[] = []; - * const diff: number[] = []; - * - * let lastNow = Date.now(); - * const { promise } = oneByOne(s, 10, (w, index) => { - * receive.push(w); - * const now = Date.now(); - * diff.push(now - lastNow); - * lastNow = now; - * }); - * await promise; - * - * receive; // equals s.split('') - * diff[0]; // 0 - * - * const _avg = avg(diff.slice(1)); - * // 虽然是间隔10秒,但由于js的setTimeout并不精准,所以会有波动 - * 10 <= _avg && _avg <= 11; // true - */ -export function oneByOne( - words: string, - delay: number, - callback?: (word: string, index: number, words: string) => false | void, -): ReturnType { - const wordArr = words.split(''); - const res = polling((index) => { - const word = wordArr.shift() as string; - let running = Boolean(wordArr.length); - if (callback) { - const flag = callback(word, index - 1, words); - running = running && flag !== false; - } - if (!running) res.cancel(); - }, delay); - return res; -} - -/** - * 组合成new Function需要的参数 - * - * 实现apply的时候可以使用此方法 - * - * @see functionApply - * - */ -export function generateFunctionCode(argsArrayLength: number): string { - let code = 'return arguments[0][arguments[1]]('; - // 拼接args - for (let i = 0; i < argsArrayLength; i++) { - if (i > 0) { - code += ','; - } - code += 'arguments[2][' + i + ']'; - } - code += ')'; - // return object.property(args) - // return arguments[0][arguments[1]](arg1, arg2, arg3...) - return code; -} - -/** - * 模拟Function.prototype.apply函数代替扩展运算符,使用数组传值给不定参数的函数传参 - * - * 案例 - * const args = [1, 2, 3]; - * (new Function(generateFunctionCode(args.length)))(object, property, args); - * - * @example - * - * '123'.padStart(6, '0'); // '000123' - * const value = functionApply( - * { strPadStart: (s: string, count: number, pad: string) => s.padStart(count, pad) }, - * 'strPadStart', - * ['123', 6, '0'], - * ); - * value; // '000123' - * - */ -export function functionApply( - obj: T, - property: K, - args: any[], -) { - return new Function(generateFunctionCode(args.length))(obj, property, args); -} - -/** - * 生成uuid - * - * @example - * - * createUUID(); // 3976e106-3841-ee99-c65aa773c9d1b977 随机值 - * - * @param [template='xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx'] uuid模板:默认模板(8-4-4-16) - */ -export function createUUID(template = 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx'): string { - return template.replace(/x/g, () => (~~(Math.random() * 0x10)).toString(16)); -} - -/** - * 创建一个enum对象,给非ts环境使用 - * - * @example - * // object - * createEnum({ a: 'aa', b: 'bb' }); // { a: 'aa', b: 'bb', aa: 'a', bb: 'b' } - * createEnum({ a: 1, b: 2 }); // { a: 1, b: 2, 1: 'a', 2: 'b' } - * - * // array - * createEnum([0, 1]); // { '0': '0', '1': '1' } - * createEnum(['a', 'b']); // { a: '0', b: '1', 0: 'a', 1: 'b' } - * - */ -export function createEnum( - obj: T, -): Readonly { - /* const res: any = {}; - for (let k in obj) { - if (res.hasOwnProperty(k)) throw new Error("key multiple"); - res[res[k] = obj[k]] = k; - } - - Object.freeze(res); // freeze值不可变 - // Object.seal(result); // seal值可以变 - return res;*/ - return Object.freeze(Object.assign({}, obj, getReversedObj(obj as any))) as any; -} - -/** - * 获取全局对象 - * - * @example - * - * // browser - * getRoot(); // window - * - * // nodejs - * getRoot(); // global - * - */ -export function getRoot() { - try { - // 像electron会禁用这种方法 - return Function('return this')(); - } catch (e) { - if (typeof globalThis !== 'undefined') return globalThis; - if (typeof self !== 'undefined') return self; - if (typeof window !== 'undefined') return window; - if (typeof global !== 'undefined') return global; - } -} - -/** - * 命令行的参数转为Map - * @notice 部分命令行工具中"--"是全写,"-"是缩写 这里未分 - * - * @example - * - * function pcp(value: string, prefix?: string, df?: string) { - * return Object.fromEntries(parseCmdParams(value.split(' ').slice(2), prefix, df)); - * } - * - * pcp('node test.js test.js -a -b -c'); // { default: 'test.js', a: true, b: true, c: true, } - * - * pcp('node test.js test.js -a=123'); // { default: 'test.js', a: '123' } - * - * pcp('node test.js test.js -a=123 333 555 -b 666 888 -c=1 -b=999'); // { default: 'test.js', a: ['123', '333', '555'], b: ['666', '888', '999'], c: '1', } - * - * @param arr 命令行参数数组 - * @param prefix 前缀 --d --f 前缀是"--" - * @param defaultKey 如果前面没有变量名那么使用默认 - */ -export function parseCmdParams( - arr: string[], - prefix = '-', - defaultKey = 'default', -): Map { - const eqReg = /([^=]+)=([\s\S]+)?/; - const isKeyReg = new RegExp(`^${prefix}`); - const list = arr.slice(); - const map: ReturnType = new Map(); - let currentKey = defaultKey; - let item: string; - - function setKey(): void { - let key = item.replace(isKeyReg, ''); - if (eqReg.test(key)) { - key = RegExp.$1; - const value = RegExp.$2; - value && list.unshift(value); - } - currentKey = key; - if (!map.has(currentKey)) { - map.set(currentKey, true); - } - } - - // fullFight - function setValue() { - const existValue = map.get(currentKey); - switch (typeOf(existValue)) { - case 'undefined': - case 'boolean': - map.set(currentKey, item); - break; - case 'array': - (existValue as Array).push(item); - break; - default: - map.set(currentKey, [existValue as string, item]); - } - } - - while ((item = list.shift() as string)) { - if (isKeyReg.test(item)) { - setKey(); - continue; - } - setValue(); - } - return map; -} diff --git a/src/common/createEnum.ts b/src/common/createEnum.ts new file mode 100644 index 00000000..e5dad7f9 --- /dev/null +++ b/src/common/createEnum.ts @@ -0,0 +1,32 @@ +import { getReversedObj } from '../object'; + +/** + * 创建一个enum对象,给非ts环境使用 + * + * @example + * // object + * createEnum({ a: 'aa', b: 'bb' }); // { a: 'aa', b: 'bb', aa: 'a', bb: 'b' } + * createEnum({ a: 1, b: 2 }); // { a: 1, b: 2, 1: 'a', 2: 'b' } + * + * // array + * createEnum([0, 1]); // { '0': '0', '1': '1' } + * createEnum(['a', 'b']); // { a: '0', b: '1', 0: 'a', 1: 'b' } + * + */ +export function createEnum( + obj: T, +): Readonly< + T & { + [k: string]: K; + } +> { + /* const res: any = {}; + for (let k in obj) { + if (res.hasOwnProperty(k)) throw new Error("key multiple"); + res[res[k] = obj[k]] = k; + } + Object.freeze(res); // freeze值不可变 + // Object.seal(result); // seal值可以变 + return res;*/ + return Object.freeze(Object.assign({}, obj, getReversedObj(obj as any))) as any; +} diff --git a/src/common/createUUID.ts b/src/common/createUUID.ts new file mode 100644 index 00000000..ce291fb0 --- /dev/null +++ b/src/common/createUUID.ts @@ -0,0 +1,12 @@ +/** + * 生成uuid + * + * @example + * + * createUUID(); // 3976e106-3841-ee99-c65aa773c9d1b977 随机值 + * + * @param [template='xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx'] uuid模板:默认模板(8-4-4-16) + */ +export function createUUID(template = 'xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx'): string { + return template.replace(/x/g, () => (~~(Math.random() * 0x10)).toString(16)); +} diff --git a/src/common/debounce.ts b/src/common/debounce.ts new file mode 100644 index 00000000..cb449d1a --- /dev/null +++ b/src/common/debounce.ts @@ -0,0 +1,85 @@ +/** + * 防抖函数 + * --- + * **规则** + * - 如果是多次执行 debounce 函数,在 debounce 生效期间会返回上一次执行的结果 + * - 开启了 leading 首调用,那么 debounce 生效一次,会执行两次 + * - 手动取消成功时,下一次 leading 一定可以执行 + * - 手动 flush 时,取消定时器,也就是取消当前的尾调用 + * - 如果手动 flush 最近一次调用 debounce 时已经成功执行过了,那么直接返回上一次的结果 + * > 例子:在 debounce 已经停止了,leading 已经重新可以执行的期间,去手动调用 flush,此时直接返回上一次的执行结果 + * + * @example + * + * let times = 0; + * const wrapFn = debounce(() => times++, 100); + * wrapFn(); + * times; // 0 + * // 立即执行上一次的防抖函数 + * wrapFn.flush(); + * times; // 1 + * wrapFn(); + * // 取消上一次的防抖 + * wrapFn.cancel(); + * await sleep(110); + * times; // 1 + * + * @param callback 回调 + * @param delay 延时 + * @param [leading = false] 首调用;debounce本是尾调用,开启了首调用后,除非手动取消否则调用后最少执行两次,也就是会执行首尾调用各一次 + * + * @returns 返回一个函数,并给该函数添加cancel取消执行和flush立即执行两个子函数 + */ +export function debounce any>( + callback: CB, + delay: number, + leading = false, +): CB & { + cancel(): void; + flush(): ReturnType; +} { + let lastThis: unknown; + let lastArgs: any; + let lastResult: unknown; + let timer: ReturnType | void; + let canLeadingRun = true; + const cancel = () => { + if (!timer) return; + clearTimeout(timer); + timer = undefined; + }; + const flush = () => { + lastResult = callback.apply(lastThis, lastArgs); + lastArgs = undefined; + return lastResult; + }; + const _debounce = function (this: unknown, ...args: unknown[]) { + cancel(); + lastThis = this; + lastArgs = args; + if (canLeadingRun && leading) { + flush(); + canLeadingRun = false; + } + timer = setTimeout(() => { + flush(); + canLeadingRun = true; + timer = undefined; + }, delay); + return lastResult; + } as ReturnType; + _debounce.cancel = () => { + cancel(); + // 手动取消成功时,下一次 leading 一定可以执行 + canLeadingRun = true; + }; + _debounce.flush = () => { + const _timer = timer; + // 手动 flush 时,取消定时器,也就是取消尾调用 + _debounce.cancel(); + // 如果手动 flush 最近一次调用 debounce 时已经 flush 过了,那么直接返回上一次的结果 + if (!_timer) return lastResult; + return flush(); + }; + return _debounce as any; +} diff --git a/src/common/functionApply.ts b/src/common/functionApply.ts new file mode 100644 index 00000000..e0a502ca --- /dev/null +++ b/src/common/functionApply.ts @@ -0,0 +1,27 @@ +import { generateFunctionCode } from './generateFunctionCode'; + +/** + * 模拟Function.prototype.apply函数代替扩展运算符,使用数组传值给不定参数的函数传参 + * + * 案例 + * const args = [1, 2, 3]; + * (new Function(generateFunctionCode(args.length)))(object, property, args); + * + * @example + * + * '123'.padStart(6, '0'); // '000123' + * const value = functionApply( + * { strPadStart: (s: string, count: number, pad: string) => s.padStart(count, pad) }, + * 'strPadStart', + * ['123', 6, '0'], + * ); + * value; // '000123' + * + */ +export function functionApply( + obj: T, + property: K, + args: any[], +) { + return new Function(generateFunctionCode(args.length))(obj, property, args); +} diff --git a/src/common/generateFunctionCode.ts b/src/common/generateFunctionCode.ts new file mode 100644 index 00000000..67299a3d --- /dev/null +++ b/src/common/generateFunctionCode.ts @@ -0,0 +1,22 @@ +/** + * 组合成new Function需要的参数 + * + * 实现apply的时候可以使用此方法 + * + * @see functionApply + * + */ +export function generateFunctionCode(argsArrayLength: number): string { + let code = 'return arguments[0][arguments[1]]('; + // 拼接args + for (let i = 0; i < argsArrayLength; i++) { + if (i > 0) { + code += ','; + } + code += 'arguments[2][' + i + ']'; + } + code += ')'; + // return object.property(args) + // return arguments[0][arguments[1]](arg1, arg2, arg3...) + return code; +} diff --git a/src/common/getRoot.ts b/src/common/getRoot.ts new file mode 100644 index 00000000..88527970 --- /dev/null +++ b/src/common/getRoot.ts @@ -0,0 +1,23 @@ +/** + * 获取全局对象 + * + * @example + * + * // browser + * getRoot(); // window + * + * // nodejs + * getRoot(); // global + * + */ +export function getRoot() { + try { + // 像electron会禁用这种方法 + return Function('return this')(); + } catch (e) { + if (typeof globalThis !== 'undefined') return globalThis; + if (typeof self !== 'undefined') return self; + if (typeof window !== 'undefined') return window; + if (typeof global !== 'undefined') return global; + } +} diff --git a/src/common/index.ts b/src/common/index.ts new file mode 100644 index 00000000..fc67cd0e --- /dev/null +++ b/src/common/index.ts @@ -0,0 +1,10 @@ +export * from './debounce'; +export * from './throttle'; +export * from './polling'; +export * from './oneByOne'; +export * from './generateFunctionCode'; +export * from './functionApply'; +export * from './createUUID'; +export * from './createEnum'; +export * from './getRoot'; +export * from './parseCmdParams'; diff --git a/src/common/oneByOne.ts b/src/common/oneByOne.ts new file mode 100644 index 00000000..d40c6ba3 --- /dev/null +++ b/src/common/oneByOne.ts @@ -0,0 +1,45 @@ +import { polling } from './polling'; + +/** + * 每隔一段事件返回字符串中的一个单词,类似打字机效果 + * + * @example + * + * const s = 'hello world'; + * + * const receive: string[] = []; + * const diff: number[] = []; + * + * let lastNow = Date.now(); + * const { promise } = oneByOne(s, 10, (w, index) => { + * receive.push(w); + * const now = Date.now(); + * diff.push(now - lastNow); + * lastNow = now; + * }); + * await promise; + * + * receive; // equals s.split('') + * diff[0]; // 0 + * + * const _avg = avg(diff.slice(1)); + * // 虽然是间隔10秒,但由于js的setTimeout并不精准,所以会有波动 + * 10 <= _avg && _avg <= 11; // true + */ +export function oneByOne( + words: string, + delay: number, + callback?: (word: string, index: number, words: string) => false | void, +): ReturnType { + const wordArr = words.split(''); + const res = polling((index) => { + const word = wordArr.shift() as string; + let running = Boolean(wordArr.length); + if (callback) { + const flag = callback(word, index - 1, words); + running = running && flag !== false; + } + if (!running) res.cancel(); + }, delay); + return res; +} diff --git a/src/common/parseCmdParams.ts b/src/common/parseCmdParams.ts new file mode 100644 index 00000000..783759e1 --- /dev/null +++ b/src/common/parseCmdParams.ts @@ -0,0 +1,70 @@ +import { typeOf } from '../data-type'; + +/** + * 命令行的参数转为Map + * @notice 部分命令行工具中"--"是全写,"-"是缩写 这里未分 + * + * @example + * + * function pcp(value: string, prefix?: string, df?: string) { + * return Object.fromEntries(parseCmdParams(value.split(' ').slice(2), prefix, df)); + * } + * + * pcp('node test.js test.js -a -b -c'); // { default: 'test.js', a: true, b: true, c: true, } + * + * pcp('node test.js test.js -a=123'); // { default: 'test.js', a: '123' } + * + * pcp('node test.js test.js -a=123 333 555 -b 666 888 -c=1 -b=999'); // { default: 'test.js', a: ['123', '333', '555'], b: ['666', '888', '999'], c: '1', } + * + * @param arr 命令行参数数组 + * @param prefix 前缀 --d --f 前缀是"--" + * @param defaultKey 如果前面没有变量名那么使用默认 + */ +export function parseCmdParams( + arr: string[], + prefix = '-', + defaultKey = 'default', +): Map { + const eqReg = /([^=]+)=([\s\S]+)?/; + const isKeyReg = new RegExp(`^${prefix}`); + const list = arr.slice(); + const map: ReturnType = new Map(); + let currentKey = defaultKey; + let item: string; + function setKey(): void { + let key = item.replace(isKeyReg, ''); + if (eqReg.test(key)) { + key = RegExp.$1; + const value = RegExp.$2; + value && list.unshift(value); + } + currentKey = key; + if (!map.has(currentKey)) { + map.set(currentKey, true); + } + } + + // fullFight + function setValue() { + const existValue = map.get(currentKey); + switch (typeOf(existValue)) { + case 'undefined': + case 'boolean': + map.set(currentKey, item); + break; + case 'array': + (existValue as Array).push(item); + break; + default: + map.set(currentKey, [existValue as string, item]); + } + } + while ((item = list.shift() as string)) { + if (isKeyReg.test(item)) { + setKey(); + continue; + } + setValue(); + } + return map; +} diff --git a/src/common/polling.ts b/src/common/polling.ts new file mode 100644 index 00000000..42d47de6 --- /dev/null +++ b/src/common/polling.ts @@ -0,0 +1,71 @@ +/** + * 轮询函数 + * + * 用于代替setInterval,回调且支持promise + * + * @example + * + * let t = 0; + * + * let { cancel, promise } = polling((times) => { + * t = times; + * if (times === 10) cancel(); + * }, 10); + * await promise; + * t; // 10 + * + * @param callback 回调,返回值支持promise + * @param interval 间隔 + * @param [immediate=true] 是否马上执行第一次 + */ +export function polling( + callback: (times: number) => void | Promise, + interval: number, + immediate = true, +): { + promise: Promise; + cancel: () => void; +} { + enum state { + running, + stopped, + } + let timer: number; + let status: state; + let times = 1; + let lastTime = Date.now(); + let diff = 0; + let resolve: () => void; + const cancel = () => { + status = state.stopped; + resolve(); + clearTimeout(timer); + }; + const promise = new Promise((res) => { + resolve = res; + function run() { + const back = callback(times++); + back instanceof Promise ? back.then(timeout, cancel) : timeout(); + } + function timeout() { + const delay = interval - diff; + timer = setTimeout(() => { + if (status !== state.running) return; + const now = Date.now(); + diff = now - lastTime - delay; + lastTime = now; + run(); + }, delay) as any; + } + status = state.running; + if (immediate) { + run(); + } else { + timeout(); + } + }); + return { + promise, + cancel, + }; +} diff --git a/src/common/throttle.ts b/src/common/throttle.ts new file mode 100644 index 00000000..7a66fb43 --- /dev/null +++ b/src/common/throttle.ts @@ -0,0 +1,144 @@ +import { createTimeCountDown } from '../time'; +import { debounce } from './debounce'; + +/** + * 节流函数 + * --- + * 节流除非是开启了尾调用否则是立即执行的,也就不需要防抖的cancel与flush + * + * @example + * + * // ----------- 基础用法 ----------- + * let count = 0; + * let elseCount = 0; + * let res = ''; + * const wrapFn = throttle((_res: string) => (count++, (res = _res)), 10, { + * invalidCB() { + * elseCount++; + * }, + * }); + * + * wrapFn('0'); + * wrapFn('1'); + * wrapFn('2'); + * + * res; // '0' + * elseCount; // 2 + * + * // ----------- 首调用 ----------- + * let times = 0; + * + * let wrapFn = throttle(() => times++, 100, { leading: false }); + * // 初始时时0次 + * times; // 0 + * // 执行一次 + * wrapFn(); + * // 由于节流包裹函数时就开启了节流,此时还在时间内,所以内部不执行 + * times; // 0 + * await sleep(120); + * // 上一次执行的被丢弃了 + * times; // 0 + * // 在间隔期外执行 + * wrapFn(); + * // 此时成功执行 + * times; // 1 + * + * times = 0; + * // 立即执行 + * wrapFn = throttle(fn, 100, { leading: true }); + * times; // 0 + * wrapFn(); + * // 由于节流包裹时未开启计时,所以 + * times; // 1 + * + * // ----------- 尾调用 ----------- + * + * let times = 0; + * const wrapFn = throttle(() => times++, 100, { leading: false, trailing: true }); + * // 初始时时0次 + * times; // 0 + * // 执行一次 + * wrapFn(); + * wrapFn(); + * wrapFn(); + * // 由于节流包裹函数时就开启了节流,此时还在时间内,所以内部不执行 + * times; // 0 + * await sleep(120); + * // 上一次执行的不会被丢弃 + * times; // 1 + * + * + * @param callback 需要被节流函数包裹的函数 + * @param interval 间隔时间 + * @param options + * @param [options.leading=true] 首调用;未开启时是有个初始倒计时的,为true时关闭初始倒计时,默认true + * @param [options.trailing=false] 尾调用 + * @param options.invalidCB 间隔期间调用throttle返回的函数执行的回调 例如一个按钮5秒点击一次,不可点击时执行该函数 + */ +export function throttle void | any>( + callback: CB, + interval: number, + options: { + leading?: boolean; + trailing?: boolean; + invalidCB?: (timeCountDown: number) => void; + } = {}, +): CB { + const _options: Required[2]> = { + invalidCB: () => void 0, + trailing: false, + leading: true, + ...options, + }; + let getCountDown = _options.leading ? () => 0 : createTimeCountDown(interval); + const db = _options.trailing ? debounce(callback, interval) : null; + return function (this: unknown, ...args: unknown[]) { + const countDown = getCountDown(); + if (countDown > 0) { + _options.invalidCB(countDown); + db?.apply(this, args); + return; + } + db?.cancel(); + getCountDown = createTimeCountDown(interval); + return callback.apply(this, args); + } as CB; +} + +// 第1种实现方式 +/*export function throttle (void | any)>( + callback: CB, + delay: number, + invalidCB?: (interval: number) => void, +): CB { + let lastTime = 0; + return function (...args: any[]) { + const now = Date.now(); + const interval = now - lastTime; + if (interval < delay) { + invalidCB && invalidCB(delay - interval); + return; + } + lastTime = now; + return callback.apply(this, args); + } as CB; +}*/ + +// 第三种实现方式,不能获取剩余时间或者另外获取时间,有点多余 +/*export function throttleByTimeOut (void | any)>( + callback: CB, + delay: number, + invalidCB?: (interval: number) => void, +): CB { + let throttling = false; + return function (...args: any[]) { + if (throttling) { + return; + } + throttling = true; + setTimeout(() => { + throttling = false; + }, delay); + return callback.apply(this, args); + } as CB; +}*/ From 9575474267d1c8e2c4f6b1bb29ee4e665922968e Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 27 Apr 2023 05:05:57 +0800 Subject: [PATCH 28/30] =?UTF-8?q?feat(common):=20formatBytes=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E5=AD=97=E8=8A=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/formatBytes.ts | 89 +++++++++++++++++++++++++++++++++++++++ src/common/index.ts | 1 + 2 files changed, 90 insertions(+) create mode 100644 src/common/formatBytes.ts diff --git a/src/common/formatBytes.ts b/src/common/formatBytes.ts new file mode 100644 index 00000000..82512e93 --- /dev/null +++ b/src/common/formatBytes.ts @@ -0,0 +1,89 @@ +import { toNonExponential } from '../number'; + +export type BYTE_UNIT = 'YB' | 'ZB' | 'EB' | 'PB' | 'TB' | 'GB' | 'MB' | 'KB' | 'B'; + +/** + * 格式化字节数 + * + * @example + * + * formatBytes(0); // '0B' + * formatBytes(1); // '1B' + * formatBytes(-1); // '-1B' + * + * formatBytes(1024); // '1KB' + * formatBytes(1024 * 1024); // '1MB' + * formatBytes(1024 * 1024 * 1024); // '1GB' + * formatBytes(1024 * 1024 * 1024 * 1024); // '1TB' + * formatBytes(1024 * 1024 * 1024 * 1024 * 1024); // '1PB' + * formatBytes(1024 ** 6); // '1EB' + * formatBytes(1024 ** 7); // '1ZB' + * formatBytes(1024 ** 8); // '1YB' + * + * formatBytes(1024 * 512 + 1000); // '512.98KB' + * + * // 指定单位 + * formatBytes(1024 * 512, { unit: 'MB' }); // '0.5MB' + * formatBytes(1024 * 512, { unit: 'GB' }); // '0GB' + * // 指定小数位 + * formatBytes(1024 * 512, { unit: 'GB', fractionDigits: 5 }); // '0.00049GB' + * formatBytes(1, { unit: 'GB', fractionDigits: 9 }); // '0.000000001GB' + * // 使用科学计数法 + * formatBytes(1, { unit: 'GB', fractionDigits: 9, exponential: true }); // '1e-9GB' + * + * @param bytes 字节数 + * @param {{}} options + * @param options.unit 指定单位 + * @param [options.fractionDigits=2] 指定小数位;默认2 + * @param [options.exponential=false] 是否使用科学计数法;默认false + */ +export function formatBytes( + bytes: number, + { + unit, + fractionDigits = 2, + exponential = false, + }: { unit?: BYTE_UNIT; fractionDigits?: number; exponential?: boolean } = {}, +): string { + // 名称 -符号 - 二进制计量 - 十进制计量 - 字节数 - 等于 + // KiloByte KB 210 103 1,024 1,024 B + // MegaByte MB 220 106 1,048,576 1,024 KB + // GigaByte GB 230 109 1,073,741,824 1,024 MB + // TeraByte TB 240 1012 1,099,511,627,776 1,024 GB + // PetaByte PB 250 1015 1,125,899,906,842,624 1,024 TB + // ExaByte EB 260 1018 1,152,921,504,606,846,976 1,024 PB + // ZettaByte ZB 270 1021 1,180,591,620,717,411,303,424 1,024 EB + // YottaByte YB 280 1024 1,208,925,819,614,629,174,706,176 1,024 ZB + + const kb = 1024; + const mb = kb ** 2; + const gb = kb ** 3; + const tb = kb ** 4; + const pb = kb ** 5; + const eb = kb ** 6; + const zb = kb ** 7; + const yb = kb ** 8; + const match: [number, BYTE_UNIT][] = [ + [yb, 'YB'], + [zb, 'ZB'], + [eb, 'EB'], + [pb, 'PB'], + [tb, 'TB'], + [gb, 'GB'], + [mb, 'MB'], + [kb, 'KB'], + [0, 'B'], + ]; + + const handler: (item: [number, BYTE_UNIT]) => boolean = unit + ? ([, u]) => u === unit + : ( + (absByte: number) => + ([range]) => + absByte >= range + )(Math.abs(bytes)); + + const [range, _unit] = match.find(handler)!; + const result = Number((bytes / (range || 1)).toFixed(fractionDigits)); + return (exponential ? result : toNonExponential(result)) + _unit; +} diff --git a/src/common/index.ts b/src/common/index.ts index fc67cd0e..8c2bde32 100644 --- a/src/common/index.ts +++ b/src/common/index.ts @@ -8,3 +8,4 @@ export * from './createUUID'; export * from './createEnum'; export * from './getRoot'; export * from './parseCmdParams'; +export * from './formatBytes'; From 074ae9ad360c8d366401ea4b555889e82d402ba7 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 27 Apr 2023 05:06:08 +0800 Subject: [PATCH 29/30] =?UTF-8?q?test(common):=20formatBytes=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E5=AD=97=E8=8A=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __tests__/common.test.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/__tests__/common.test.ts b/__tests__/common.test.ts index 2a41fed1..8157ecbc 100644 --- a/__tests__/common.test.ts +++ b/__tests__/common.test.ts @@ -499,4 +499,32 @@ describe('common', function () { a: '=123=333=444=555', }); }); + + test('formatBytes', () => { + const formatBytes = cm.formatBytes; + + expect(formatBytes(0)).toBe('0B'); + expect(formatBytes(1)).toBe('1B'); + expect(formatBytes(-1)).toBe('-1B'); + + expect(formatBytes(1024)).toBe('1KB'); + expect(formatBytes(1024 * 1024)).toBe('1MB'); + expect(formatBytes(1024 * 1024 * 1024)).toBe('1GB'); + expect(formatBytes(1024 * 1024 * 1024 * 1024)).toBe('1TB'); + expect(formatBytes(1024 * 1024 * 1024 * 1024 * 1024)).toBe('1PB'); + expect(formatBytes(1024 ** 6)).toBe('1EB'); + expect(formatBytes(1024 ** 7)).toBe('1ZB'); + expect(formatBytes(1024 ** 8)).toBe('1YB'); + + expect(formatBytes(1024 * 512 + 1000)).toBe('512.98KB'); + + // 指定单位 + expect(formatBytes(1024 * 512, { unit: 'MB' })).toBe('0.5MB'); + expect(formatBytes(1024 * 512, { unit: 'GB' })).toBe('0GB'); + // 指定小数位 + expect(formatBytes(1024 * 512, { unit: 'GB', fractionDigits: 5 })).toBe('0.00049GB'); + expect(formatBytes(1, { unit: 'GB', fractionDigits: 9 })).toBe('0.000000001GB'); + // 使用科学计数法 + expect(formatBytes(1, { unit: 'GB', fractionDigits: 9, exponential: true })).toBe('1e-9GB'); + }); }); From 896fa749f8419b455321c76b1207132e82073bd0 Mon Sep 17 00:00:00 2001 From: dyh_a Date: Thu, 27 Apr 2023 05:13:19 +0800 Subject: [PATCH 30/30] release: v0.0.18 --- CHANGELOG.md | 20 ++++++++++++++++++++ package.json | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 748ace66..3e5c4f4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ +## [0.0.18](https://github.com/js-tool-pack/basic/compare/v0.0.17...v0.0.18) (2023-04-26) + +### Bug Fixes + +- **time/getTheLastDateOfAMonth:** 日期时间未归零 ([fecefde](https://github.com/js-tool-pack/basic/commit/fecefdef0cc2fcffba221febd287789de7a21995)) + +### Features + +- **common:** formatBytes 格式化字节数 ([9575474](https://github.com/js-tool-pack/basic/commit/9575474267d1c8e2c4f6b1bb29ee4e665922968e)) +- **time/howLongAgo:** 添加 now template ([53a82a0](https://github.com/js-tool-pack/basic/commit/53a82a01f0c56ce4ee566527aa044efb97104afb)) +- **time/howLongAgo:** 第二个参数改为可选参数 ([c557d8e](https://github.com/js-tool-pack/basic/commit/c557d8ed40497f8760f4d03ea79fb2d69f8d38f4)) +- **time:** getStartOfDate 获取某一天的开始 Date ([edc3729](https://github.com/js-tool-pack/basic/commit/edc37290afc3d2dea46dd57bee3fa0a5141eba23)) +- **time:** getStartOfNextWeek 获取某日下个星期开始的 date ([871f258](https://github.com/js-tool-pack/basic/commit/871f258e65ad96bcec0f4b34727cff8b90c7eca8)) +- **time:** getStartOfWeek 获取某日所在星期开始的 date ([ac01c68](https://github.com/js-tool-pack/basic/commit/ac01c6846f0226eab8359cc9858590545e7cb107)) +- **time:** getTheLastDateOfAMonth 重命名为 getEndOfMonth ([cf57ef7](https://github.com/js-tool-pack/basic/commit/cf57ef78708a33be6623a7233a91f6c05e4cf2ee)) + +### BREAKING CHANGES + +- **time:** getTheLastDateOfAMonth 不能再使用 + ## [0.0.17](https://github.com/js-tool-pack/basic/compare/v0.0.16...v0.0.17) (2023-04-08) ### Features diff --git a/package.json b/package.json index b4b5e576..cae871ea 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tool-pack/basic", - "version": "0.0.17", + "version": "0.0.18", "packageManager": "pnpm@7.1.0", "sideEffects": false, "description": "🛠 typescript javascript basic utils functions / 基础工具函数",