diff --git a/.github/workflows/lint-format.yml b/.github/workflows/lint-format.yml index 38a7c02c..b9f8ebd2 100644 --- a/.github/workflows/lint-format.yml +++ b/.github/workflows/lint-format.yml @@ -18,12 +18,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 20 - name: Setup pnpm uses: ./.github/actions/setup-pnpm diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e2126271..fc764a07 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Create release env: @@ -26,12 +26,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 20 registry-url: https://registry.npmjs.org - name: Setup pnpm diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9529a083..b2745c14 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,10 +30,9 @@ jobs: fail-fast: false matrix: node: - - 14 - 16 - 18 - - 19 + - 20 os: - name: Ubuntu version: ubuntu-latest @@ -43,7 +42,7 @@ jobs: version: macOS-latest steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v3 diff --git a/README.md b/README.md index e25f9419..1f92edd9 100644 --- a/README.md +++ b/README.md @@ -335,12 +335,12 @@ For more details, visit https://github.com/open-cli-tools/concurrently - `prefix`: the prefix type to use when logging processes output. Possible values: `index`, `pid`, `time`, `command`, `name`, `none`, or a template (eg `[{time} process: {pid}]`). Default: the name of the process, or its index if no name is set. - - `prefixColors`: a list of colors as supported by [chalk](https://www.npmjs.com/package/chalk) or `auto` for an automatically picked color. + - `prefixColors`: a list of colors or a string as supported by [chalk](https://www.npmjs.com/package/chalk) and additional style `auto` for an automatically picked color. If concurrently would run more commands than there are colors, the last color is repeated, unless if the last color value is `auto` which means following colors are automatically picked to vary. Prefix colors specified per-command take precedence over this list. - `prefixLength`: how many characters to show when prefixing with `command`. Default: `10` - `raw`: whether raw mode should be used, meaning strictly process output will - be logged, without any prefixes, coloring or extra stuff. + be logged, without any prefixes, coloring or extra stuff. Can be overriden per command. - `successCondition`: the condition to consider the run was successful. If `first`, only the first process to exit will make up the success of the run; if `last`, the last process that exits will determine whether the run succeeds. Anything else means all processes should exit successfully. @@ -376,7 +376,7 @@ const { result } = concurrently( killOthers: ['failure', 'success'], restartTries: 3, cwd: path.resolve(__dirname, 'scripts'), - } + }, ); result.then(success, failure); ``` diff --git a/bin/concurrently.spec.ts b/bin/concurrently.spec.ts index 5c11f976..c0b2e1bb 100644 --- a/bin/concurrently.spec.ts +++ b/bin/concurrently.spec.ts @@ -80,16 +80,17 @@ const run = (args: string, ctrlcWrapper?: boolean) => { }); const exit = Rx.firstValueFrom( - Rx.fromEvent<[number | null, NodeJS.Signals | null]>(child, 'exit').pipe( - map((exit) => { + Rx.fromEvent(child, 'exit').pipe( + map((event) => { + const exit = event as [number | null, NodeJS.Signals | null]; return { /** The exit code if the child exited on its own. */ code: exit[0], /** The signal by which the child process was terminated. */ signal: exit[1], }; - }) - ) + }), + ), ); const getLogLines = async (): Promise => { @@ -196,9 +197,9 @@ describe('exiting conditions', () => { // TODO: Flappy value due to race condition, sometimes killed by concurrently (exit code 1), // sometimes terminated on its own (exit code 0). // Related issue: https://github.com/open-cli-tools/concurrently/issues/283 - isWindows ? '(3221225786|0|1)' : 'SIGINT' - ) - ) + isWindows ? '(3221225786|0|1)' : 'SIGINT', + ), + ), ); }); }); @@ -232,7 +233,7 @@ describe('--hide', () => { describe('--group', () => { it('groups output per process', async () => { const lines = await run( - '--group "echo foo && node fixtures/sleep.mjs 1 && echo bar" "echo baz"' + '--group "echo foo && node fixtures/sleep.mjs 1 && echo bar" "echo baz"', ).getLogLines(); expect(lines.slice(0, 4)).toEqual([ @@ -256,7 +257,7 @@ describe('--names', () => { it('is split using --name-separator arg', async () => { const lines = await run( - '--names "foo|bar" --name-separator "|" "echo foo" "echo bar"' + '--names "foo|bar" --name-separator "|" "echo foo" "echo bar"', ).getLogLines(); expect(lines).toContainEqual(expect.stringContaining('[foo] foo')); @@ -301,25 +302,25 @@ describe('--kill-others', () => { expect(lines).toContainEqual(expect.stringContaining('[1] exit 0 exited with code 0')); expect(lines).toContainEqual( - expect.stringContaining('Sending SIGTERM to other processes') + expect.stringContaining('Sending SIGTERM to other processes'), ); expect(lines).toContainEqual( expect.stringMatching( - createKillMessage('[0] node fixtures/sleep.mjs 10', 'SIGTERM') - ) + createKillMessage('[0] node fixtures/sleep.mjs 10', 'SIGTERM'), + ), ); }); }); it('kills on failure', async () => { const lines = await run( - '--kill-others "node fixtures/sleep.mjs 10" "exit 1"' + '--kill-others "node fixtures/sleep.mjs 10" "exit 1"', ).getLogLines(); expect(lines).toContainEqual(expect.stringContaining('[1] exit 1 exited with code 1')); expect(lines).toContainEqual(expect.stringContaining('Sending SIGTERM to other processes')); expect(lines).toContainEqual( - expect.stringMatching(createKillMessage('[0] node fixtures/sleep.mjs 10', 'SIGTERM')) + expect.stringMatching(createKillMessage('[0] node fixtures/sleep.mjs 10', 'SIGTERM')), ); }); }); @@ -327,24 +328,24 @@ describe('--kill-others', () => { describe('--kill-others-on-fail', () => { it('does not kill on success', async () => { const lines = await run( - '--kill-others-on-fail "node fixtures/sleep.mjs 0.5" "exit 0"' + '--kill-others-on-fail "node fixtures/sleep.mjs 0.5" "exit 0"', ).getLogLines(); expect(lines).toContainEqual(expect.stringContaining('[1] exit 0 exited with code 0')); expect(lines).toContainEqual( - expect.stringContaining('[0] node fixtures/sleep.mjs 0.5 exited with code 0') + expect.stringContaining('[0] node fixtures/sleep.mjs 0.5 exited with code 0'), ); }); it('kills on failure', async () => { const lines = await run( - '--kill-others-on-fail "node fixtures/sleep.mjs 10" "exit 1"' + '--kill-others-on-fail "node fixtures/sleep.mjs 10" "exit 1"', ).getLogLines(); expect(lines).toContainEqual(expect.stringContaining('[1] exit 1 exited with code 1')); expect(lines).toContainEqual(expect.stringContaining('Sending SIGTERM to other processes')); expect(lines).toContainEqual( - expect.stringMatching(createKillMessage('[0] node fixtures/sleep.mjs 10', 'SIGTERM')) + expect.stringMatching(createKillMessage('[0] node fixtures/sleep.mjs 10', 'SIGTERM')), ); }); }); @@ -364,14 +365,14 @@ describe('--handle-input', () => { expect(exit.code).toBe(0); expect(lines).toContainEqual(expect.stringContaining('[0] stop')); expect(lines).toContainEqual( - expect.stringContaining('[0] node fixtures/read-echo.js exited with code 0') + expect.stringContaining('[0] node fixtures/read-echo.js exited with code 0'), ); }); }); it('forwards input to process --default-input-target', async () => { const child = run( - '-ki --default-input-target 1 "node fixtures/read-echo.js" "node fixtures/read-echo.js"' + '-ki --default-input-target 1 "node fixtures/read-echo.js" "node fixtures/read-echo.js"', ); child.log.subscribe((line) => { if (/\[1\] READING/.test(line)) { @@ -384,7 +385,7 @@ describe('--handle-input', () => { expect(exit.code).toBeGreaterThan(0); expect(lines).toContainEqual(expect.stringContaining('[1] stop')); expect(lines).toContainEqual( - expect.stringMatching(createKillMessage('[0] node fixtures/read-echo.js', 'SIGTERM')) + expect.stringMatching(createKillMessage('[0] node fixtures/read-echo.js', 'SIGTERM')), ); }); @@ -401,7 +402,7 @@ describe('--handle-input', () => { expect(exit.code).toBeGreaterThan(0); expect(lines).toContainEqual(expect.stringContaining('[1] stop')); expect(lines).toContainEqual( - expect.stringMatching(createKillMessage('[0] node fixtures/read-echo.js', 'SIGTERM')) + expect.stringMatching(createKillMessage('[0] node fixtures/read-echo.js', 'SIGTERM')), ); }); }); @@ -410,12 +411,12 @@ describe('--timings', () => { const defaultTimestampFormatRegex = /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}/; const processStartedMessageRegex = (index: number, command: string) => { return new RegExp( - `^\\[${index}] ${command} started at ${defaultTimestampFormatRegex.source}$` + `^\\[${index}] ${command} started at ${defaultTimestampFormatRegex.source}$`, ); }; const processStoppedMessageRegex = (index: number, command: string) => { return new RegExp( - `^\\[${index}] ${command} stopped at ${defaultTimestampFormatRegex.source} after (\\d|,)+ms$` + `^\\[${index}] ${command} stopped at ${defaultTimestampFormatRegex.source} after (\\d|,)+ms$`, ); }; @@ -429,17 +430,17 @@ describe('--timings', () => { }; it.each(Object.entries(timingsTests))('%s', async (_, commands) => { const lines = await run( - `--timings ${commands.map((command) => `"${command}"`).join(' ')}` + `--timings ${commands.map((command) => `"${command}"`).join(' ')}`, ).getLogLines(); // Expect output to contain process start / stop messages for each command commands.forEach((command, index) => { const escapedCommand = escapeRegExp(command); expect(lines).toContainEqual( - expect.stringMatching(processStartedMessageRegex(index, escapedCommand)) + expect.stringMatching(processStartedMessageRegex(index, escapedCommand)), ); expect(lines).toContainEqual( - expect.stringMatching(processStoppedMessageRegex(index, escapedCommand)) + expect.stringMatching(processStoppedMessageRegex(index, escapedCommand)), ); }); diff --git a/bin/concurrently.ts b/bin/concurrently.ts index 6c47f7a6..13cfe271 100755 --- a/bin/concurrently.ts +++ b/bin/concurrently.ts @@ -188,7 +188,7 @@ const args = yargs(argsBeforeSep) }) .group( ['m', 'n', 'name-separator', 's', 'r', 'no-color', 'hide', 'g', 'timings', 'P'], - 'General' + 'General', ) .group(['p', 'c', 'l', 't'], 'Prefix styling') .group(['i', 'default-input-target'], 'Input handling') @@ -229,8 +229,8 @@ concurrently( timestampFormat: args.timestampFormat, timings: args.timings, additionalArguments: args.passthroughArguments ? argsAfterSep : undefined, - } + }, ).result.then( () => process.exit(0), - () => process.exit(1) + () => process.exit(1), ); diff --git a/bin/epilogue.ts b/bin/epilogue.ts index 72726c88..d8a598bb 100644 --- a/bin/epilogue.ts +++ b/bin/epilogue.ts @@ -81,7 +81,7 @@ const examplesString = examples .split('\n') .map((line) => ` ${line}`) .join('\n'), - ].join('\n\n') + ].join('\n\n'), ) .join('\n\n'); diff --git a/package.json b/package.json index bb479764..bb1a09d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "concurrently", - "version": "8.0.1", + "version": "8.2.2", "description": "Run commands concurrently", "main": "index.js", "types": "dist/src/index.d.ts", @@ -10,14 +10,14 @@ "conc": "./dist/bin/concurrently.js" }, "engines": { - "node": "^14.13.0 || >=16.0.0" + "node": ">=16" }, "exports": { ".": { + "types": "./dist/src/index.d.ts", "import": "./index.mjs", "require": "./index.js", - "default": "./index.js", - "types": "./dist/src/index.d.ts" + "default": "./index.js" }, "./package.json": "./package.json" }, @@ -51,44 +51,44 @@ "license": "MIT", "dependencies": { "chalk": "^4.1.2", - "date-fns": "^2.29.3", + "date-fns": "^2.30.0", "lodash": "^4.17.21", - "rxjs": "^7.8.0", - "shell-quote": "^1.8.0", - "spawn-command": "0.0.2-1", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", "supports-color": "^8.1.1", "tree-kill": "^1.2.2", - "yargs": "^17.7.1" + "yargs": "^17.7.2" }, "devDependencies": { "@hirez_io/observer-spy": "^2.2.0", - "@swc/core": "^1.3.42", - "@swc/jest": "^0.2.24", - "@types/jest": "^29.5.0", - "@types/lodash": "^4.14.192", - "@types/node": "^14.18.42", - "@types/shell-quote": "^1.7.1", - "@types/supports-color": "^8.1.1", - "@types/yargs": "^17.0.24", - "@typescript-eslint/eslint-plugin": "^5.57.0", - "@typescript-eslint/parser": "^5.57.0", + "@swc/core": "^1.3.93", + "@swc/jest": "^0.2.29", + "@types/jest": "^29.5.6", + "@types/lodash": "^4.14.200", + "@types/node": "^16.18.59", + "@types/shell-quote": "^1.7.3", + "@types/supports-color": "^8.1.2", + "@types/yargs": "^17.0.29", + "@typescript-eslint/eslint-plugin": "^6.8.0", + "@typescript-eslint/parser": "^6.8.0", "coveralls-next": "^4.2.0", "ctrlc-wrapper": "^0.0.4", - "esbuild": "~0.17.14", - "eslint": "^8.37.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-jest": "^27.2.1", - "eslint-plugin-prettier": "^4.2.1", + "esbuild": "~0.19.5", + "eslint": "^8.51.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jest": "^27.4.2", + "eslint-plugin-prettier": "^5.0.1", "eslint-plugin-simple-import-sort": "^10.0.0", "husky": "^8.0.3", - "jest": "^29.5.0", + "jest": "^29.7.0", "jest-create-mock-instance": "^2.0.0", - "lint-staged": "^13.2.0", - "prettier": "^2.8.7", + "lint-staged": "^13.3.0", + "prettier": "^3.0.3", "safe-publish-latest": "^2.0.0", - "string-argv": "^0.3.1", - "typescript": "~5.0.2" + "string-argv": "^0.3.2", + "typescript": "~5.2.2" }, "files": [ "dist", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fb7254d0..bcd35d30 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,24 +1,28 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + dependencies: chalk: specifier: ^4.1.2 version: 4.1.2 date-fns: - specifier: ^2.29.3 - version: 2.29.3 + specifier: ^2.30.0 + version: 2.30.0 lodash: specifier: ^4.17.21 version: 4.17.21 rxjs: - specifier: ^7.8.0 - version: 7.8.0 + specifier: ^7.8.1 + version: 7.8.1 shell-quote: - specifier: ^1.8.0 - version: 1.8.0 + specifier: ^1.8.1 + version: 1.8.1 spawn-command: - specifier: 0.0.2-1 - version: 0.0.2-1 + specifier: 0.0.2 + version: 0.0.2 supports-color: specifier: ^8.1.1 version: 8.1.1 @@ -26,43 +30,43 @@ dependencies: specifier: ^1.2.2 version: 1.2.2 yargs: - specifier: ^17.7.1 - version: 17.7.1 + specifier: ^17.7.2 + version: 17.7.2 devDependencies: '@hirez_io/observer-spy': specifier: ^2.2.0 - version: 2.2.0(rxjs@7.8.0)(typescript@5.0.2) + version: 2.2.0(rxjs@7.8.1)(typescript@5.2.2) '@swc/core': - specifier: ^1.3.42 - version: 1.3.42 + specifier: ^1.3.93 + version: 1.3.93 '@swc/jest': - specifier: ^0.2.24 - version: 0.2.24(@swc/core@1.3.42) + specifier: ^0.2.29 + version: 0.2.29(@swc/core@1.3.93) '@types/jest': - specifier: ^29.5.0 - version: 29.5.0 + specifier: ^29.5.6 + version: 29.5.6 '@types/lodash': - specifier: ^4.14.192 - version: 4.14.192 + specifier: ^4.14.200 + version: 4.14.200 '@types/node': - specifier: ^14.18.42 - version: 14.18.42 + specifier: ^16.18.59 + version: 16.18.59 '@types/shell-quote': - specifier: ^1.7.1 - version: 1.7.1 + specifier: ^1.7.3 + version: 1.7.3 '@types/supports-color': - specifier: ^8.1.1 - version: 8.1.1 + specifier: ^8.1.2 + version: 8.1.2 '@types/yargs': - specifier: ^17.0.24 - version: 17.0.24 + specifier: ^17.0.29 + version: 17.0.29 '@typescript-eslint/eslint-plugin': - specifier: ^5.57.0 - version: 5.57.0(@typescript-eslint/parser@5.57.0)(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2) + specifier: ^6.8.0 + version: 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: ^5.57.0 - version: 5.57.0(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2) + specifier: ^6.8.0 + version: 6.8.0(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2) coveralls-next: specifier: ^4.2.0 version: 4.2.0 @@ -70,59 +74,64 @@ devDependencies: specifier: ^0.0.4 version: 0.0.4 esbuild: - specifier: ~0.17.14 - version: 0.17.14 + specifier: ~0.19.5 + version: 0.19.5 eslint: - specifier: ^8.37.0 - version: 8.37.0(supports-color@8.1.1) + specifier: ^8.51.0 + version: 8.51.0(supports-color@8.1.1) eslint-config-prettier: - specifier: ^8.8.0 - version: 8.8.0(eslint@8.37.0) + specifier: ^9.0.0 + version: 9.0.0(eslint@8.51.0) eslint-plugin-import: - specifier: ^2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.57.0)(eslint@8.37.0)(supports-color@8.1.1) + specifier: ^2.28.1 + version: 2.28.1(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(supports-color@8.1.1) eslint-plugin-jest: - specifier: ^27.2.1 - version: 27.2.1(@typescript-eslint/eslint-plugin@5.57.0)(eslint@8.37.0)(jest@29.5.0)(supports-color@8.1.1)(typescript@5.0.2) + specifier: ^27.4.2 + version: 27.4.2(@typescript-eslint/eslint-plugin@6.8.0)(eslint@8.51.0)(jest@29.7.0)(supports-color@8.1.1)(typescript@5.2.2) eslint-plugin-prettier: - specifier: ^4.2.1 - version: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.37.0)(prettier@2.8.7) + specifier: ^5.0.1 + version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.51.0)(prettier@3.0.3) eslint-plugin-simple-import-sort: specifier: ^10.0.0 - version: 10.0.0(eslint@8.37.0) + version: 10.0.0(eslint@8.51.0) husky: specifier: ^8.0.3 version: 8.0.3 jest: - specifier: ^29.5.0 - version: 29.5.0(@types/node@14.18.42)(supports-color@8.1.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@16.18.59)(supports-color@8.1.1) jest-create-mock-instance: specifier: ^2.0.0 version: 2.0.0 lint-staged: - specifier: ^13.2.0 - version: 13.2.0(supports-color@8.1.1) + specifier: ^13.3.0 + version: 13.3.0(supports-color@8.1.1) prettier: - specifier: ^2.8.7 - version: 2.8.7 + specifier: ^3.0.3 + version: 3.0.3 safe-publish-latest: specifier: ^2.0.0 version: 2.0.0 string-argv: - specifier: ^0.3.1 - version: 0.3.1 + specifier: ^0.3.2 + version: 0.3.2 typescript: - specifier: ~5.0.2 - version: 5.0.2 + specifier: ~5.2.2 + version: 5.2.2 packages: + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + /@ampproject/remapping@2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.19 dev: true /@babel/code-frame@7.18.6: @@ -155,7 +164,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true @@ -180,7 +189,7 @@ packages: '@babel/helper-validator-option': 7.18.6 browserslist: 4.21.4 lru-cache: 5.1.1 - semver: 6.3.0 + semver: 6.3.1 dev: true /@babel/helper-environment-visitor@7.18.9: @@ -417,6 +426,13 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/runtime@7.22.5: + resolution: {integrity: sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: false + /@babel/template@7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} @@ -457,8 +473,8 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@esbuild/android-arm64@0.17.14: - resolution: {integrity: sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==} + /@esbuild/android-arm64@0.19.5: + resolution: {integrity: sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -466,8 +482,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.17.14: - resolution: {integrity: sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==} + /@esbuild/android-arm@0.19.5: + resolution: {integrity: sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -475,8 +491,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.17.14: - resolution: {integrity: sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==} + /@esbuild/android-x64@0.19.5: + resolution: {integrity: sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -484,8 +500,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.17.14: - resolution: {integrity: sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==} + /@esbuild/darwin-arm64@0.19.5: + resolution: {integrity: sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -493,8 +509,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.17.14: - resolution: {integrity: sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==} + /@esbuild/darwin-x64@0.19.5: + resolution: {integrity: sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -502,8 +518,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.17.14: - resolution: {integrity: sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==} + /@esbuild/freebsd-arm64@0.19.5: + resolution: {integrity: sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -511,8 +527,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.17.14: - resolution: {integrity: sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==} + /@esbuild/freebsd-x64@0.19.5: + resolution: {integrity: sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -520,8 +536,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.17.14: - resolution: {integrity: sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==} + /@esbuild/linux-arm64@0.19.5: + resolution: {integrity: sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -529,8 +545,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.17.14: - resolution: {integrity: sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==} + /@esbuild/linux-arm@0.19.5: + resolution: {integrity: sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -538,8 +554,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.17.14: - resolution: {integrity: sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==} + /@esbuild/linux-ia32@0.19.5: + resolution: {integrity: sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -547,8 +563,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.17.14: - resolution: {integrity: sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==} + /@esbuild/linux-loong64@0.19.5: + resolution: {integrity: sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -556,8 +572,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.17.14: - resolution: {integrity: sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==} + /@esbuild/linux-mips64el@0.19.5: + resolution: {integrity: sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -565,8 +581,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.17.14: - resolution: {integrity: sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==} + /@esbuild/linux-ppc64@0.19.5: + resolution: {integrity: sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -574,8 +590,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.17.14: - resolution: {integrity: sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==} + /@esbuild/linux-riscv64@0.19.5: + resolution: {integrity: sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -583,8 +599,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.17.14: - resolution: {integrity: sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==} + /@esbuild/linux-s390x@0.19.5: + resolution: {integrity: sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -592,8 +608,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.17.14: - resolution: {integrity: sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==} + /@esbuild/linux-x64@0.19.5: + resolution: {integrity: sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -601,8 +617,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.17.14: - resolution: {integrity: sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==} + /@esbuild/netbsd-x64@0.19.5: + resolution: {integrity: sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -610,8 +626,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.17.14: - resolution: {integrity: sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==} + /@esbuild/openbsd-x64@0.19.5: + resolution: {integrity: sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -619,8 +635,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.17.14: - resolution: {integrity: sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==} + /@esbuild/sunos-x64@0.19.5: + resolution: {integrity: sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -628,8 +644,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.17.14: - resolution: {integrity: sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==} + /@esbuild/win32-arm64@0.19.5: + resolution: {integrity: sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -637,8 +653,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.17.14: - resolution: {integrity: sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==} + /@esbuild/win32-ia32@0.19.5: + resolution: {integrity: sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -646,8 +662,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.17.14: - resolution: {integrity: sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==} + /@esbuild/win32-x64@0.19.5: + resolution: {integrity: sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -655,28 +671,28 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.37.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.51.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.37.0(supports-color@8.1.1) - eslint-visitor-keys: 3.4.0 + eslint: 8.51.0(supports-color@8.1.1) + eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.4.1: - resolution: {integrity: sha512-BISJ6ZE4xQsuL/FmsyRaiffpq977bMlsKfGHTQrOGFErfByxIe6iZTxPf/00Zon9b9a7iUykfQwejN3s2ZW/Bw==} + /@eslint-community/regexpp@4.7.0: + resolution: {integrity: sha512-+HencqxU7CFJnQb7IKtuNBqS6Yx3Tz4kOL8BJXo+JyeiBm5MEX6pO8onXDkjrkCRlfYXS1Axro15ZjVFe9YgsA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.0.2(supports-color@8.1.1): - resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} + /@eslint/eslintrc@2.1.2(supports-color@8.1.1): + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) - espree: 9.5.1 + espree: 9.6.1 globals: 13.19.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -687,23 +703,23 @@ packages: - supports-color dev: true - /@eslint/js@8.37.0: - resolution: {integrity: sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==} + /@eslint/js@8.51.0: + resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@hirez_io/observer-spy@2.2.0(rxjs@7.8.0)(typescript@5.0.2): + /@hirez_io/observer-spy@2.2.0(rxjs@7.8.1)(typescript@5.2.2): resolution: {integrity: sha512-G9nv87vjRILgB/X1AtKBv1DZX7yXSYAOCXon/f+QULKoXVhVehYUF5Lv0SQ97ebf1sA48Z2CyQ9h2v4Pz6DgaQ==} peerDependencies: rxjs: '>=6.0.0' typescript: '>=2.8.1' dependencies: - rxjs: 7.8.0 - typescript: 5.0.2 + rxjs: 7.8.1 + typescript: 5.2.2 dev: true - /@humanwhocodes/config-array@0.11.8(supports-color@8.1.1): - resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} + /@humanwhocodes/config-array@0.11.11(supports-color@8.1.1): + resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -738,20 +754,20 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console@29.5.0: - resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} + /@jest/console@29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 - '@types/node': 14.18.42 + '@jest/types': 29.6.3 + '@types/node': 14.18.62 chalk: 4.1.2 - jest-message-util: 29.5.0 - jest-util: 29.5.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 slash: 3.0.0 dev: true - /@jest/core@29.5.0(supports-color@8.1.1): - resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} + /@jest/core@29.7.0(supports-color@8.1.1): + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -759,35 +775,36 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.5.0 - '@jest/reporters': 29.5.0(supports-color@8.1.1) - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0(supports-color@8.1.1) - '@jest/types': 29.5.0 - '@types/node': 14.18.42 + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0(supports-color@8.1.1) + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0(supports-color@8.1.1) + '@jest/types': 29.6.3 + '@types/node': 14.18.62 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.7.1 exit: 0.1.2 graceful-fs: 4.2.10 - jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@14.18.42)(supports-color@8.1.1) - jest-haste-map: 29.5.0 - jest-message-util: 29.5.0 - jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-resolve-dependencies: 29.5.0(supports-color@8.1.1) - jest-runner: 29.5.0(supports-color@8.1.1) - jest-runtime: 29.5.0(supports-color@8.1.1) - jest-snapshot: 29.5.0(supports-color@8.1.1) - jest-util: 29.5.0 - jest-validate: 29.5.0 - jest-watcher: 29.5.0 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@14.18.62)(supports-color@8.1.1) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0(supports-color@8.1.1) + jest-runner: 29.7.0(supports-color@8.1.1) + jest-runtime: 29.7.0(supports-color@8.1.1) + jest-snapshot: 29.7.0(supports-color@8.1.1) + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 micromatch: 4.0.5 - pretty-format: 29.5.0 + pretty-format: 29.7.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: + - babel-plugin-macros - supports-color - ts-node dev: true @@ -799,66 +816,59 @@ packages: '@jest/types': 27.5.1 dev: true - /@jest/environment@29.5.0: - resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 14.18.42 - jest-mock: 29.5.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.62 + jest-mock: 29.7.0 dev: true - /@jest/expect-utils@29.3.1: - resolution: {integrity: sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==} + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-get-type: 29.4.3 + jest-get-type: 29.6.3 dev: true - /@jest/expect-utils@29.5.0: - resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} + /@jest/expect@29.7.0(supports-color@8.1.1): + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-get-type: 29.4.3 - dev: true - - /@jest/expect@29.5.0(supports-color@8.1.1): - resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - expect: 29.5.0 - jest-snapshot: 29.5.0(supports-color@8.1.1) + expect: 29.7.0 + jest-snapshot: 29.7.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /@jest/fake-timers@29.5.0: - resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} + /@jest/fake-timers@29.7.0: + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 14.18.42 - jest-message-util: 29.5.0 - jest-mock: 29.5.0 - jest-util: 29.5.0 + '@types/node': 14.18.62 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 dev: true - /@jest/globals@29.5.0(supports-color@8.1.1): - resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} + /@jest/globals@29.7.0(supports-color@8.1.1): + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/expect': 29.5.0(supports-color@8.1.1) - '@jest/types': 29.5.0 - jest-mock: 29.5.0 + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0(supports-color@8.1.1) + '@jest/types': 29.6.3 + jest-mock: 29.7.0 transitivePeerDependencies: - supports-color dev: true - /@jest/reporters@29.5.0(supports-color@8.1.1): - resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} + /@jest/reporters@29.7.0(supports-color@8.1.1): + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -867,25 +877,25 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.5.0 - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0(supports-color@8.1.1) - '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 14.18.42 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0(supports-color@8.1.1) + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.19 + '@types/node': 14.18.62 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.10 istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 5.2.1(supports-color@8.1.1) + istanbul-lib-instrument: 6.0.0(supports-color@8.1.1) istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1(supports-color@8.1.1) istanbul-reports: 3.1.5 - jest-message-util: 29.5.0 - jest-util: 29.5.0 - jest-worker: 29.5.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -894,64 +904,57 @@ packages: - supports-color dev: true - /@jest/schemas@29.0.0: - resolution: {integrity: sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==} + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@sinclair/typebox': 0.24.51 + '@sinclair/typebox': 0.27.8 dev: true - /@jest/schemas@29.4.3: - resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} + /@jest/source-map@29.6.3: + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@sinclair/typebox': 0.25.24 - dev: true - - /@jest/source-map@29.4.3: - 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.17 + '@jridgewell/trace-mapping': 0.3.19 callsites: 3.1.0 graceful-fs: 4.2.10 dev: true - /@jest/test-result@29.5.0: - resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} + /@jest/test-result@29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.5.0 - '@jest/types': 29.5.0 + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer@29.5.0: - resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} + /@jest/test-sequencer@29.7.0: + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.5.0 + '@jest/test-result': 29.7.0 graceful-fs: 4.2.10 - jest-haste-map: 29.5.0 + jest-haste-map: 29.7.0 slash: 3.0.0 dev: true - /@jest/transform@29.5.0(supports-color@8.1.1): - resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} + /@jest/transform@29.7.0(supports-color@8.1.1): + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.20.7(supports-color@8.1.1) - '@jest/types': 29.5.0 - '@jridgewell/trace-mapping': 0.3.17 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.19 babel-plugin-istanbul: 6.1.1(supports-color@8.1.1) chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.10 - jest-haste-map: 29.5.0 - jest-regex-util: 29.4.3 - jest-util: 29.5.0 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 @@ -966,20 +969,20 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 14.18.42 + '@types/node': 14.18.62 '@types/yargs': 16.0.4 chalk: 4.1.2 dev: true - /@jest/types@29.5.0: - resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.4.3 + '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 14.18.42 - '@types/yargs': 17.0.24 + '@types/node': 14.18.62 + '@types/yargs': 17.0.29 chalk: 4.1.2 dev: true @@ -997,7 +1000,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.19 dev: true /@jridgewell/resolve-uri@3.1.0: @@ -1014,8 +1017,8 @@ packages: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true - /@jridgewell/trace-mapping@0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + /@jridgewell/trace-mapping@0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 @@ -1042,12 +1045,20 @@ packages: fastq: 1.15.0 dev: true - /@sinclair/typebox@0.24.51: - resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.1 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.2 dev: true - /@sinclair/typebox@0.25.24: - resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true /@sinonjs/commons@2.0.0: @@ -1062,8 +1073,8 @@ packages: '@sinonjs/commons': 2.0.0 dev: true - /@swc/core-darwin-arm64@1.3.42: - resolution: {integrity: sha512-hM6RrZFyoCM9mX3cj/zM5oXwhAqjUdOCLXJx7KTQps7NIkv/Qjvobgvyf2gAb89j3ARNo9NdIoLjTjJ6oALtiA==} + /@swc/core-darwin-arm64@1.3.93: + resolution: {integrity: sha512-gEKgk7FVIgltnIfDO6GntyuQBBlAYg5imHpRgLxB1zSI27ijVVkksc6QwISzFZAhKYaBWIsFSVeL9AYSziAF7A==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -1071,8 +1082,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.3.42: - resolution: {integrity: sha512-bjsWtHMb6wJK1+RGlBs2USvgZ0txlMk11y0qBLKo32gLKTqzUwRw0Fmfzuf6Ue2a/w//7eqMlPFEre4LvJajGw==} + /@swc/core-darwin-x64@1.3.93: + resolution: {integrity: sha512-ZQPxm/fXdDQtn3yrYSL/gFfA8OfZ5jTi33yFQq6vcg/Y8talpZ+MgdSlYM0FkLrZdMTYYTNFiuBQuuvkA+av+Q==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -1080,8 +1091,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.42: - resolution: {integrity: sha512-Oe0ggMz3MyqXNfeVmY+bBTL0hFSNY3bx8dhcqsh4vXk/ZVGse94QoC4dd92LuPHmKT0x6nsUzB86x2jU9QHW5g==} + /@swc/core-linux-arm-gnueabihf@1.3.93: + resolution: {integrity: sha512-OYFMMI2yV+aNe3wMgYhODxHdqUB/jrK0SEMHHS44GZpk8MuBXEF+Mcz4qjkY5Q1EH7KVQqXb/gVWwdgTHpjM2A==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -1089,8 +1100,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.3.42: - resolution: {integrity: sha512-ZJsa8NIW1RLmmHGTJCbM7OPSbBZ9rOMrLqDtUOGrT0uoJXZnnQqolflamB5wviW0X6h3Z3/PSTNGNDCJ3u3Lqg==} + /@swc/core-linux-arm64-gnu@1.3.93: + resolution: {integrity: sha512-BT4dT78odKnJMNiq5HdjBsv29CiIdcCcImAPxeFqAeFw1LL6gh9nzI8E96oWc+0lVT5lfhoesCk4Qm7J6bty8w==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -1098,8 +1109,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.3.42: - resolution: {integrity: sha512-YpZwlFAfOp5vkm/uVUJX1O7N3yJDO1fDQRWqsOPPNyIJkI2ydlRQtgN6ZylC159Qv+TimfXnGTlNr7o3iBAqjg==} + /@swc/core-linux-arm64-musl@1.3.93: + resolution: {integrity: sha512-yH5fWEl1bktouC0mhh0Chuxp7HEO4uCtS/ly1Vmf18gs6wZ8DOOkgAEVv2dNKIryy+Na++ljx4Ym7C8tSJTrLw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -1107,8 +1118,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.3.42: - resolution: {integrity: sha512-0ccpKnsZbyHBzaQFdP8U9i29nvOfKitm6oJfdJzlqsY/jCqwvD8kv2CAKSK8WhJz//ExI2LqNrDI0yazx5j7+A==} + /@swc/core-linux-x64-gnu@1.3.93: + resolution: {integrity: sha512-OFUdx64qvrGJhXKEyxosHxgoUVgba2ztYh7BnMiU5hP8lbI8G13W40J0SN3CmFQwPP30+3oEbW7LWzhKEaYjlg==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -1116,8 +1127,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.3.42: - resolution: {integrity: sha512-7eckRRuTZ6+3K21uyfXXgc2ZCg0mSWRRNwNT3wap2bYkKPeqTgb8pm8xYSZNEiMuDonHEat6XCCV36lFY6kOdQ==} + /@swc/core-linux-x64-musl@1.3.93: + resolution: {integrity: sha512-4B8lSRwEq1XYm6xhxHhvHmKAS7pUp1Q7E33NQ2TlmFhfKvCOh86qvThcjAOo57x8DRwmpvEVrqvpXtYagMN6Ig==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -1125,8 +1136,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.3.42: - resolution: {integrity: sha512-t27dJkdw0GWANdN4TV0lY/V5vTYSx5SRjyzzZolep358ueCGuN1XFf1R0JcCbd1ojosnkQg2L7A7991UjXingg==} + /@swc/core-win32-arm64-msvc@1.3.93: + resolution: {integrity: sha512-BHShlxtkven8ZjjvZ5QR6sC5fZCJ9bMujEkiha6W4cBUTY7ce7qGFyHmQd+iPC85d9kD/0cCiX/Xez8u0BhO7w==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -1134,8 +1145,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.3.42: - resolution: {integrity: sha512-xfpc/Zt/aMILX4IX0e3loZaFyrae37u3MJCv1gJxgqrpeLi7efIQr3AmERkTK3mxTO6R5urSliWw2W3FyZ7D3Q==} + /@swc/core-win32-ia32-msvc@1.3.93: + resolution: {integrity: sha512-nEwNWnz4JzYAK6asVvb92yeylfxMYih7eMQOnT7ZVlZN5ba9WF29xJ6kcQKs9HRH6MvWhz9+wRgv3FcjlU6HYA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -1143,8 +1154,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.3.42: - resolution: {integrity: sha512-ra2K4Tu++EJLPhzZ6L8hWUsk94TdK/2UKhL9dzCBhtzKUixsGCEqhtqH1zISXNvW8qaVLFIMUP37ULe80/IJaA==} + /@swc/core-win32-x64-msvc@1.3.93: + resolution: {integrity: sha512-jibQ0zUr4kwJaQVwgmH+svS04bYTPnPw/ZkNInzxS+wFAtzINBYcU8s2PMWbDb2NGYiRSEeoSGyAvS9H+24JFA==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -1152,34 +1163,50 @@ packages: dev: true optional: true - /@swc/core@1.3.42: - resolution: {integrity: sha512-nVFUd5+7tGniM2cT3LXaqnu3735Cu4az8A9gAKK+8sdpASI52SWuqfDBmjFCK9xG90MiVDVp2PTZr0BWqCIzpw==} + /@swc/core@1.3.93: + resolution: {integrity: sha512-690GRr1wUGmGYZHk7fUduX/JUwViMF2o74mnZYIWEcJaCcd9MQfkhsxPBtjeg6tF+h266/Cf3RPYhsFBzzxXcA==} engines: {node: '>=10'} requiresBuild: true + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true + dependencies: + '@swc/counter': 0.1.2 + '@swc/types': 0.1.5 optionalDependencies: - '@swc/core-darwin-arm64': 1.3.42 - '@swc/core-darwin-x64': 1.3.42 - '@swc/core-linux-arm-gnueabihf': 1.3.42 - '@swc/core-linux-arm64-gnu': 1.3.42 - '@swc/core-linux-arm64-musl': 1.3.42 - '@swc/core-linux-x64-gnu': 1.3.42 - '@swc/core-linux-x64-musl': 1.3.42 - '@swc/core-win32-arm64-msvc': 1.3.42 - '@swc/core-win32-ia32-msvc': 1.3.42 - '@swc/core-win32-x64-msvc': 1.3.42 - dev: true - - /@swc/jest@0.2.24(@swc/core@1.3.42): - resolution: {integrity: sha512-fwgxQbM1wXzyKzl1+IW0aGrRvAA8k0Y3NxFhKigbPjOJ4mCKnWEcNX9HQS3gshflcxq8YKhadabGUVfdwjCr6Q==} + '@swc/core-darwin-arm64': 1.3.93 + '@swc/core-darwin-x64': 1.3.93 + '@swc/core-linux-arm-gnueabihf': 1.3.93 + '@swc/core-linux-arm64-gnu': 1.3.93 + '@swc/core-linux-arm64-musl': 1.3.93 + '@swc/core-linux-x64-gnu': 1.3.93 + '@swc/core-linux-x64-musl': 1.3.93 + '@swc/core-win32-arm64-msvc': 1.3.93 + '@swc/core-win32-ia32-msvc': 1.3.93 + '@swc/core-win32-x64-msvc': 1.3.93 + dev: true + + /@swc/counter@0.1.2: + resolution: {integrity: sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==} + dev: true + + /@swc/jest@0.2.29(@swc/core@1.3.93): + resolution: {integrity: sha512-8reh5RvHBsSikDC3WGCd5ZTd2BXKkyOdK7QwynrCH58jk2cQFhhHhFBg/jvnWZehUQe/EoOImLENc9/DwbBFow==} engines: {npm: '>= 7.0.0'} peerDependencies: '@swc/core': '*' dependencies: '@jest/create-cache-key-function': 27.5.1 - '@swc/core': 1.3.42 + '@swc/core': 1.3.93 jsonc-parser: 3.2.0 dev: true + /@swc/types@0.1.5: + resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} + dev: true + /@types/babel__core@7.1.20: resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==} dependencies: @@ -1212,7 +1239,7 @@ packages: /@types/graceful-fs@4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 14.18.42 + '@types/node': 14.18.62 dev: true /@types/istanbul-lib-coverage@2.0.4: @@ -1231,47 +1258,47 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest@29.5.0: - resolution: {integrity: sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==} + /@types/jest@29.5.6: + resolution: {integrity: sha512-/t9NnzkOpXb4Nfvg17ieHE6EeSjDS2SGSpNYfoLbUAeL/EOueU/RSdOWFpfQTXBEM7BguYW1XQ0EbM+6RlIh6w==} dependencies: - expect: 29.3.1 - pretty-format: 29.3.1 + expect: 29.7.0 + pretty-format: 29.7.0 dev: true - /@types/json-schema@7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/lodash@4.14.192: - resolution: {integrity: sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A==} + /@types/lodash@4.14.200: + resolution: {integrity: sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==} dev: true - /@types/node@14.18.42: - resolution: {integrity: sha512-xefu+RBie4xWlK8hwAzGh3npDz/4VhF6icY/shU+zv/1fNn+ZVG7T7CRwe9LId9sAYRPxI+59QBPuKL3WpyGRg==} + /@types/node@14.18.62: + resolution: {integrity: sha512-53Fhb08qfKwSNCIUtysIqw0ye+v1d5QCdL2kl8liKQFlOZTAo+nEYr/FztzMaHBFwB5H0ugF0PF0gmtojaNNiQ==} dev: true - /@types/prettier@2.7.2: - resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} + /@types/node@16.18.59: + resolution: {integrity: sha512-PJ1w2cNeKUEdey4LiPra0ZuxZFOGvetswE8qHRriV/sUkL5Al4tTmPV9D2+Y/TPIxTHHgxTfRjZVKWhPw/ORhQ==} dev: true - /@types/semver@7.3.13: - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true - /@types/shell-quote@1.7.1: - resolution: {integrity: sha512-SWZ2Nom1pkyXCDohRSrkSKvDh8QOG9RfAsrt5/NsPQC4UQJ55eG0qClA40I+Gkez4KTQ0uDUT8ELRXThf3J5jw==} + /@types/shell-quote@1.7.3: + resolution: {integrity: sha512-CeYcQaOnluyKPHJTuJmaH9RDJEQSVxGMVf2EZab3chpA8sI65FB19t0x3JlS37NbxL+TUottk9pMypMJQcfhIw==} dev: true /@types/stack-utils@2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true - /@types/supports-color@8.1.1: - resolution: {integrity: sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==} + /@types/supports-color@8.1.2: + resolution: {integrity: sha512-nhs1D8NjNueBqRBhBTsc81g90g7VBD4wnMTMy9oP+QIldHuJkE655QTL2D1jkj3LyCd+Q5Y69oOpfxN1l0eCMA==} dev: true /@types/yargs-parser@21.0.0: @@ -1284,95 +1311,110 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@types/yargs@17.0.24: - resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} + /@types/yargs@17.0.29: + resolution: {integrity: sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@5.57.0(@typescript-eslint/parser@5.57.0)(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2): - resolution: {integrity: sha512-itag0qpN6q2UMM6Xgk6xoHa0D0/P+M17THnr4SVgqn9Rgam5k/He33MA7/D7QoJcdMxHFyX7U9imaBonAX/6qA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2): + resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.4.1 - '@typescript-eslint/parser': 5.57.0(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2) - '@typescript-eslint/scope-manager': 5.57.0 - '@typescript-eslint/type-utils': 5.57.0(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2) - '@typescript-eslint/utils': 5.57.0(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2) + '@eslint-community/regexpp': 4.7.0 + '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.8.0 + '@typescript-eslint/type-utils': 6.8.0(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2) + '@typescript-eslint/utils': 6.8.0(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.8.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.37.0(supports-color@8.1.1) - grapheme-splitter: 1.0.4 + eslint: 8.51.0(supports-color@8.1.1) + graphemer: 1.4.0 ignore: 5.2.4 - natural-compare-lite: 1.4.0 - semver: 7.3.8 - tsutils: 3.21.0(typescript@5.0.2) - typescript: 5.0.2 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.2(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.57.0(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2): - resolution: {integrity: sha512-orrduvpWYkgLCyAdNtR1QIWovcNZlEm6yL8nwH/eTxWLd8gsP+25pdLHYzL2QdkqrieaDwLpytHqycncv0woUQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser@6.8.0(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2): + resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.57.0 - '@typescript-eslint/types': 5.57.0 - '@typescript-eslint/typescript-estree': 5.57.0(supports-color@8.1.1)(typescript@5.0.2) + '@typescript-eslint/scope-manager': 6.8.0 + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/typescript-estree': 6.8.0(supports-color@8.1.1)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.8.0 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.37.0(supports-color@8.1.1) - typescript: 5.0.2 + eslint: 8.51.0(supports-color@8.1.1) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.57.0: - resolution: {integrity: sha512-NANBNOQvllPlizl9LatX8+MHi7bx7WGIWYjPHDmQe5Si/0YEYfxSljJpoTyTWFTgRy3X8gLYSE4xQ2U+aCozSw==} + /@typescript-eslint/scope-manager@5.60.0: + resolution: {integrity: sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.57.0 - '@typescript-eslint/visitor-keys': 5.57.0 + '@typescript-eslint/types': 5.60.0 + '@typescript-eslint/visitor-keys': 5.60.0 dev: true - /@typescript-eslint/type-utils@5.57.0(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2): - resolution: {integrity: sha512-kxXoq9zOTbvqzLbdNKy1yFrxLC6GDJFE2Yuo3KqSwTmDOFjUGeWSakgoXT864WcK5/NAJkkONCiKb1ddsqhLXQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/scope-manager@6.8.0: + resolution: {integrity: sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/visitor-keys': 6.8.0 + dev: true + + /@typescript-eslint/type-utils@6.8.0(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2): + resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: '*' + eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.57.0(supports-color@8.1.1)(typescript@5.0.2) - '@typescript-eslint/utils': 5.57.0(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2) + '@typescript-eslint/typescript-estree': 6.8.0(supports-color@8.1.1)(typescript@5.2.2) + '@typescript-eslint/utils': 6.8.0(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.37.0(supports-color@8.1.1) - tsutils: 3.21.0(typescript@5.0.2) - typescript: 5.0.2 + eslint: 8.51.0(supports-color@8.1.1) + ts-api-utils: 1.0.2(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.57.0: - resolution: {integrity: sha512-mxsod+aZRSyLT+jiqHw1KK6xrANm19/+VFALVFP5qa/aiJnlP38qpyaTd0fEKhWvQk6YeNZ5LGwI1pDpBRBhtQ==} + /@typescript-eslint/types@5.60.0: + resolution: {integrity: sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.57.0(supports-color@8.1.1)(typescript@5.0.2): - resolution: {integrity: sha512-LTzQ23TV82KpO8HPnWuxM2V7ieXW8O142I7hQTxWIHDcCEIjtkat6H96PFkYBQqGFLW/G/eVVOB9Z8rcvdY/Vw==} + /@typescript-eslint/types@6.8.0: + resolution: {integrity: sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.60.0(supports-color@8.1.1)(typescript@5.2.2): + resolution: {integrity: sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1380,68 +1422,108 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.57.0 - '@typescript-eslint/visitor-keys': 5.57.0 + '@typescript-eslint/types': 5.60.0 + '@typescript-eslint/visitor-keys': 5.60.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.3.8 - tsutils: 3.21.0(typescript@5.0.2) - typescript: 5.0.2 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@6.8.0(supports-color@8.1.1)(typescript@5.2.2): + resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/visitor-keys': 6.8.0 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.2(typescript@5.2.2) + typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.57.0(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2): - resolution: {integrity: sha512-ps/4WohXV7C+LTSgAL5CApxvxbMkl9B9AUZRtnEFonpIxZDIT7wC1xfvuJONMidrkB9scs4zhtRyIwHh4+18kw==} + /@typescript-eslint/utils@5.60.0(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2): + resolution: {integrity: sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==} 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.37.0) - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.57.0 - '@typescript-eslint/types': 5.57.0 - '@typescript-eslint/typescript-estree': 5.57.0(supports-color@8.1.1)(typescript@5.0.2) - eslint: 8.37.0(supports-color@8.1.1) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.60.0 + '@typescript-eslint/types': 5.60.0 + '@typescript-eslint/typescript-estree': 5.60.0(supports-color@8.1.1)(typescript@5.2.2) + eslint: 8.51.0(supports-color@8.1.1) eslint-scope: 5.1.1 - semver: 7.3.8 + semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.57.0: - resolution: {integrity: sha512-ery2g3k0hv5BLiKpPuwYt9KBkAp2ugT6VvyShXdLOkax895EC55sP0Tx5L0fZaQueiK3fBLvHVvEl3jFS5ia+g==} + /@typescript-eslint/utils@6.8.0(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2): + resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.8.0 + '@typescript-eslint/types': 6.8.0 + '@typescript-eslint/typescript-estree': 6.8.0(supports-color@8.1.1)(typescript@5.2.2) + eslint: 8.51.0(supports-color@8.1.1) + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@5.60.0: + resolution: {integrity: sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.57.0 - eslint-visitor-keys: 3.4.0 + '@typescript-eslint/types': 5.60.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@6.8.0: + resolution: {integrity: sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.8.0 + eslint-visitor-keys: 3.4.3 dev: true - /acorn-jsx@5.3.2(acorn@8.8.1): + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.1 + acorn: 8.10.0 dev: true - /acorn@8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: true - /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -1458,6 +1540,13 @@ packages: type-fest: 0.21.3 dev: true + /ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + dependencies: + type-fest: 1.4.0 + dev: true + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1508,6 +1597,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-includes@3.1.6: resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} engines: {node: '>= 0.4'} @@ -1524,6 +1620,17 @@ packages: engines: {node: '>=8'} dev: true + /array.prototype.findlastindex@1.2.2: + resolution: {integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.5 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.1.3 + dev: true + /array.prototype.flat@1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} engines: {node: '>= 0.4'} @@ -1544,26 +1651,38 @@ packages: es-shim-unscopables: 1.0.0 dev: true - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} + /arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 dev: true /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /babel-jest@29.5.0(@babel/core@7.20.7)(supports-color@8.1.1): - resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /babel-jest@29.7.0(@babel/core@7.20.7)(supports-color@8.1.1): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.20.7(supports-color@8.1.1) - '@jest/transform': 29.5.0(supports-color@8.1.1) + '@jest/transform': 29.7.0(supports-color@8.1.1) '@types/babel__core': 7.1.20 babel-plugin-istanbul: 6.1.1(supports-color@8.1.1) - babel-preset-jest: 29.5.0(@babel/core@7.20.7) + babel-preset-jest: 29.6.3(@babel/core@7.20.7) chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 @@ -1584,8 +1703,8 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist@29.5.0: - resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} + /babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.20.7 @@ -1614,14 +1733,14 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.20.7) dev: true - /babel-preset-jest@29.5.0(@babel/core@7.20.7): - resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} + /babel-preset-jest@29.6.3(@babel/core@7.20.7): + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.20.7(supports-color@8.1.1) - babel-plugin-jest-hoist: 29.5.0 + babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.7) dev: true @@ -1629,6 +1748,18 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true + /big-integer@1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + dev: true + + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.51 + dev: true + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -1664,11 +1795,18 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + /call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 dev: true /callsites@3.1.0: @@ -1706,8 +1844,8 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk@5.2.0: - resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true @@ -1725,24 +1863,11 @@ packages: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true - - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true - - /cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 + restore-cursor: 4.0.0 dev: true /cli-truncate@3.1.0: @@ -1789,8 +1914,8 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true /combined-stream@1.0.8: @@ -1800,9 +1925,9 @@ packages: delayed-stream: 1.0.0 dev: true - /commander@10.0.0: - resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} - engines: {node: '>=14'} + /commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} dev: true /concat-map@0.0.1: @@ -1829,6 +1954,25 @@ packages: minimist: 1.2.7 dev: true + /create-jest@29.7.0(@types/node@16.18.59)(supports-color@8.1.1): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.10 + jest-config: 29.7.0(@types/node@16.18.59)(supports-color@8.1.1) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -1863,9 +2007,11 @@ packages: ctrlc-wrapper-windows-64: 0.0.2 dev: true - /date-fns@2.29.3: - resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': 7.22.5 dev: false /debug@3.2.7(supports-color@8.1.1): @@ -1893,8 +2039,13 @@ packages: supports-color: 8.1.1 dev: true - /dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + /dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true dev: true /deep-is@0.1.4: @@ -1906,6 +2057,29 @@ packages: engines: {node: '>=0.10.0'} dev: true + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + /define-properties@1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} @@ -1914,6 +2088,14 @@ packages: object-keys: 1.1.1 dev: true + /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 + object-keys: 1.1.1 + dev: true + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1924,13 +2106,8 @@ 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==} + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true @@ -1989,7 +2166,7 @@ packages: es-to-primitive: 1.2.1 function-bind: 1.1.1 function.prototype.name: 1.1.5 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 get-symbol-description: 1.0.0 gopd: 1.0.1 has: 1.0.3 @@ -2012,6 +2189,60 @@ packages: unbox-primitive: 1.0.2 dev: true + /es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.1 + 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.1 + 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.12 + 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-array-concat: 1.0.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-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.11 + dev: true + + /es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: true + /es-shim-unscopables@1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: @@ -2027,34 +2258,34 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild@0.17.14: - resolution: {integrity: sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==} + /esbuild@0.19.5: + resolution: {integrity: sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.17.14 - '@esbuild/android-arm64': 0.17.14 - '@esbuild/android-x64': 0.17.14 - '@esbuild/darwin-arm64': 0.17.14 - '@esbuild/darwin-x64': 0.17.14 - '@esbuild/freebsd-arm64': 0.17.14 - '@esbuild/freebsd-x64': 0.17.14 - '@esbuild/linux-arm': 0.17.14 - '@esbuild/linux-arm64': 0.17.14 - '@esbuild/linux-ia32': 0.17.14 - '@esbuild/linux-loong64': 0.17.14 - '@esbuild/linux-mips64el': 0.17.14 - '@esbuild/linux-ppc64': 0.17.14 - '@esbuild/linux-riscv64': 0.17.14 - '@esbuild/linux-s390x': 0.17.14 - '@esbuild/linux-x64': 0.17.14 - '@esbuild/netbsd-x64': 0.17.14 - '@esbuild/openbsd-x64': 0.17.14 - '@esbuild/sunos-x64': 0.17.14 - '@esbuild/win32-arm64': 0.17.14 - '@esbuild/win32-ia32': 0.17.14 - '@esbuild/win32-x64': 0.17.14 + '@esbuild/android-arm': 0.19.5 + '@esbuild/android-arm64': 0.19.5 + '@esbuild/android-x64': 0.19.5 + '@esbuild/darwin-arm64': 0.19.5 + '@esbuild/darwin-x64': 0.19.5 + '@esbuild/freebsd-arm64': 0.19.5 + '@esbuild/freebsd-x64': 0.19.5 + '@esbuild/linux-arm': 0.19.5 + '@esbuild/linux-arm64': 0.19.5 + '@esbuild/linux-ia32': 0.19.5 + '@esbuild/linux-loong64': 0.19.5 + '@esbuild/linux-mips64el': 0.19.5 + '@esbuild/linux-ppc64': 0.19.5 + '@esbuild/linux-riscv64': 0.19.5 + '@esbuild/linux-s390x': 0.19.5 + '@esbuild/linux-x64': 0.19.5 + '@esbuild/netbsd-x64': 0.19.5 + '@esbuild/openbsd-x64': 0.19.5 + '@esbuild/sunos-x64': 0.19.5 + '@esbuild/win32-arm64': 0.19.5 + '@esbuild/win32-ia32': 0.19.5 + '@esbuild/win32-x64': 0.19.5 dev: true /escalade@3.1.1: @@ -2076,27 +2307,27 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@8.8.0(eslint@8.37.0): - resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + /eslint-config-prettier@9.0.0(eslint@8.51.0): + resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.37.0(supports-color@8.1.1) + eslint: 8.51.0(supports-color@8.1.1) dev: true /eslint-import-resolver-node@0.3.7(supports-color@8.1.1): resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: debug: 3.2.7(supports-color@8.1.1) - is-core-module: 2.11.0 + is-core-module: 2.13.0 resolve: 1.22.1 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.57.0)(eslint-import-resolver-node@0.3.7)(eslint@8.37.0)(supports-color@8.1.1): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.7)(eslint@8.51.0)(supports-color@8.1.1): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -2116,16 +2347,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.57.0(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2) + '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2) debug: 3.2.7(supports-color@8.1.1) - eslint: 8.37.0(supports-color@8.1.1) + eslint: 8.51.0(supports-color@8.1.1) eslint-import-resolver-node: 0.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.57.0)(eslint@8.37.0)(supports-color@8.1.1): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(supports-color@8.1.1): + resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -2134,34 +2365,36 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.57.0(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2) + '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2) array-includes: 3.1.6 + array.prototype.findlastindex: 1.2.2 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 8.37.0(supports-color@8.1.1) + eslint: 8.51.0(supports-color@8.1.1) eslint-import-resolver-node: 0.3.7(supports-color@8.1.1) - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.57.0)(eslint-import-resolver-node@0.3.7)(eslint@8.37.0)(supports-color@8.1.1) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.7)(eslint@8.51.0)(supports-color@8.1.1) has: 1.0.3 - is-core-module: 2.11.0 + is-core-module: 2.13.0 is-glob: 4.0.3 minimatch: 3.1.2 + object.fromentries: 2.0.6 + object.groupby: 1.0.0 object.values: 1.1.6 - resolve: 1.22.1 - semver: 6.3.0 - tsconfig-paths: 3.14.1 + semver: 6.3.1 + tsconfig-paths: 3.14.2 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color dev: true - /eslint-plugin-jest@27.2.1(@typescript-eslint/eslint-plugin@5.57.0)(eslint@8.37.0)(jest@29.5.0)(supports-color@8.1.1)(typescript@5.0.2): - resolution: {integrity: sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==} + /eslint-plugin-jest@27.4.2(@typescript-eslint/eslint-plugin@6.8.0)(eslint@8.51.0)(jest@29.7.0)(supports-color@8.1.1)(typescript@5.2.2): + resolution: {integrity: sha512-3Nfvv3wbq2+PZlRTf2oaAWXWwbdBejFRBR2O8tAO67o+P8zno+QGbcDYaAXODlreXVg+9gvWhKKmG2rgfb8GEg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 eslint: ^7.0.0 || ^8.0.0 jest: '*' peerDependenciesMeta: @@ -2170,38 +2403,42 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.57.0(@typescript-eslint/parser@5.57.0)(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2) - '@typescript-eslint/utils': 5.57.0(eslint@8.37.0)(supports-color@8.1.1)(typescript@5.0.2) - eslint: 8.37.0(supports-color@8.1.1) - jest: 29.5.0(@types/node@14.18.42)(supports-color@8.1.1) + '@typescript-eslint/eslint-plugin': 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2) + '@typescript-eslint/utils': 5.60.0(eslint@8.51.0)(supports-color@8.1.1)(typescript@5.2.2) + eslint: 8.51.0(supports-color@8.1.1) + jest: 29.7.0(@types/node@16.18.59)(supports-color@8.1.1) transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.37.0)(prettier@2.8.7): - resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} - engines: {node: '>=12.0.0'} + /eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.51.0)(prettier@3.0.3): + resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: '>=7.28.0' + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' eslint-config-prettier: '*' - prettier: '>=2.0.0' + prettier: '>=3.0.0' peerDependenciesMeta: + '@types/eslint': + optional: true eslint-config-prettier: optional: true dependencies: - eslint: 8.37.0(supports-color@8.1.1) - eslint-config-prettier: 8.8.0(eslint@8.37.0) - prettier: 2.8.7 + eslint: 8.51.0(supports-color@8.1.1) + eslint-config-prettier: 9.0.0(eslint@8.51.0) + prettier: 3.0.3 prettier-linter-helpers: 1.0.0 + synckit: 0.8.5 dev: true - /eslint-plugin-simple-import-sort@10.0.0(eslint@8.37.0): + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.51.0): resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} peerDependencies: eslint: '>=5.0.0' dependencies: - eslint: 8.37.0(supports-color@8.1.1) + eslint: 8.51.0(supports-color@8.1.1) dev: true /eslint-scope@5.1.1: @@ -2212,29 +2449,29 @@ packages: estraverse: 4.3.0 dev: true - /eslint-scope@7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 dev: true - /eslint-visitor-keys@3.4.0: - resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.37.0(supports-color@8.1.1): - resolution: {integrity: sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==} + /eslint@8.51.0(supports-color@8.1.1): + resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.37.0) - '@eslint-community/regexpp': 4.4.1 - '@eslint/eslintrc': 2.0.2(supports-color@8.1.1) - '@eslint/js': 8.37.0 - '@humanwhocodes/config-array': 0.11.8(supports-color@8.1.1) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) + '@eslint-community/regexpp': 4.7.0 + '@eslint/eslintrc': 2.1.2(supports-color@8.1.1) + '@eslint/js': 8.51.0 + '@humanwhocodes/config-array': 0.11.11(supports-color@8.1.1) '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 @@ -2243,9 +2480,9 @@ packages: debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -2253,34 +2490,31 @@ packages: find-up: 5.0.0 glob-parent: 6.0.2 globals: 13.19.0 - grapheme-splitter: 1.0.4 + graphemer: 1.4.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.2.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.1 + optionator: 0.9.3 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color dev: true - /espree@9.5.1: - resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.1 - acorn-jsx: 5.3.2(acorn@8.8.1) - eslint-visitor-keys: 3.4.0 + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.3 dev: true /esprima@4.0.1: @@ -2318,6 +2552,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: true + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2333,8 +2571,8 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa@7.1.1: - resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: cross-spawn: 7.0.3 @@ -2353,26 +2591,15 @@ 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==} + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/expect-utils': 29.5.0 - jest-get-type: 29.4.3 - jest-matcher-utils: 29.5.0 - jest-message-util: 29.5.0 - jest-util: 29.5.0 + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 dev: true /fast-deep-equal@3.1.3: @@ -2383,8 +2610,8 @@ packages: resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} dev: true - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2456,6 +2683,12 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -2486,8 +2719,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 functions-have-names: 1.2.3 dev: true @@ -2512,6 +2745,15 @@ packages: has-symbols: 1.0.3 dev: true + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + dev: true + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -2527,7 +2769,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 dev: true /glob-parent@5.1.2: @@ -2567,13 +2809,20 @@ 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'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.1 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 @@ -2582,15 +2831,15 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 dev: true /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true - /grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true /has-bigints@1.0.2: @@ -2609,7 +2858,12 @@ packages: /has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 + 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: @@ -2683,11 +2937,6 @@ packages: hasBin: true dev: true - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true - /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -2703,11 +2952,28 @@ packages: resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 dev: true + /internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + side-channel: 1.0.4 + 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.1 + is-typed-array: 1.1.12 + dev: true + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true @@ -2731,8 +2997,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + /is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: has: 1.0.3 dev: true @@ -2744,6 +3010,18 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2770,6 +3048,14 @@ packages: is-extglob: 2.1.1 dev: true + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -2830,12 +3116,30 @@ packages: has-symbols: 1.0.3 dev: true + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.11 + dev: true + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true @@ -2853,7 +3157,20 @@ packages: '@babel/parser': 7.20.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-instrument@6.0.0(supports-color@8.1.1): + resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.20.7(supports-color@8.1.1) + '@babel/parser': 7.20.7 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true @@ -2886,44 +3203,46 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jest-changed-files@29.5.0: - resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} + /jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 + jest-util: 29.7.0 p-limit: 3.1.0 dev: true - /jest-circus@29.5.0(supports-color@8.1.1): - resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} + /jest-circus@29.7.0(supports-color@8.1.1): + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/expect': 29.5.0(supports-color@8.1.1) - '@jest/test-result': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 14.18.42 + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0(supports-color@8.1.1) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.62 chalk: 4.1.2 co: 4.6.0 - dedent: 0.7.0 + dedent: 1.5.1 is-generator-fn: 2.1.0 - jest-each: 29.5.0 - jest-matcher-utils: 29.5.0 - jest-message-util: 29.5.0 - jest-runtime: 29.5.0(supports-color@8.1.1) - jest-snapshot: 29.5.0(supports-color@8.1.1) - jest-util: 29.5.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0(supports-color@8.1.1) + jest-snapshot: 29.7.0(supports-color@8.1.1) + jest-util: 29.7.0 p-limit: 3.1.0 - pretty-format: 29.5.0 + pretty-format: 29.7.0 pure-rand: 6.0.1 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: + - babel-plugin-macros - supports-color dev: true - /jest-cli@29.5.0(@types/node@14.18.42)(supports-color@8.1.1): - resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} + /jest-cli@29.7.0(@types/node@16.18.59)(supports-color@8.1.1): + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -2932,26 +3251,26 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0(supports-color@8.1.1) - '@jest/test-result': 29.5.0 - '@jest/types': 29.5.0 + '@jest/core': 29.7.0(supports-color@8.1.1) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 chalk: 4.1.2 + create-jest: 29.7.0(@types/node@16.18.59)(supports-color@8.1.1) exit: 0.1.2 - graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@14.18.42)(supports-color@8.1.1) - jest-util: 29.5.0 - jest-validate: 29.5.0 - prompts: 2.4.2 - yargs: 17.7.1 + jest-config: 29.7.0(@types/node@16.18.59)(supports-color@8.1.1) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 transitivePeerDependencies: - '@types/node' + - babel-plugin-macros - supports-color - ts-node dev: true - /jest-config@29.5.0(@types/node@14.18.42)(supports-color@8.1.1): - resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} + /jest-config@29.7.0(@types/node@14.18.62)(supports-color@8.1.1): + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -2963,183 +3282,184 @@ packages: optional: true dependencies: '@babel/core': 7.20.7(supports-color@8.1.1) - '@jest/test-sequencer': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 14.18.42 - babel-jest: 29.5.0(@babel/core@7.20.7)(supports-color@8.1.1) + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.62 + babel-jest: 29.7.0(@babel/core@7.20.7)(supports-color@8.1.1) chalk: 4.1.2 ci-info: 3.7.1 deepmerge: 4.2.2 glob: 7.2.3 graceful-fs: 4.2.10 - jest-circus: 29.5.0(supports-color@8.1.1) - jest-environment-node: 29.5.0 - jest-get-type: 29.4.3 - jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-runner: 29.5.0(supports-color@8.1.1) - jest-util: 29.5.0 - jest-validate: 29.5.0 + jest-circus: 29.7.0(supports-color@8.1.1) + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0(supports-color@8.1.1) + jest-util: 29.7.0 + jest-validate: 29.7.0 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.5.0 + pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 transitivePeerDependencies: + - babel-plugin-macros - supports-color dev: true - /jest-create-mock-instance@2.0.0: - resolution: {integrity: sha512-gW3H87m8hF72JMFPMEorF2jnEyV31XpaOYtDqeRNSwFT73+MNZvbUKQfCbdixxOrCCppToSPmi9gGygIzms6Eg==} - dev: true - - /jest-diff@29.3.1: - resolution: {integrity: sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==} + /jest-config@29.7.0(@types/node@16.18.59)(supports-color@8.1.1): + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true dependencies: + '@babel/core': 7.20.7(supports-color@8.1.1) + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 16.18.59 + babel-jest: 29.7.0(@babel/core@7.20.7)(supports-color@8.1.1) chalk: 4.1.2 - diff-sequences: 29.3.1 - jest-get-type: 29.4.3 - pretty-format: 29.5.0 + ci-info: 3.7.1 + deepmerge: 4.2.2 + glob: 7.2.3 + graceful-fs: 4.2.10 + jest-circus: 29.7.0(supports-color@8.1.1) + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0(supports-color@8.1.1) + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + + /jest-create-mock-instance@2.0.0: + resolution: {integrity: sha512-gW3H87m8hF72JMFPMEorF2jnEyV31XpaOYtDqeRNSwFT73+MNZvbUKQfCbdixxOrCCppToSPmi9gGygIzms6Eg==} dev: true - /jest-diff@29.5.0: - resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - diff-sequences: 29.4.3 - jest-get-type: 29.4.3 - pretty-format: 29.5.0 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-docblock@29.4.3: - resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each@29.5.0: - resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} + /jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.3 chalk: 4.1.2 - jest-get-type: 29.4.3 - jest-util: 29.5.0 - pretty-format: 29.5.0 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 dev: true - /jest-environment-node@29.5.0: - resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/fake-timers': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 14.18.42 - jest-mock: 29.5.0 - jest-util: 29.5.0 + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.62 + jest-mock: 29.7.0 + jest-util: 29.7.0 dev: true - /jest-get-type@29.2.0: - resolution: {integrity: sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==} + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} 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} - dev: true - - /jest-haste-map@29.5.0: - resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.5 - '@types/node': 14.18.42 + '@types/node': 14.18.62 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 - jest-regex-util: 29.4.3 - jest-util: 29.5.0 - jest-worker: 29.5.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 dev: true - /jest-leak-detector@29.5.0: - resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.4.3 - pretty-format: 29.5.0 - dev: true - - /jest-matcher-utils@29.3.1: - resolution: {integrity: sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==} + /jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} 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.4.3 - pretty-format: 29.5.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-matcher-utils@29.5.0: - resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} + /jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - jest-diff: 29.5.0 - jest-get-type: 29.4.3 - 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.5.0 - '@types/stack-utils': 2.0.1 - chalk: 4.1.2 - graceful-fs: 4.2.10 - micromatch: 4.0.5 - pretty-format: 29.5.0 - slash: 3.0.0 - stack-utils: 2.0.6 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-message-util@29.5.0: - resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} + /jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/code-frame': 7.18.6 - '@jest/types': 29.5.0 + '@jest/types': 29.6.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.10 micromatch: 4.0.5 - pretty-format: 29.5.0 + pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 dev: true - /jest-mock@29.5.0: - resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 - '@types/node': 14.18.42 - jest-util: 29.5.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.62 + jest-util: 29.7.0 dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): + /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -3148,191 +3468,176 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 29.5.0 + jest-resolve: 29.7.0 dev: true - /jest-regex-util@29.4.3: - resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} + /jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies@29.5.0(supports-color@8.1.1): - resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} + /jest-resolve-dependencies@29.7.0(supports-color@8.1.1): + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-regex-util: 29.4.3 - jest-snapshot: 29.5.0(supports-color@8.1.1) + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /jest-resolve@29.5.0: - resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.10 - jest-haste-map: 29.5.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.5.0) - jest-util: 29.5.0 - jest-validate: 29.5.0 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 resolve: 1.22.1 resolve.exports: 2.0.2 slash: 3.0.0 dev: true - /jest-runner@29.5.0(supports-color@8.1.1): - resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} + /jest-runner@29.7.0(supports-color@8.1.1): + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.5.0 - '@jest/environment': 29.5.0 - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0(supports-color@8.1.1) - '@jest/types': 29.5.0 - '@types/node': 14.18.42 + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0(supports-color@8.1.1) + '@jest/types': 29.6.3 + '@types/node': 14.18.62 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.10 - jest-docblock: 29.4.3 - jest-environment-node: 29.5.0 - jest-haste-map: 29.5.0 - jest-leak-detector: 29.5.0 - jest-message-util: 29.5.0 - jest-resolve: 29.5.0 - jest-runtime: 29.5.0(supports-color@8.1.1) - jest-util: 29.5.0 - jest-watcher: 29.5.0 - jest-worker: 29.5.0 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0(supports-color@8.1.1) + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color dev: true - /jest-runtime@29.5.0(supports-color@8.1.1): - resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} + /jest-runtime@29.7.0(supports-color@8.1.1): + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.5.0 - '@jest/fake-timers': 29.5.0 - '@jest/globals': 29.5.0(supports-color@8.1.1) - '@jest/source-map': 29.4.3 - '@jest/test-result': 29.5.0 - '@jest/transform': 29.5.0(supports-color@8.1.1) - '@jest/types': 29.5.0 - '@types/node': 14.18.42 + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0(supports-color@8.1.1) + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0(supports-color@8.1.1) + '@jest/types': 29.6.3 + '@types/node': 14.18.62 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 - jest-haste-map: 29.5.0 - jest-message-util: 29.5.0 - jest-mock: 29.5.0 - jest-regex-util: 29.4.3 - jest-resolve: 29.5.0 - jest-snapshot: 29.5.0(supports-color@8.1.1) - jest-util: 29.5.0 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0(supports-color@8.1.1) + jest-util: 29.7.0 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /jest-snapshot@29.5.0(supports-color@8.1.1): - resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} + /jest-snapshot@29.7.0(supports-color@8.1.1): + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.20.7(supports-color@8.1.1) '@babel/generator': 7.20.7 '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.20.7) '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.20.7) - '@babel/traverse': 7.20.10(supports-color@8.1.1) '@babel/types': 7.20.7 - '@jest/expect-utils': 29.5.0 - '@jest/transform': 29.5.0(supports-color@8.1.1) - '@jest/types': 29.5.0 - '@types/babel__traverse': 7.18.3 - '@types/prettier': 2.7.2 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0(supports-color@8.1.1) + '@jest/types': 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.7) chalk: 4.1.2 - expect: 29.5.0 + expect: 29.7.0 graceful-fs: 4.2.10 - jest-diff: 29.5.0 - jest-get-type: 29.4.3 - jest-matcher-utils: 29.5.0 - jest-message-util: 29.5.0 - jest-util: 29.5.0 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 natural-compare: 1.4.0 - pretty-format: 29.5.0 - semver: 7.3.8 + pretty-format: 29.7.0 + semver: 7.5.4 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.5.0 - '@types/node': 14.18.42 - chalk: 4.1.2 - ci-info: 3.7.1 - 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==} + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 - '@types/node': 14.18.42 + '@jest/types': 29.6.3 + '@types/node': 14.18.62 chalk: 4.1.2 ci-info: 3.7.1 graceful-fs: 4.2.10 picomatch: 2.3.1 dev: true - /jest-validate@29.5.0: - resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} + /jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 + '@jest/types': 29.6.3 camelcase: 6.3.0 chalk: 4.1.2 - jest-get-type: 29.4.3 + jest-get-type: 29.6.3 leven: 3.1.0 - pretty-format: 29.5.0 + pretty-format: 29.7.0 dev: true - /jest-watcher@29.5.0: - resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} + /jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.5.0 - '@jest/types': 29.5.0 - '@types/node': 14.18.42 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 14.18.62 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.5.0 + jest-util: 29.7.0 string-length: 4.0.2 dev: true - /jest-worker@29.5.0: - resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 14.18.42 - jest-util: 29.5.0 + '@types/node': 14.18.62 + jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.5.0(@types/node@14.18.42)(supports-color@8.1.1): - resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} + /jest@29.7.0(@types/node@16.18.59)(supports-color@8.1.1): + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -3341,20 +3646,17 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.5.0(supports-color@8.1.1) - '@jest/types': 29.5.0 + '@jest/core': 29.7.0(supports-color@8.1.1) + '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.5.0(@types/node@14.18.42)(supports-color@8.1.1) + jest-cli: 29.7.0(@types/node@16.18.59)(supports-color@8.1.1) transitivePeerDependencies: - '@types/node' + - babel-plugin-macros - supports-color - ts-node dev: true - /js-sdsl@4.2.0: - resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} - dev: true - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -3441,46 +3743,41 @@ packages: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lint-staged@13.2.0(supports-color@8.1.1): - resolution: {integrity: sha512-GbyK5iWinax5Dfw5obm2g2ccUiZXNGtAS4mCbJ0Lv4rq6iEtfBSjOYdcbOtAIFtM114t0vdpViDDetjVTSd8Vw==} - engines: {node: ^14.13.1 || >=16.0.0} + /lint-staged@13.3.0(supports-color@8.1.1): + resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} + engines: {node: ^16.14.0 || >=18.0.0} hasBin: true dependencies: - chalk: 5.2.0 - cli-truncate: 3.1.0 - commander: 10.0.0 + chalk: 5.3.0 + commander: 11.0.0 debug: 4.3.4(supports-color@8.1.1) - execa: 7.1.1 + execa: 7.2.0 lilconfig: 2.1.0 - listr2: 5.0.8 + listr2: 6.6.1 micromatch: 4.0.5 - normalize-path: 3.0.0 - object-inspect: 1.12.3 pidtree: 0.6.0 - string-argv: 0.3.1 - yaml: 2.2.1 + string-argv: 0.3.2 + yaml: 2.3.1 transitivePeerDependencies: - enquirer - supports-color dev: true - /listr2@5.0.8: - resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} - engines: {node: ^14.13.1 || >=16.0.0} + /listr2@6.6.1: + resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} + engines: {node: '>=16.0.0'} peerDependencies: enquirer: '>= 2.3.0 < 3' peerDependenciesMeta: enquirer: optional: true dependencies: - cli-truncate: 2.1.0 - colorette: 2.0.19 - log-update: 4.0.0 - p-map: 4.0.0 + cli-truncate: 3.1.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 5.0.1 rfdc: 1.3.0 - rxjs: 7.8.0 - through: 2.3.8 - wrap-ansi: 7.0.0 + wrap-ansi: 8.1.0 dev: true /locate-path@5.0.0: @@ -3510,14 +3807,15 @@ packages: engines: {node: '>=0.8.6'} dev: true - /log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} + /log-update@5.0.1: + resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - ansi-escapes: 4.3.2 - cli-cursor: 3.1.0 - slice-ansi: 4.0.0 - wrap-ansi: 6.2.0 + ansi-escapes: 5.0.0 + cli-cursor: 4.0.0 + slice-ansi: 5.0.0 + strip-ansi: 7.0.1 + wrap-ansi: 8.1.0 dev: true /lru-cache@5.1.1: @@ -3537,7 +3835,7 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: - semver: 6.3.0 + semver: 6.3.1 dev: true /makeerror@1.0.12: @@ -3603,10 +3901,6 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -3652,11 +3946,29 @@ 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 + /object.fromentries@2.0.6: + resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.5 + dev: true + + /object.groupby@1.0.0: + resolution: {integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + dev: true + /object.values@1.1.6: resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} engines: {node: '>= 0.4'} @@ -3686,16 +3998,26 @@ packages: mimic-fn: 4.0.0 dev: true - /optionator@0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.3 dev: true /p-limit@2.3.0: @@ -3726,13 +4048,6 @@ packages: p-limit: 3.1.0 dev: true - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - dependencies: - aggregate-error: 3.1.0 - dev: true - /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -3823,26 +4138,17 @@ packages: fast-diff: 1.2.0 dev: true - /prettier@2.8.7: - resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} - engines: {node: '>=10.13.0'} + /prettier@3.0.3: + resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + engines: {node: '>=14'} hasBin: true dev: true - /pretty-format@29.3.1: - resolution: {integrity: sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==} + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 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.5.0: - resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.4.3 + '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 dev: true @@ -3872,12 +4178,25 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + /regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} 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 + + /regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 functions-have-names: 1.2.3 dev: true @@ -3911,14 +4230,14 @@ packages: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: - is-core-module: 2.11.0 + is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 @@ -3940,17 +4259,34 @@ packages: glob: 7.2.3 dev: true + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /rxjs@7.8.0: - resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: tslib: 2.4.1 + /safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + /safe-publish-latest@2.0.0: resolution: {integrity: sha512-Qc6L9iNKfNl24X8O4XS31yHo49jX1IH+DsnxHIbCDjoARckTOk0Cj9v8G2IYVvZjj94dc9tjs2WIUtL8epJqvw==} engines: {node: '>= 12'} @@ -3958,19 +4294,19 @@ packages: dependencies: in-publish: 2.0.1 semver: 7.3.8 - yargs: 17.7.1 + yargs: 17.7.2 dev: true /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 is-regex: 1.1.4 dev: true - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true dev: true @@ -3982,6 +4318,14 @@ packages: lru-cache: 6.0.0 dev: true + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3994,15 +4338,15 @@ packages: engines: {node: '>=8'} dev: true - /shell-quote@1.8.0: - resolution: {integrity: sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==} + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: false /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.1 object-inspect: 1.12.3 dev: true @@ -4019,24 +4363,6 @@ packages: engines: {node: '>=8'} dev: true - /slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - /slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -4057,8 +4383,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /spawn-command@0.0.2-1: - resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} + /spawn-command@0.0.2: + resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} dev: false /sprintf-js@1.0.3: @@ -4072,8 +4398,8 @@ packages: escape-string-regexp: 2.0.0 dev: true - /string-argv@0.3.1: - resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} dev: true @@ -4102,20 +4428,29 @@ packages: strip-ansi: 7.0.1 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.2.0 + es-abstract: 1.22.1 + dev: true + /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.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true /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.5 + define-properties: 1.2.0 + es-abstract: 1.22.1 dev: true /strip-ansi@6.0.1: @@ -4180,6 +4515,14 @@ packages: engines: {node: '>= 0.4'} dev: true + /synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.2 + dev: true + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -4193,8 +4536,9 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} dev: true /tmpl@1.0.5: @@ -4218,8 +4562,17 @@ packages: hasBin: true dev: false - /tsconfig-paths@3.14.1: - resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} + /ts-api-utils@1.0.2(typescript@5.2.2): + resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.2.2 + dev: true + + /tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} dependencies: '@types/json5': 0.0.29 json5: 1.0.2 @@ -4234,14 +4587,18 @@ packages: /tslib@2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - /tsutils@3.21.0(typescript@5.0.2): + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + + /tsutils@3.21.0(typescript@5.2.2): 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: 5.0.2 + typescript: 5.2.2 dev: true /type-check@0.4.0: @@ -4266,9 +4623,52 @@ packages: engines: {node: '>=10'} dev: true - /typescript@5.0.2: - resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==} - engines: {node: '>=12.20'} + /type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + dev: true + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + 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.12 + dev: true + + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} hasBin: true dev: true @@ -4281,6 +4681,11 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + /update-browserslist-db@1.0.10(browserslist@4.21.4): resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true @@ -4302,7 +4707,7 @@ packages: resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.19 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 dev: true @@ -4323,6 +4728,17 @@ packages: is-symbol: 1.0.4 dev: true + /which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + 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 + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4331,20 +4747,6 @@ packages: isexe: 2.0.0 dev: true - /word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: true - - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -4353,6 +4755,15 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.0.1 + dev: true + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true @@ -4377,8 +4788,8 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yaml@2.2.1: - resolution: {integrity: sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==} + /yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} engines: {node: '>= 14'} dev: true @@ -4386,8 +4797,8 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - /yargs@17.7.1: - resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} dependencies: cliui: 8.0.1 diff --git a/src/command-parser/expand-arguments.ts b/src/command-parser/expand-arguments.ts index 01dfdd8f..2e9e77ad 100644 --- a/src/command-parser/expand-arguments.ts +++ b/src/command-parser/expand-arguments.ts @@ -35,7 +35,7 @@ export class ExpandArguments implements CommandParser { // Replace placeholder with empty string // if value doesn't exist in additional arguments. return ''; - } + }, ); return { ...commandInfo, command }; diff --git a/src/command-parser/expand-npm-wildcard.spec.ts b/src/command-parser/expand-npm-wildcard.spec.ts index 85667e27..8fb0c469 100644 --- a/src/command-parser/expand-npm-wildcard.spec.ts +++ b/src/command-parser/expand-npm-wildcard.spec.ts @@ -95,7 +95,7 @@ for (const npmCmd of ['npm', 'yarn', 'pnpm', 'bun']) { parser.parse({ name: '', command: `${npmCmd} run watch-*`, - }) + }), ).toEqual([ { name: 'js', command: `${npmCmd} run watch-js` }, { name: 'css', command: `${npmCmd} run watch-css` }, @@ -114,7 +114,7 @@ for (const npmCmd of ['npm', 'yarn', 'pnpm', 'bun']) { parser.parse({ name: 'w:', command: `${npmCmd} run watch-*`, - }) + }), ).toEqual([ { name: 'w:js', command: `${npmCmd} run watch-js` }, { name: 'w:css', command: `${npmCmd} run watch-css` }, diff --git a/src/command.spec.ts b/src/command.spec.ts index b6e25172..3cf746ca 100644 --- a/src/command.spec.ts +++ b/src/command.spec.ts @@ -49,7 +49,7 @@ const createCommand = (overrides?: Partial, spawnOpts: SpawnOptions { index: 0, name: '', command: 'echo foo', ...overrides }, spawnOpts, spawn, - killProcess + killProcess, ); let error: unknown; @@ -70,7 +70,7 @@ const createCommand = (overrides?: Partial, spawnOpts: SpawnOptions observer.complete(); }, }); - }) + }), ); const values = async (): Promise => { await finished.onComplete(); diff --git a/src/command.ts b/src/command.ts index 17255f8b..c5593e0c 100644 --- a/src/command.ts +++ b/src/command.ts @@ -32,6 +32,11 @@ export interface CommandInfo { * Color to use on prefix of the command. */ prefixColor?: string; + + /** + * Output command in raw format. + */ + raw?: boolean; } export interface CloseEvent { @@ -121,7 +126,7 @@ export class Command implements CommandInfo { { index, name, command, prefixColor, env, cwd }: CommandInfo & { index: number }, spawnOpts: SpawnOptions, spawn: SpawnCommand, - killProcess: KillProcess + killProcess: KillProcess, ) { this.index = index; this.name = name; @@ -145,14 +150,15 @@ export class Command implements CommandInfo { const highResStartTime = process.hrtime(); this.timer.next({ startDate }); - Rx.fromEvent(child, 'error').subscribe((event) => { + Rx.fromEvent(child, 'error').subscribe((event) => { this.process = undefined; const endDate = new Date(Date.now()); this.timer.next({ startDate, endDate }); this.error.next(event); }); - Rx.fromEvent<[number | null, NodeJS.Signals | null]>(child, 'close').subscribe( - ([exitCode, signal]) => { + Rx.fromEvent(child, 'close') + .pipe(Rx.map((event) => event as [number | null, NodeJS.Signals | null])) + .subscribe(([exitCode, signal]) => { this.process = undefined; this.exited = true; @@ -170,10 +176,17 @@ export class Command implements CommandInfo { durationSeconds: durationSeconds + durationNanoSeconds / 1e9, }, }); - } - ); - child.stdout && pipeTo(Rx.fromEvent(child.stdout, 'data'), this.stdout); - child.stderr && pipeTo(Rx.fromEvent(child.stderr, 'data'), this.stderr); + }); + child.stdout && + pipeTo( + Rx.fromEvent(child.stdout, 'data').pipe(Rx.map((event) => event as Buffer)), + this.stdout, + ); + child.stderr && + pipeTo( + Rx.fromEvent(child.stderr, 'data').pipe(Rx.map((event) => event as Buffer)), + this.stderr, + ); this.stdin = child.stdin || undefined; } diff --git a/src/completion-listener.ts b/src/completion-listener.ts index 26035f43..6889a676 100644 --- a/src/completion-listener.ts +++ b/src/completion-listener.ts @@ -65,12 +65,12 @@ export class CompletionListener { // in which case all of them must meet the success condition. const nameOrIndex = commandSyntaxMatch[1]; const targetCommandsEvents = events.filter( - ({ command, index }) => command.name === nameOrIndex || index === Number(nameOrIndex) + ({ command, index }) => command.name === nameOrIndex || index === Number(nameOrIndex), ); if (this.successCondition.startsWith('!')) { // All commands except the specified ones must exit succesfully return events.every( - (event) => targetCommandsEvents.includes(event) || event.exitCode === 0 + (event) => targetCommandsEvents.includes(event) || event.exitCode === 0, ); } // Only the specified commands must exit succesfully @@ -93,10 +93,10 @@ export class CompletionListener { switchMap((exitInfos) => this.isSuccess(exitInfos) ? this.emitWithScheduler(Rx.of(exitInfos)) - : this.emitWithScheduler(Rx.throwError(exitInfos)) + : this.emitWithScheduler(Rx.throwError(() => exitInfos)), ), - take(1) - ) + take(1), + ), ); } diff --git a/src/concurrently.spec.ts b/src/concurrently.spec.ts index 726f9af3..dcd65b0b 100644 --- a/src/concurrently.spec.ts +++ b/src/concurrently.spec.ts @@ -90,7 +90,7 @@ it('spawns commands up to percent based limit at once', () => { model: 'Intel', speed: 0, times: { user: 0, nice: 0, sys: 0, idle: 0, irq: 0 }, - }) + }), ); create(['foo', 'bar', 'baz', 'qux'], { maxProcesses: '50%' }); @@ -173,19 +173,19 @@ it('merges extra env vars into each command', () => { 'echo', expect.objectContaining({ env: expect.objectContaining({ foo: 'bar' }), - }) + }), ); expect(spawn).toHaveBeenCalledWith( 'echo', expect.objectContaining({ env: expect.objectContaining({ foo: 'baz' }), - }) + }), ); expect(spawn).toHaveBeenCalledWith( 'kill', expect.objectContaining({ env: expect.not.objectContaining({ foo: expect.anything() }), - }) + }), ); }); @@ -198,7 +198,7 @@ it('uses cwd from options for each command', () => { ], { cwd: 'foobar', - } + }, ); expect(spawn).toHaveBeenCalledTimes(3); @@ -207,21 +207,21 @@ it('uses cwd from options for each command', () => { expect.objectContaining({ env: expect.objectContaining({ foo: 'bar' }), cwd: 'foobar', - }) + }), ); expect(spawn).toHaveBeenCalledWith( 'echo', expect.objectContaining({ env: expect.objectContaining({ foo: 'baz' }), cwd: 'foobar', - }) + }), ); expect(spawn).toHaveBeenCalledWith( 'kill', expect.objectContaining({ env: expect.not.objectContaining({ foo: expect.anything() }), cwd: 'foobar', - }) + }), ); }); @@ -233,7 +233,7 @@ it('uses overridden cwd option for each command if specified', () => { ], { cwd: 'foobar', - } + }, ); expect(spawn).toHaveBeenCalledTimes(2); @@ -242,14 +242,54 @@ it('uses overridden cwd option for each command if specified', () => { expect.objectContaining({ env: expect.objectContaining({ foo: 'bar' }), cwd: 'baz', - }) + }), ); expect(spawn).toHaveBeenCalledWith( 'echo', expect.objectContaining({ env: expect.objectContaining({ foo: 'baz' }), cwd: 'foobar', - }) + }), + ); +}); + +it('uses raw from options for each command', () => { + create([{ command: 'echo' }, 'kill'], { + raw: true, + }); + + expect(spawn).toHaveBeenCalledTimes(2); + expect(spawn).toHaveBeenCalledWith( + 'echo', + expect.objectContaining({ + stdio: 'inherit', + }), + ); + expect(spawn).toHaveBeenCalledWith( + 'kill', + expect.objectContaining({ + stdio: 'inherit', + }), + ); +}); + +it('uses overridden raw option for each command if specified', () => { + create([{ command: 'echo', raw: false }, { command: 'echo' }], { + raw: true, + }); + + expect(spawn).toHaveBeenCalledTimes(2); + expect(spawn).toHaveBeenCalledWith( + 'echo', + expect.not.objectContaining({ + stdio: expect.anything(), + }), + ); + expect(spawn).toHaveBeenCalledWith( + 'echo', + expect.objectContaining({ + stdio: 'inherit', + }), ); }); @@ -263,7 +303,7 @@ it('argument placeholders are properly replaced when additional arguments are pa ], { additionalArguments: ['foo', 'bar'], - } + }, ); expect(spawn).toHaveBeenCalledTimes(4); diff --git a/src/concurrently.ts b/src/concurrently.ts index fbe832cb..2c5b9ec8 100644 --- a/src/concurrently.ts +++ b/src/concurrently.ts @@ -62,9 +62,22 @@ export type ConcurrentlyOptions = { group?: boolean; /** - * Comma-separated list of chalk colors to use on prefixes. + * A comma-separated list of chalk colors or a string for available styles listed below to use on prefixes. + * If there are more commands than colors, the last color will be repeated. + * + * Available modifiers: + * - `reset`, `bold`, `dim`, `italic`, `underline`, `inverse`, `hidden`, `strikethrough` + * + * Available colors: + * - `black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, `white`, `gray`, + * any hex values for colors (e.g. `#23de43`) or `auto` for an automatically picked color + * + * Available background colors: + * - `bgBlack`, `bgRed`, `bgGreen`, `bgYellow`, `bgBlue`, `bgMagenta`, `bgCyan`, `bgWhite` + * + * @see {@link https://www.npmjs.com/package/chalk} for more information. */ - prefixColors?: string[]; + prefixColors?: string | string[]; /** * Maximum number of commands to run at once. @@ -132,7 +145,7 @@ export type ConcurrentlyOptions = { */ export function concurrently( baseCommands: ConcurrentlyCommandInput[], - baseOptions?: Partial + baseOptions?: Partial, ): ConcurrentlyResult { assert.ok(Array.isArray(baseCommands), '[concurrently] commands should be an array'); assert.notStrictEqual(baseCommands.length, 0, '[concurrently] no commands provided'); @@ -162,12 +175,12 @@ export function concurrently( ...command, }, getSpawnOpts({ - raw: options.raw, + raw: command.raw ?? options.raw, env: command.env, cwd: command.cwd || options.cwd, }), options.spawn, - options.kill + options.kill, ); }) .value(); @@ -183,7 +196,7 @@ export function concurrently( { commands, onFinishCallbacks: [] } as { commands: Command[]; onFinishCallbacks: (() => void)[]; - } + }, ); commands = handleResult.commands; @@ -201,7 +214,7 @@ export function concurrently( 1, (typeof options.maxProcesses === 'string' && options.maxProcesses.endsWith('%') ? Math.round((cpus().length * Number(options.maxProcesses.slice(0, -1))) / 100) - : Number(options.maxProcesses)) || commandsLeft.length + : Number(options.maxProcesses)) || commandsLeft.length, ); for (let i = 0; i < maxProcesses; i++) { maybeRunMore(commandsLeft); @@ -235,13 +248,18 @@ function mapToCommandInfo(command: ConcurrentlyCommandInput): CommandInfo { prefixColor: command.prefixColor, } : {}), + ...(command.raw !== undefined + ? { + raw: command.raw, + } + : {}), }; } function parseCommand(command: CommandInfo, parsers: CommandParser[]) { return parsers.reduce( (commands, parser) => _.flatMap(commands, (command) => parser.parse(command)), - _.castArray(command) + _.castArray(command), ); } diff --git a/src/fixtures/fake-command.ts b/src/fixtures/fake-command.ts index 864a9a04..6d0107fe 100644 --- a/src/fixtures/fake-command.ts +++ b/src/fixtures/fake-command.ts @@ -18,7 +18,7 @@ export class FakeCommand extends Command { }, {}, jest.fn(), - jest.fn() + jest.fn(), ); this.stdin = createMockInstance(Writable); diff --git a/src/flow-control/input-handler.spec.ts b/src/flow-control/input-handler.spec.ts index 165e13a0..68e393d4 100644 --- a/src/flow-control/input-handler.spec.ts +++ b/src/flow-control/input-handler.spec.ts @@ -54,22 +54,48 @@ it('forwards input stream to target index specified in input', () => { controller.handle(commands); inputStream.write('1:something'); + inputStream.write('1:multi\nline\n'); expect(commands[0].stdin?.write).not.toHaveBeenCalled(); - expect(commands[1].stdin?.write).toHaveBeenCalledTimes(1); + expect(commands[1].stdin?.write).toHaveBeenCalledTimes(2); expect(commands[1].stdin?.write).toHaveBeenCalledWith('something'); + expect(commands[1].stdin?.write).toHaveBeenCalledWith('multi\nline\n'); }); it('forwards input stream to target index specified in input when input contains colon', () => { controller.handle(commands); - inputStream.emit('data', Buffer.from('1::something')); inputStream.emit('data', Buffer.from('1:some:thing')); + inputStream.emit('data', Buffer.from('1: :something')); + inputStream.emit('data', Buffer.from('1::something')); expect(commands[0].stdin?.write).not.toHaveBeenCalled(); - expect(commands[1].stdin?.write).toHaveBeenCalledTimes(2); - expect(commands[1].stdin?.write).toHaveBeenCalledWith(':something'); + expect(commands[1].stdin?.write).toHaveBeenCalledTimes(3); expect(commands[1].stdin?.write).toHaveBeenCalledWith('some:thing'); + expect(commands[1].stdin?.write).toHaveBeenCalledWith(' :something'); + expect(commands[1].stdin?.write).toHaveBeenCalledWith(':something'); +}); + +it('does not forward input stream when input contains colon in a different format', () => { + controller.handle(commands); + + inputStream.emit('data', Buffer.from('Ruby0::Const::Syntax')); + inputStream.emit('data', Buffer.from('1:Ruby1::Const::Syntax')); + inputStream.emit('data', Buffer.from('ruby_symbol_arg :my_symbol')); + inputStream.emit('data', Buffer.from('ruby_symbol_arg(:my_symbol)')); + inputStream.emit('data', Buffer.from('{ruby_key: :my_val}')); + inputStream.emit('data', Buffer.from('{:ruby_key=>:my_val}')); + inputStream.emit('data', Buffer.from('js_obj = {key: "my_val"}')); + + expect(commands[1].stdin?.write).toHaveBeenCalledTimes(1); + expect(commands[1].stdin?.write).toHaveBeenCalledWith('Ruby1::Const::Syntax'); + expect(commands[0].stdin?.write).toHaveBeenCalledTimes(6); + expect(commands[0].stdin?.write).toHaveBeenCalledWith('Ruby0::Const::Syntax'); + expect(commands[0].stdin?.write).toHaveBeenCalledWith('ruby_symbol_arg :my_symbol'); + expect(commands[0].stdin?.write).toHaveBeenCalledWith('ruby_symbol_arg(:my_symbol)'); + expect(commands[0].stdin?.write).toHaveBeenCalledWith('{ruby_key: :my_val}'); + expect(commands[0].stdin?.write).toHaveBeenCalledWith('{:ruby_key=>:my_val}'); + expect(commands[0].stdin?.write).toHaveBeenCalledWith('js_obj = {key: "my_val"}'); }); it('forwards input stream to target name specified in input', () => { @@ -90,20 +116,19 @@ it('logs error if command has no stdin open', () => { expect(commands[1].stdin?.write).not.toHaveBeenCalled(); expect(logger.logGlobalEvent).toHaveBeenCalledWith( - 'Unable to find command 0, or it has no stdin open\n' + 'Unable to find command "0", or it has no stdin open\n', ); }); -it('logs error if command is not found', () => { +it('fallback to default input stream if command is not found', () => { controller.handle(commands); inputStream.write('foobar:something'); - expect(commands[0].stdin?.write).not.toHaveBeenCalled(); + expect(commands[0].stdin?.write).toHaveBeenCalledTimes(1); + expect(commands[0].stdin?.write).toHaveBeenCalledWith('foobar:something'); expect(commands[1].stdin?.write).not.toHaveBeenCalled(); - expect(logger.logGlobalEvent).toHaveBeenCalledWith( - 'Unable to find command foobar, or it has no stdin open\n' - ); + expect(logger.logGlobalEvent).not.toHaveBeenCalled(); }); it('pauses input stream when finished', () => { diff --git a/src/flow-control/input-handler.ts b/src/flow-control/input-handler.ts index f537c8fc..779607ec 100644 --- a/src/flow-control/input-handler.ts +++ b/src/flow-control/input-handler.ts @@ -48,24 +48,35 @@ export class InputHandler implements FlowController { return { commands }; } + const commandsMap = new Map(); + for (const command of commands) { + commandsMap.set(command.index.toString(), command); + commandsMap.set(command.name, command); + } + Rx.fromEvent(inputStream, 'data') .pipe(map((data) => String(data))) .subscribe((data) => { - const dataParts = data.split(/:(.+)/); - const targetId = dataParts.length > 1 ? dataParts[0] : this.defaultInputTarget; - const input = dataParts[1] || data; + let command: Command | undefined, input: string; + + const dataParts = data.split(/:(.+)/s); + let target = dataParts[0]; - const command = commands.find( - (command) => - command.name === targetId || - command.index.toString() === targetId.toString() - ); + if (dataParts.length > 1 && (command = commandsMap.get(target))) { + input = dataParts[1]; + } else { + // If `target` does not match a registered command, + // fallback to `defaultInputTarget` and forward the whole input data + target = this.defaultInputTarget.toString(); + command = commandsMap.get(target); + input = data; + } if (command && command.stdin) { command.stdin.write(input); } else { this.logger.logGlobalEvent( - `Unable to find command ${targetId}, or it has no stdin open\n` + `Unable to find command "${target}", or it has no stdin open\n`, ); } }); diff --git a/src/flow-control/kill-on-signal.ts b/src/flow-control/kill-on-signal.ts index aa8a040f..91a579b9 100644 --- a/src/flow-control/kill-on-signal.ts +++ b/src/flow-control/kill-on-signal.ts @@ -30,7 +30,7 @@ export class KillOnSignal implements FlowController { map((exitInfo) => { const exitCode = caughtSignal === 'SIGINT' ? 0 : exitInfo.exitCode; return { ...exitInfo, exitCode }; - }) + }), ); return new Proxy(command, { get(target, prop: keyof Command) { diff --git a/src/flow-control/kill-others.spec.ts b/src/flow-control/kill-others.spec.ts index a41e3e7f..a96e9179 100644 --- a/src/flow-control/kill-others.spec.ts +++ b/src/flow-control/kill-others.spec.ts @@ -8,7 +8,7 @@ import { KillOthers, ProcessCloseCondition } from './kill-others'; // Return a custom value for `canKill` (also see 'FakeCommand'). beforeAll(() => { jest.spyOn(Command, 'canKill').mockImplementation( - (command) => (command as FakeCommand).isKillable + (command) => (command as FakeCommand).isKillable, ); }); diff --git a/src/flow-control/kill-others.ts b/src/flow-control/kill-others.ts index 733f66c3..abc20e06 100644 --- a/src/flow-control/kill-others.ts +++ b/src/flow-control/kill-others.ts @@ -31,7 +31,7 @@ export class KillOthers implements FlowController { handle(commands: Command[]) { const conditions = this.conditions.filter( - (condition) => condition === 'failure' || condition === 'success' + (condition) => condition === 'failure' || condition === 'success', ); if (!conditions.length) { @@ -41,10 +41,10 @@ export class KillOthers implements FlowController { const closeStates = commands.map((command) => command.close.pipe( map(({ exitCode }) => - exitCode === 0 ? ('success' as const) : ('failure' as const) + exitCode === 0 ? ('success' as const) : ('failure' as const), ), - filter((state) => conditions.includes(state)) - ) + filter((state) => conditions.includes(state)), + ), ); closeStates.forEach((closeState) => @@ -52,11 +52,11 @@ export class KillOthers implements FlowController { const killableCommands = commands.filter((command) => Command.canKill(command)); if (killableCommands.length) { this.logger.logGlobalEvent( - `Sending ${this.killSignal || 'SIGTERM'} to other processes..` + `Sending ${this.killSignal || 'SIGTERM'} to other processes..`, ); killableCommands.forEach((command) => command.kill(this.killSignal)); } - }) + }), ); return { commands }; diff --git a/src/flow-control/log-error.spec.ts b/src/flow-control/log-error.spec.ts index ad18e8f5..c141a566 100644 --- a/src/flow-control/log-error.spec.ts +++ b/src/flow-control/log-error.spec.ts @@ -33,19 +33,19 @@ it('logs the error event of each command', () => { expect(logger.logCommandEvent).toHaveBeenCalledTimes(6); expect(logger.logCommandEvent).toHaveBeenCalledWith( `Error occurred when executing command: ${commands[0].command}`, - commands[0] + commands[0], ); expect(logger.logCommandEvent).toHaveBeenCalledWith('error from command 0', commands[0]); expect(logger.logCommandEvent).toHaveBeenCalledWith( `Error occurred when executing command: ${commands[1].command}`, - commands[1] + commands[1], ); expect(logger.logCommandEvent).toHaveBeenCalledWith(error1.stack, commands[1]); expect(logger.logCommandEvent).toHaveBeenCalledWith( `Error occurred when executing command: ${commands[2].command}`, - commands[2] + commands[2], ); expect(logger.logCommandEvent).toHaveBeenCalledWith(String(error2), commands[2]); }); diff --git a/src/flow-control/log-error.ts b/src/flow-control/log-error.ts index 3f2024da..8ecf4867 100644 --- a/src/flow-control/log-error.ts +++ b/src/flow-control/log-error.ts @@ -17,12 +17,12 @@ export class LogError implements FlowController { command.error.subscribe((event) => { this.logger.logCommandEvent( `Error occurred when executing command: ${command.command}`, - command + command, ); const errorText = String(event instanceof Error ? event.stack || event : event); this.logger.logCommandEvent(errorText, command); - }) + }), ); return { commands }; diff --git a/src/flow-control/log-exit.spec.ts b/src/flow-control/log-exit.spec.ts index 6f63cf7e..3d6d136b 100644 --- a/src/flow-control/log-exit.spec.ts +++ b/src/flow-control/log-exit.spec.ts @@ -27,10 +27,10 @@ it('logs the close event of each command', () => { expect(logger.logCommandEvent).toHaveBeenCalledTimes(2); expect(logger.logCommandEvent).toHaveBeenCalledWith( `${commands[0].command} exited with code 0`, - commands[0] + commands[0], ); expect(logger.logCommandEvent).toHaveBeenCalledWith( `${commands[1].command} exited with code SIGTERM`, - commands[1] + commands[1], ); }); diff --git a/src/flow-control/log-exit.ts b/src/flow-control/log-exit.ts index 63025694..fee52ea0 100644 --- a/src/flow-control/log-exit.ts +++ b/src/flow-control/log-exit.ts @@ -17,9 +17,9 @@ export class LogExit implements FlowController { command.close.subscribe(({ exitCode }) => { this.logger.logCommandEvent( `${command.command} exited with code ${exitCode}`, - command + command, ); - }) + }), ); return { commands }; diff --git a/src/flow-control/log-output.ts b/src/flow-control/log-output.ts index 8a636da2..a26c0a50 100644 --- a/src/flow-control/log-output.ts +++ b/src/flow-control/log-output.ts @@ -14,10 +14,10 @@ export class LogOutput implements FlowController { handle(commands: Command[]) { commands.forEach((command) => { command.stdout.subscribe((text) => - this.logger.logCommandText(text.toString(), command) + this.logger.logCommandText(text.toString(), command), ); command.stderr.subscribe((text) => - this.logger.logCommandText(text.toString(), command) + this.logger.logCommandText(text.toString(), command), ); }); diff --git a/src/flow-control/log-timings.spec.ts b/src/flow-control/log-timings.spec.ts index 228f986d..d5518c23 100644 --- a/src/flow-control/log-timings.spec.ts +++ b/src/flow-control/log-timings.spec.ts @@ -57,13 +57,15 @@ it('returns same commands', () => { it("does not log timings and doesn't throw if no logger is provided", () => { controller = new LogTimings({}); - controller.handle(commands); + const { onFinish } = controller.handle(commands); commands[0].timer.next({ startDate: startDate0 }); commands[1].timer.next({ startDate: startDate1 }); commands[1].timer.next({ startDate: startDate1, endDate: endDate1 }); commands[0].timer.next({ startDate: startDate0, endDate: endDate0 }); + onFinish?.(); + expect(logger.logCommandEvent).toHaveBeenCalledTimes(0); }); @@ -78,43 +80,49 @@ it('logs the timings at the start and end (ie complete or error) event of each c expect(logger.logCommandEvent).toHaveBeenCalledTimes(4); expect(logger.logCommandEvent).toHaveBeenCalledWith( `${commands[0].command} started at ${formatDate(startDate0, timestampFormat)}`, - commands[0] + commands[0], ); expect(logger.logCommandEvent).toHaveBeenCalledWith( `${commands[1].command} started at ${formatDate(startDate1, timestampFormat)}`, - commands[1] + commands[1], ); expect(logger.logCommandEvent).toHaveBeenCalledWith( `${commands[1].command} stopped at ${formatDate( endDate1, - timestampFormat + timestampFormat, )} after ${command1DurationTextMs}`, - commands[1] + commands[1], ); expect(logger.logCommandEvent).toHaveBeenCalledWith( `${commands[0].command} stopped at ${formatDate( endDate0, - timestampFormat + timestampFormat, )} after ${command0DurationTextMs}`, - commands[0] + commands[0], ); }); it('does not log timings summary if there was an error', () => { - controller.handle(commands); + const { onFinish } = controller.handle(commands); commands[0].close.next(command0ExitInfo); commands[1].error.next(undefined); + onFinish?.(); + expect(logger.logTable).toHaveBeenCalledTimes(0); }); -it('logs the sorted timings summary when all processes close successfully', () => { - controller.handle(commands); +it('logs the sorted timings summary when all processes close successfully after onFinish is called', () => { + const { onFinish } = controller.handle(commands); commands[0].close.next(command0ExitInfo); commands[1].close.next(command1ExitInfo); + expect(logger.logGlobalEvent).toHaveBeenCalledTimes(0); + + onFinish?.(); + expect(logger.logGlobalEvent).toHaveBeenCalledTimes(1); expect(logger.logGlobalEvent).toHaveBeenCalledWith('Timings:'); expect(logger.logTable).toHaveBeenCalledTimes(1); diff --git a/src/flow-control/log-timings.ts b/src/flow-control/log-timings.ts index c6ea5225..04eacb03 100644 --- a/src/flow-control/log-timings.ts +++ b/src/flow-control/log-timings.ts @@ -2,7 +2,7 @@ import * as assert from 'assert'; import formatDate from 'date-fns/format'; import _ from 'lodash'; import * as Rx from 'rxjs'; -import { bufferCount, take } from 'rxjs/operators'; +import { bufferCount, combineLatestWith, take } from 'rxjs/operators'; import { CloseEvent, Command } from '../command'; import * as defaults from '../defaults'; @@ -80,7 +80,7 @@ export class LogTimings implements FlowController { const formattedStartDate = formatDate(startDate, this.timestampFormat); logger.logCommandEvent( `${command.command} started at ${formattedStartDate}`, - command + command, ); } else { const durationMs = endDate.getTime() - startDate.getTime(); @@ -89,7 +89,7 @@ export class LogTimings implements FlowController { `${ command.command } stopped at ${formattedEndDate} after ${durationMs.toLocaleString()}ms`, - command + command, ); } }); @@ -97,11 +97,13 @@ export class LogTimings implements FlowController { // overall summary timings const closeStreams = commands.map((command) => command.close); + const finished = new Rx.Subject(); const allProcessesClosed = Rx.merge(...closeStreams).pipe( bufferCount(closeStreams.length), - take(1) + take(1), + combineLatestWith(finished), ); - allProcessesClosed.subscribe((exitInfos) => this.printExitInfoTimingTable(exitInfos)); - return { commands }; + allProcessesClosed.subscribe(([exitInfos]) => this.printExitInfoTimingTable(exitInfos)); + return { commands, onFinish: () => finished.next() }; } } diff --git a/src/flow-control/restart-process.spec.ts b/src/flow-control/restart-process.spec.ts index c4724563..f0759faa 100644 --- a/src/flow-control/restart-process.spec.ts +++ b/src/flow-control/restart-process.spec.ts @@ -45,7 +45,7 @@ it('restarts processes that fail after delay has passed', () => { expect(logger.logCommandEvent).toHaveBeenCalledTimes(1); expect(logger.logCommandEvent).toHaveBeenCalledWith( `${commands[0].command} restarted`, - commands[0] + commands[0], ); expect(commands[0].start).toHaveBeenCalledTimes(1); expect(commands[1].start).not.toHaveBeenCalled(); @@ -64,7 +64,7 @@ it('restarts processes up to tries', () => { expect(logger.logCommandEvent).toHaveBeenCalledTimes(2); expect(logger.logCommandEvent).toHaveBeenCalledWith( `${commands[0].command} restarted`, - commands[0] + commands[0], ); expect(commands[0].start).toHaveBeenCalledTimes(2); }); @@ -91,7 +91,7 @@ it('restarts processes until they succeed', () => { expect(logger.logCommandEvent).toHaveBeenCalledTimes(1); expect(logger.logCommandEvent).toHaveBeenCalledWith( `${commands[0].command} restarted`, - commands[0] + commands[0], ); expect(commands[0].start).toHaveBeenCalledTimes(1); }); diff --git a/src/flow-control/restart-process.ts b/src/flow-control/restart-process.ts index 581c79a7..b02474c6 100644 --- a/src/flow-control/restart-process.ts +++ b/src/flow-control/restart-process.ts @@ -1,5 +1,5 @@ import * as Rx from 'rxjs'; -import { defaultIfEmpty, delay, filter, mapTo, skip, take, takeWhile } from 'rxjs/operators'; +import { defaultIfEmpty, delay, filter, map, skip, take, takeWhile } from 'rxjs/operators'; import { Command } from '../command'; import * as defaults from '../defaults'; @@ -42,25 +42,32 @@ export class RestartProcess implements FlowController { .map((command) => command.close.pipe( take(this.tries), - takeWhile(({ exitCode }) => exitCode !== 0) - ) + takeWhile(({ exitCode }) => exitCode !== 0), + ), ) .map((failure, index) => Rx.merge( // Delay the emission (so that the restarts happen on time), // explicitly telling the subscriber that a restart is needed - failure.pipe(delay(this.delay, this.scheduler), mapTo(true)), + failure.pipe( + delay(this.delay, this.scheduler), + map(() => true), + ), // Skip the first N emissions (as these would be duplicates of the above), // meaning it will be empty because of success, or failed all N times, // and no more restarts should be attempted. - failure.pipe(skip(this.tries), mapTo(false), defaultIfEmpty(false)) + failure.pipe( + skip(this.tries), + map(() => false), + defaultIfEmpty(false), + ), ).subscribe((restart) => { const command = commands[index]; if (restart) { this.logger.logCommandEvent(`${command.command} restarted`, command); command.start(); } - }) + }), ); return { @@ -69,7 +76,7 @@ export class RestartProcess implements FlowController { filter(({ exitCode }, emission) => { // We let all success codes pass, and failures only after restarting won't happen again return exitCode === 0 || emission >= this.tries; - }) + }), ); return new Proxy(command, { diff --git a/src/index.ts b/src/index.ts index 76c3ab11..3dce77b6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -93,7 +93,7 @@ export type ConcurrentlyOptions = BaseConcurrentlyOptions & { export default ( commands: ConcurrentlyCommandInput[], - options: Partial = {} + options: Partial = {}, ) => { const logger = new Logger({ hide: options.hide, diff --git a/src/logger.spec.ts b/src/logger.spec.ts index 4eab2d68..caee89dc 100644 --- a/src/logger.spec.ts +++ b/src/logger.spec.ts @@ -1,10 +1,9 @@ +import { subscribeSpyTo } from '@hirez_io/observer-spy'; import chalk from 'chalk'; import { FakeCommand } from './fixtures/fake-command'; import { Logger } from './logger'; -let emitSpy: jest.SpyInstance; - beforeEach(() => { // Force chalk to use colors, otherwise tests may pass when they were supposed to be failing. chalk.level = 3; @@ -13,70 +12,72 @@ beforeEach(() => { const createLogger = (...options: ConstructorParameters) => { const logger = new Logger(...options); jest.spyOn(logger, 'log'); - emitSpy = jest.spyOn(logger, 'emit'); - return logger; + const spy = subscribeSpyTo(logger.output); + return { logger, spy }; }; describe('#log()', () => { - it('writes prefix + text to the output stream', () => { - const logger = createLogger({}); + it('emits prefix + text in the output stream', () => { + const { logger, spy } = createLogger({}); logger.log('foo', 'bar'); - expect(logger.emit).toHaveBeenCalledTimes(2); - expect(logger.emit).toHaveBeenCalledWith(undefined, 'foo'); - expect(logger.emit).toHaveBeenCalledWith(undefined, 'bar'); + const values = spy.getValues(); + expect(values).toHaveLength(2); + expect(values[0]).toEqual({ command: undefined, text: 'foo' }); + expect(values[1]).toEqual({ command: undefined, text: 'bar' }); }); - it('writes multiple lines of text with prefix on each', () => { - const logger = createLogger({}); + it('emits multiple lines of text with prefix on each', () => { + const { logger, spy } = createLogger({}); logger.log('foo', 'bar\nbaz\n'); - expect(logger.emit).toHaveBeenCalledTimes(2); - expect(logger.emit).toHaveBeenCalledWith(undefined, 'foo'); - expect(logger.emit).toHaveBeenCalledWith(undefined, 'bar\nfoobaz\n'); + const values = spy.getValues(); + expect(values).toHaveLength(2); + expect(values[0]).toEqual({ command: undefined, text: 'foo' }); + expect(values[1]).toEqual({ command: undefined, text: 'bar\nfoobaz\n' }); }); - it('does not prepend prefix if last call did not finish with a LF', () => { - const logger = createLogger({}); + it('does not emit prefix if last call did not finish with a LF', () => { + const { logger, spy } = createLogger({}); logger.log('foo', 'bar'); - emitSpy.mockClear(); logger.log('foo', 'baz'); - expect(logger.emit).toHaveBeenCalledTimes(1); - expect(logger.emit).toHaveBeenCalledWith(undefined, 'baz'); + expect(spy.getValuesLength()).toBe(3); + expect(spy.getLastValue()).toEqual({ command: undefined, text: 'baz' }); }); - it('does not prepend prefix or handle text if logger is in raw mode', () => { - const logger = createLogger({ raw: true }); + it('does not emit prefix nor handle text if logger is in raw mode', () => { + const { logger, spy } = createLogger({ raw: true }); logger.log('foo', 'bar\nbaz\n'); - expect(logger.emit).toHaveBeenCalledTimes(1); - expect(logger.emit).toHaveBeenCalledWith(undefined, 'bar\nbaz\n'); + const values = spy.getValues(); + expect(values).toHaveLength(1); + expect(values[0]).toEqual({ command: undefined, text: 'bar\nbaz\n' }); }); }); describe('#logGlobalEvent()', () => { it('does nothing if in raw mode', () => { - const logger = createLogger({ raw: true }); + const { logger } = createLogger({ raw: true }); logger.logGlobalEvent('foo'); expect(logger.log).not.toHaveBeenCalled(); }); it('logs in gray dim style with arrow prefix', () => { - const logger = createLogger({}); + const { logger } = createLogger({}); logger.logGlobalEvent('foo'); expect(logger.log).toHaveBeenCalledWith( chalk.reset('-->') + ' ', - chalk.reset('foo') + '\n' + chalk.reset('foo') + '\n', ); }); }); describe('#logCommandText()', () => { it('logs with name if no prefixFormat is set', () => { - const logger = createLogger({}); + const { logger } = createLogger({}); const cmd = new FakeCommand('bla'); logger.logCommandText('foo', cmd); @@ -84,7 +85,7 @@ describe('#logCommandText()', () => { }); it('logs with index if no prefixFormat is set, and command has no name', () => { - const logger = createLogger({}); + const { logger } = createLogger({}); const cmd = new FakeCommand('', undefined, 2); logger.logCommandText('foo', cmd); @@ -92,7 +93,7 @@ describe('#logCommandText()', () => { }); it('logs with prefixFormat set to pid', () => { - const logger = createLogger({ prefixFormat: 'pid' }); + const { logger } = createLogger({ prefixFormat: 'pid' }); const cmd = new FakeCommand(); cmd.pid = 123; logger.logCommandText('foo', cmd); @@ -101,7 +102,7 @@ describe('#logCommandText()', () => { }); it('logs with prefixFormat set to name', () => { - const logger = createLogger({ prefixFormat: 'name' }); + const { logger } = createLogger({ prefixFormat: 'name' }); const cmd = new FakeCommand('bar'); logger.logCommandText('foo', cmd); @@ -109,7 +110,7 @@ describe('#logCommandText()', () => { }); it('logs with prefixFormat set to index', () => { - const logger = createLogger({ prefixFormat: 'index' }); + const { logger } = createLogger({ prefixFormat: 'index' }); const cmd = new FakeCommand(undefined, undefined, 3); logger.logCommandText('foo', cmd); @@ -117,7 +118,7 @@ describe('#logCommandText()', () => { }); it('logs with prefixFormat set to time (with timestampFormat)', () => { - const logger = createLogger({ prefixFormat: 'time', timestampFormat: 'yyyy' }); + const { logger } = createLogger({ prefixFormat: 'time', timestampFormat: 'yyyy' }); const cmd = new FakeCommand(); logger.logCommandText('foo', cmd); @@ -126,7 +127,7 @@ describe('#logCommandText()', () => { }); it('logs with templated prefixFormat', () => { - const logger = createLogger({ prefixFormat: '{index}-{name}' }); + const { logger } = createLogger({ prefixFormat: '{index}-{name}' }); const cmd = new FakeCommand('bar'); logger.logCommandText('foo', cmd); @@ -134,7 +135,7 @@ describe('#logCommandText()', () => { }); it('does not strip spaces from beginning or end of prefixFormat', () => { - const logger = createLogger({ prefixFormat: ' {index}-{name} ' }); + const { logger } = createLogger({ prefixFormat: ' {index}-{name} ' }); const cmd = new FakeCommand('bar'); logger.logCommandText('foo', cmd); @@ -142,7 +143,7 @@ describe('#logCommandText()', () => { }); it('logs with no prefix', () => { - const logger = createLogger({ prefixFormat: 'none' }); + const { logger } = createLogger({ prefixFormat: 'none' }); const cmd = new FakeCommand(); logger.logCommandText('foo', cmd); @@ -150,7 +151,7 @@ describe('#logCommandText()', () => { }); it('logs prefix using command line itself', () => { - const logger = createLogger({ prefixFormat: 'command' }); + const { logger } = createLogger({ prefixFormat: 'command' }); const cmd = new FakeCommand(); logger.logCommandText('foo', cmd); @@ -158,7 +159,7 @@ describe('#logCommandText()', () => { }); it('logs prefix using command line itself, capped at prefixLength bytes', () => { - const logger = createLogger({ prefixFormat: 'command', prefixLength: 6 }); + const { logger } = createLogger({ prefixFormat: 'command', prefixLength: 6 }); const cmd = new FakeCommand(); logger.logCommandText('foo', cmd); @@ -166,7 +167,7 @@ describe('#logCommandText()', () => { }); it('logs prefix using prefixColor from command', () => { - const logger = createLogger({}); + const { logger } = createLogger({}); const cmd = new FakeCommand('', undefined, 1, { prefixColor: 'blue', }); @@ -176,7 +177,7 @@ describe('#logCommandText()', () => { }); it('logs prefix in gray dim if prefixColor from command does not exist', () => { - const logger = createLogger({}); + const { logger } = createLogger({}); const cmd = new FakeCommand('', undefined, 1, { prefixColor: 'blue.fake', }); @@ -186,7 +187,7 @@ describe('#logCommandText()', () => { }); it('logs prefix using prefixColor from command if prefixColor is a hex value', () => { - const logger = createLogger({}); + const { logger } = createLogger({}); const prefixColor = '#32bd8a'; const cmd = new FakeCommand('', undefined, 1, { prefixColor, @@ -197,7 +198,7 @@ describe('#logCommandText()', () => { }); it('does nothing if command is hidden by name', () => { - const logger = createLogger({ hide: ['abc'] }); + const { logger } = createLogger({ hide: ['abc'] }); const cmd = new FakeCommand('abc'); logger.logCommandText('foo', cmd); @@ -205,7 +206,7 @@ describe('#logCommandText()', () => { }); it('does nothing if command is hidden by index', () => { - const logger = createLogger({ hide: [3] }); + const { logger } = createLogger({ hide: [3] }); const cmd = new FakeCommand('', undefined, 3); logger.logCommandText('foo', cmd); @@ -215,14 +216,14 @@ describe('#logCommandText()', () => { describe('#logCommandEvent()', () => { it('does nothing if in raw mode', () => { - const logger = createLogger({ raw: true }); + const { logger } = createLogger({ raw: true }); logger.logCommandEvent('foo', new FakeCommand()); expect(logger.log).not.toHaveBeenCalled(); }); it('does nothing if command is hidden by name', () => { - const logger = createLogger({ hide: ['abc'] }); + const { logger } = createLogger({ hide: ['abc'] }); const cmd = new FakeCommand('abc'); logger.logCommandEvent('foo', cmd); @@ -230,7 +231,7 @@ describe('#logCommandEvent()', () => { }); it('does nothing if command is hidden by index', () => { - const logger = createLogger({ hide: [3] }); + const { logger } = createLogger({ hide: [3] }); const cmd = new FakeCommand('', undefined, 3); logger.logCommandEvent('foo', cmd); @@ -238,28 +239,28 @@ describe('#logCommandEvent()', () => { }); it('logs text in gray dim', () => { - const logger = createLogger({}); + const { logger } = createLogger({}); const cmd = new FakeCommand('', undefined, 1); logger.logCommandEvent('foo', cmd); expect(logger.log).toHaveBeenCalledWith( chalk.reset('[1]') + ' ', chalk.reset('foo') + '\n', - cmd + cmd, ); }); }); describe('#logTable()', () => { it('does not log anything in raw mode', () => { - const logger = createLogger({ raw: true }); + const { logger } = createLogger({ raw: true }); logger.logTable([{ foo: 1, bar: 2 }]); expect(logger.log).not.toHaveBeenCalled(); }); it('does not log anything if value is not an array', () => { - const logger = createLogger({}); + const { logger } = createLogger({}); logger.logTable({} as never); logger.logTable(null as never); logger.logTable(0 as never); @@ -269,92 +270,92 @@ describe('#logTable()', () => { }); it('does not log anything if array is empy', () => { - const logger = createLogger({}); + const { logger } = createLogger({}); logger.logTable([]); expect(logger.log).not.toHaveBeenCalled(); }); it('does not log anything if array items have no properties', () => { - const logger = createLogger({}); + const { logger } = createLogger({}); logger.logTable([{}]); expect(logger.log).not.toHaveBeenCalled(); }); it("logs a header for each item's properties", () => { - const logger = createLogger({}); + const { logger } = createLogger({}); logger.logTable([{ foo: 1, bar: 2 }]); expect(logger.log).toHaveBeenCalledWith( chalk.reset('-->') + ' ', - chalk.reset('│ foo │ bar │') + '\n' + chalk.reset('│ foo │ bar │') + '\n', ); }); it("logs padded headers according to longest column's value", () => { - const logger = createLogger({}); + const { logger } = createLogger({}); logger.logTable([{ a: 'foo', b: 'barbaz' }]); expect(logger.log).toHaveBeenCalledWith( chalk.reset('-->') + ' ', - chalk.reset('│ a │ b │') + '\n' + chalk.reset('│ a │ b │') + '\n', ); }); it("logs each items's values", () => { - const logger = createLogger({}); + const { logger } = createLogger({}); logger.logTable([{ foo: 123 }, { foo: 456 }]); expect(logger.log).toHaveBeenCalledWith( chalk.reset('-->') + ' ', - chalk.reset('│ 123 │') + '\n' + chalk.reset('│ 123 │') + '\n', ); expect(logger.log).toHaveBeenCalledWith( chalk.reset('-->') + ' ', - chalk.reset('│ 456 │') + '\n' + chalk.reset('│ 456 │') + '\n', ); }); it("logs each items's values with empty column", () => { - const logger = createLogger({}); + const { logger } = createLogger({}); logger.logTable([{ foo: 123 }, { foo: null }]); expect(logger.log).toHaveBeenCalledWith( chalk.reset('-->') + ' ', - chalk.reset('│ 123 │') + '\n' + chalk.reset('│ 123 │') + '\n', ); expect(logger.log).toHaveBeenCalledWith( chalk.reset('-->') + ' ', - chalk.reset('│ │') + '\n' + chalk.reset('│ │') + '\n', ); }); it("logs each items's values padded according to longest column's value", () => { - const logger = createLogger({}); + const { logger } = createLogger({}); logger.logTable([{ foo: 1 }, { foo: 123 }]); expect(logger.log).toHaveBeenCalledWith( chalk.reset('-->') + ' ', - chalk.reset('│ 1 │') + '\n' + chalk.reset('│ 1 │') + '\n', ); }); it('logs items with different properties in each', () => { - const logger = createLogger({}); + const { logger } = createLogger({}); logger.logTable([{ foo: 1 }, { bar: 2 }]); expect(logger.log).toHaveBeenCalledWith( chalk.reset('-->') + ' ', - chalk.reset('│ foo │ bar │') + '\n' + chalk.reset('│ foo │ bar │') + '\n', ); expect(logger.log).toHaveBeenCalledWith( chalk.reset('-->') + ' ', - chalk.reset('│ 1 │ │') + '\n' + chalk.reset('│ 1 │ │') + '\n', ); expect(logger.log).toHaveBeenCalledWith( chalk.reset('-->') + ' ', - chalk.reset('│ │ 2 │') + '\n' + chalk.reset('│ │ 2 │') + '\n', ); }); }); diff --git a/src/logger.ts b/src/logger.ts index 1498c508..bc3f7d6d 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -114,7 +114,7 @@ export class Logger { const keyRegex = new RegExp(_.escapeRegExp(`{${key}}`), 'g'); return prev.replace(keyRegex, String(val)); }, - prefix + prefix, ); } @@ -198,7 +198,7 @@ export class Logger { }); const headersFormatted = Object.keys(headers).map((header) => - header.padEnd(headers[header].length, ' ') + header.padEnd(headers[header].length, ' '), ); if (!headersFormatted.length) { diff --git a/src/prefix-color-selector.spec.ts b/src/prefix-color-selector.spec.ts index aaa5e383..5a7febcf 100644 --- a/src/prefix-color-selector.spec.ts +++ b/src/prefix-color-selector.spec.ts @@ -128,16 +128,16 @@ describe('#getNextColor', function () { (_, { acceptableConsoleColors, customColors, expectedColors }) => { if (acceptableConsoleColors) { jest.spyOn(PrefixColorSelector, 'ACCEPTABLE_CONSOLE_COLORS', 'get').mockReturnValue( - acceptableConsoleColors + acceptableConsoleColors, ); } const prefixColorSelector = new PrefixColorSelector(customColors); const prefixColorSelectorValues = expectedColors.map(() => - prefixColorSelector.getNextColor() + prefixColorSelector.getNextColor(), ); expect(prefixColorSelectorValues).toEqual(expectedColors); - } + }, ); const autoTests = { @@ -152,7 +152,7 @@ describe('#getNextColor', function () { ]; const prefixColorSelector = new PrefixColorSelector( - map ? expectedColors.map(() => 'auto') : ['auto'] + map ? expectedColors.map(() => 'auto') : ['auto'], ); expectedColors.reduce((previousColor, currentExpectedColor) => { diff --git a/src/prefix-color-selector.ts b/src/prefix-color-selector.ts index 95c17580..63ae0727 100644 --- a/src/prefix-color-selector.ts +++ b/src/prefix-color-selector.ts @@ -3,7 +3,7 @@ import chalk from 'chalk'; function getConsoleColorsWithoutCustomColors(customColors: string[]): string[] { return PrefixColorSelector.ACCEPTABLE_CONSOLE_COLORS.filter( // Consider the "Bright" variants of colors to be the same as the plain color to avoid similar colors - (color) => !customColors.includes(color.replace(/Bright$/, '')) + (color) => !customColors.includes(color.replace(/Bright$/, '')), ); } @@ -58,8 +58,9 @@ function* createColorGenerator(customColors: string[]): Generator; - constructor(customColors: string[] = []) { - this.colorGenerator = createColorGenerator(customColors); + constructor(customColors: string | string[] = []) { + const normalizedColors = typeof customColors === 'string' ? [customColors] : customColors; + this.colorGenerator = createColorGenerator(normalizedColors); } /** A list of colors that are readable in a terminal. */