From 1b2f809f235082a03198bd3a5740e15443d327f1 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 11:51:28 -0500 Subject: [PATCH 01/32] Enable step debug mode in example .env --- .env.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 1a3d037..652d4ef 100644 --- a/.env.example +++ b/.env.example @@ -5,4 +5,4 @@ INPUT_milliseconds=2400 # Enable/disable step debug logs -ACTIONS_STEP_DEBUG=false \ No newline at end of file +ACTIONS_STEP_DEBUG=true \ No newline at end of file From 3a39db3b2293faf7623e7aad4f8adbec6d57f8bc Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 11:51:39 -0500 Subject: [PATCH 02/32] Re-enable several linting rules --- .eslintrc.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index eb8a5d7..4a7c015 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -38,11 +38,9 @@ extends: rules: { '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-var-requires': 'off', 'camelcase': 'off', 'eslint-comments/no-use': 'off', 'i18n-text/no-en': 'off', - 'import/no-namespace': 'off', 'no-console': 'off', 'no-unused-vars': 'off' } From 8d4bef316d2e658f0745de9f5e450f68c1fc935e Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 11:51:57 -0500 Subject: [PATCH 03/32] Add example actions to test against --- CONTRIBUTING.md | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c62dc98..b188d6f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,7 @@ # Contributing -All contributions are welcome and greatly appreciated! +All contributions are welcome and greatly appreciated! However, please try to +keep them limited in scope so that they can be more easily reviewed. ## Steps to Contribute @@ -13,16 +14,23 @@ All contributions are welcome and greatly appreciated! > version automatically. 1. Fork this repository +1. Clone your fork +1. Install the dependencies with `npm install` +1. Make and test your changes 1. Commit your changes -1. Test your changes -1. Make sure to run `npm run all` before committing your final changes! + + Make sure to do the following when you commit your changes: + + - Increase the version number in [`package.json`](./package.json) + - Run `npm install` to ensure dependencies are up to date + - Run `npm run all` to run formatting, linting, etc. + 1. Open a pull request back to this repository 1. Notify the maintainers of this repository for peer review and approval 1. Merge :tada: The maintainers of this repository will create a new release with your changes -so that everyone can use the new release and enjoy the awesome features of -branch deployments! +so that everyone can enjoy your contributions! ## Testing @@ -37,7 +45,7 @@ This project requires **100%** test coverage. ### Testing Local Updates As you make changes, it's a great idea to run the `local-action` tool regularly -against any testing repositories. +against various repositories with different configurations. 1. Symlink your package folder (this should only need to be done once) @@ -60,9 +68,35 @@ Once you're finished testing, make sure to unlink! npm unlink @github/local-action ``` +#### Example Actions to Test + +After making updates and running the test suite, please also make sure to test +your updates using the following GitHub Actions repositories: + +- [`actions/javascript-action`](https://github.com/actions/javascript-action) +- [`actions/typescript-action`](https://github.com/actions/typescript-action) + +1. Clone each repository locally +1. From your `github/local-action` fork, test each action + + ```bash + npm exec local-action \ + "//typescript-action" \ + "src/index.ts" \ + "" + + npm exec local-action \ + "//javascript-action" \ + "src/index.ts" \ + "" + ``` + + For an example `.env` file to use for testing, see + [`.env.example`](./.env.example). + ### Running the Test Suite -Simply run the following command to execute the entire test suite: +Simply run the following command to invoke the entire test suite: ```bash npm run test From 633fb7a07db8d13e045fbae4f49ffa91d6c3e1a1 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 11:52:16 -0500 Subject: [PATCH 04/32] TSConfig cleanup --- tsconfig.json | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index 185d876..3bdc64a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,22 +4,16 @@ "allowImportingTsExtensions": true, "allowJs": true, "baseUrl": ".", - "declaration": true, - "declarationMap": true, "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", - "newLine": "lf", "noEmit": true, - "noImplicitAny": true, - "noUnusedLocals": true, - "noUnusedParameters": false, + "noImplicitAny": false, + "paths": {}, "resolveJsonModule": true, "rootDir": ".", - "sourceMap": true, - "strict": true, + "strict": false, "target": "ES2022" }, "exclude": ["__fixtures__", "__tests__", "coverage", "node_modules"] From 6bb931e18d483010435d54429e6a853370733221 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 11:53:02 -0500 Subject: [PATCH 05/32] Clean up linting errors in fixtures --- __fixtures__/javascript/failure/src/index.js | 3 ++- __fixtures__/javascript/failure/src/main.js | 3 ++- __fixtures__/javascript/no-import/src/index.js | 3 ++- __fixtures__/javascript/no-import/src/main.js | 2 +- __fixtures__/javascript/success/src/index.js | 3 ++- __fixtures__/javascript/success/src/main.js | 3 ++- __fixtures__/typescript/failure/src/index.ts | 3 ++- __fixtures__/typescript/failure/src/main.ts | 7 ++++--- __fixtures__/typescript/no-import/src/index.ts | 3 ++- __fixtures__/typescript/no-import/src/main.ts | 3 ++- __fixtures__/typescript/success/src/index.ts | 3 ++- __fixtures__/typescript/success/src/main.ts | 11 ++++++----- 12 files changed, 29 insertions(+), 18 deletions(-) diff --git a/__fixtures__/javascript/failure/src/index.js b/__fixtures__/javascript/failure/src/index.js index 05364b0..9fdf848 100644 --- a/__fixtures__/javascript/failure/src/index.js +++ b/__fixtures__/javascript/failure/src/index.js @@ -1,6 +1,7 @@ +/* eslint-disable @typescript-eslint/no-floating-promises */ +/* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable import/no-commonjs */ const { run } = require('./main') -// eslint-disable-next-line @typescript-eslint/no-floating-promises run() diff --git a/__fixtures__/javascript/failure/src/main.js b/__fixtures__/javascript/failure/src/main.js index df16d76..b5fc56b 100644 --- a/__fixtures__/javascript/failure/src/main.js +++ b/__fixtures__/javascript/failure/src/main.js @@ -1,8 +1,9 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-disable @typescript-eslint/require-await */ /* eslint-disable import/no-commonjs */ const core = require('@actions/core') -// eslint-disable-next-line @typescript-eslint/require-await async function run() { core.setFailed('JavaScript Action Failed!') } diff --git a/__fixtures__/javascript/no-import/src/index.js b/__fixtures__/javascript/no-import/src/index.js index 05364b0..9fdf848 100644 --- a/__fixtures__/javascript/no-import/src/index.js +++ b/__fixtures__/javascript/no-import/src/index.js @@ -1,6 +1,7 @@ +/* eslint-disable @typescript-eslint/no-floating-promises */ +/* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable import/no-commonjs */ const { run } = require('./main') -// eslint-disable-next-line @typescript-eslint/no-floating-promises run() diff --git a/__fixtures__/javascript/no-import/src/main.js b/__fixtures__/javascript/no-import/src/main.js index 7ce1249..f161a3f 100644 --- a/__fixtures__/javascript/no-import/src/main.js +++ b/__fixtures__/javascript/no-import/src/main.js @@ -1,6 +1,6 @@ +/* eslint-disable @typescript-eslint/require-await */ /* eslint-disable import/no-commonjs */ -// eslint-disable-next-line @typescript-eslint/require-await async function run() { return } diff --git a/__fixtures__/javascript/success/src/index.js b/__fixtures__/javascript/success/src/index.js index 05364b0..9fdf848 100644 --- a/__fixtures__/javascript/success/src/index.js +++ b/__fixtures__/javascript/success/src/index.js @@ -1,6 +1,7 @@ +/* eslint-disable @typescript-eslint/no-floating-promises */ +/* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable import/no-commonjs */ const { run } = require('./main') -// eslint-disable-next-line @typescript-eslint/no-floating-promises run() diff --git a/__fixtures__/javascript/success/src/main.js b/__fixtures__/javascript/success/src/main.js index 76eda88..198174b 100644 --- a/__fixtures__/javascript/success/src/main.js +++ b/__fixtures__/javascript/success/src/main.js @@ -1,8 +1,9 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +/* eslint-disable @typescript-eslint/require-await */ /* eslint-disable import/no-commonjs */ const core = require('@actions/core') -// eslint-disable-next-line @typescript-eslint/require-await async function run() { const myInput = core.getInput('myInput') core.setOutput('myOutput', myInput) diff --git a/__fixtures__/typescript/failure/src/index.ts b/__fixtures__/typescript/failure/src/index.ts index 1052b27..1c5eb3f 100644 --- a/__fixtures__/typescript/failure/src/index.ts +++ b/__fixtures__/typescript/failure/src/index.ts @@ -1,4 +1,5 @@ +/* eslint-disable @typescript-eslint/no-floating-promises */ + import { run } from './main' -// eslint-disable-next-line @typescript-eslint/no-floating-promises run() diff --git a/__fixtures__/typescript/failure/src/main.ts b/__fixtures__/typescript/failure/src/main.ts index 97c768e..f3432f2 100644 --- a/__fixtures__/typescript/failure/src/main.ts +++ b/__fixtures__/typescript/failure/src/main.ts @@ -1,6 +1,7 @@ -import * as core from '@actions/core' +/* eslint-disable @typescript-eslint/require-await */ + +import { setFailed } from '@actions/core' -// eslint-disable-next-line @typescript-eslint/require-await export async function run(): Promise { - core.setFailed('TypeScript Action Failed!') + setFailed('TypeScript Action Failed!') } diff --git a/__fixtures__/typescript/no-import/src/index.ts b/__fixtures__/typescript/no-import/src/index.ts index 1052b27..1c5eb3f 100644 --- a/__fixtures__/typescript/no-import/src/index.ts +++ b/__fixtures__/typescript/no-import/src/index.ts @@ -1,4 +1,5 @@ +/* eslint-disable @typescript-eslint/no-floating-promises */ + import { run } from './main' -// eslint-disable-next-line @typescript-eslint/no-floating-promises run() diff --git a/__fixtures__/typescript/no-import/src/main.ts b/__fixtures__/typescript/no-import/src/main.ts index 78eb8be..5efd8a9 100644 --- a/__fixtures__/typescript/no-import/src/main.ts +++ b/__fixtures__/typescript/no-import/src/main.ts @@ -1,4 +1,5 @@ -// eslint-disable-next-line @typescript-eslint/require-await +/* eslint-disable @typescript-eslint/require-await */ + export async function run(): Promise { return } diff --git a/__fixtures__/typescript/success/src/index.ts b/__fixtures__/typescript/success/src/index.ts index 1052b27..1c5eb3f 100644 --- a/__fixtures__/typescript/success/src/index.ts +++ b/__fixtures__/typescript/success/src/index.ts @@ -1,4 +1,5 @@ +/* eslint-disable @typescript-eslint/no-floating-promises */ + import { run } from './main' -// eslint-disable-next-line @typescript-eslint/no-floating-promises run() diff --git a/__fixtures__/typescript/success/src/main.ts b/__fixtures__/typescript/success/src/main.ts index 97fa7e0..92c0193 100644 --- a/__fixtures__/typescript/success/src/main.ts +++ b/__fixtures__/typescript/success/src/main.ts @@ -1,8 +1,9 @@ -import * as core from '@actions/core' +/* eslint-disable @typescript-eslint/require-await */ + +import { getInput, info, setOutput } from '@actions/core' -// eslint-disable-next-line @typescript-eslint/require-await export async function run(): Promise { - const myInput: string = core.getInput('myInput') - core.setOutput('myOutput', myInput) - core.info('TypeScript Action Succeeded!') + const myInput: string = getInput('myInput') + setOutput('myOutput', myInput) + info('TypeScript Action Succeeded!') } From f0ed668958c296fe922a51e12efc58c284d4c15f Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 11:53:15 -0500 Subject: [PATCH 06/32] Mock tsconfig-paths --- __mocks__/tsconfig-paths.ts | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 __mocks__/tsconfig-paths.ts diff --git a/__mocks__/tsconfig-paths.ts b/__mocks__/tsconfig-paths.ts new file mode 100644 index 0000000..1eee5f9 --- /dev/null +++ b/__mocks__/tsconfig-paths.ts @@ -0,0 +1,2 @@ +export const loadConfig = jest.fn() +export const register = jest.fn() From 5c4e47663a95eb8feabe0be368f076bb4dae35bb Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 11:54:01 -0500 Subject: [PATCH 07/32] Add/update tests --- __tests__/command.test.ts | 150 ++++++++++++--- __tests__/commands/run.test.ts | 89 ++++----- __tests__/index.test.ts | 23 ++- __tests__/stubs/core-stubs.test.ts | 290 ++++++++++++++++------------- __tests__/stubs/env-stubs.test.ts | 36 ++-- __tests__/utils/checks.test.ts | 48 ----- __tests__/utils/output.test.ts | 12 +- 7 files changed, 359 insertions(+), 289 deletions(-) delete mode 100644 __tests__/utils/checks.test.ts diff --git a/__tests__/command.test.ts b/__tests__/command.test.ts index 5085df2..9d8f0ca 100644 --- a/__tests__/command.test.ts +++ b/__tests__/command.test.ts @@ -1,10 +1,13 @@ +/* eslint-disable import/no-namespace */ + import { Command } from 'commander' -import * as command from '../src/command' +import { makeProgram } from '../src/command' import * as run from '../src/commands/run' -import * as coreStubs from '../src/stubs/core-stubs' -import * as envStubs from '../src/stubs/env-stubs' +import { ResetCoreMetadata } from '../src/stubs/core-stubs' +import { ResetEnvMetadata } from '../src/stubs/env-stubs' let process_exitSpy: jest.SpyInstance +let process_stderrSpy: jest.SpyInstance let program: Command let run_actionSpy: jest.SpyInstance @@ -15,13 +18,13 @@ describe('Commmand', () => { jest.spyOn(console, 'table').mockImplementation() }) - beforeEach(() => { + beforeEach(async () => { // Reset metadata - envStubs.ResetEnvMetadata() - coreStubs.ResetCoreMetadata() + ResetEnvMetadata() + ResetCoreMetadata() // Create a new program before each test - program = command.makeProgram() + program = await makeProgram() // Stub the run action and process.exit run_actionSpy = jest.spyOn(run, 'action').mockImplementation() @@ -46,29 +49,29 @@ describe('Commmand', () => { }) it('Runs if all arguments are provided', async () => { - await command - .makeProgram() - .parseAsync( - [ - './__fixtures__/typescript/success', - 'src/index.ts', - './__fixtures__/typescript/success/.env.fixture' - ], - { - from: 'user' - } - ) + await ( + await makeProgram() + ).parseAsync( + [ + './__fixtures__/typescript/success', + 'src/index.ts', + './__fixtures__/typescript/success/.env.fixture' + ], + { + from: 'user' + } + ) expect(process_exitSpy).not.toHaveBeenCalled() expect(run_actionSpy).toHaveBeenCalled() }) it('Exits if no path argument is provided', async () => { - const process_stderrSpy: jest.SpyInstance = jest + process_stderrSpy = jest .spyOn(process.stderr, 'write') .mockImplementation() - await command.makeProgram().parseAsync([], { from: 'user' }) + await (await makeProgram()).parseAsync([], { from: 'user' }) expect(process_exitSpy).toHaveBeenCalled() @@ -76,13 +79,13 @@ describe('Commmand', () => { }) it('Exits if no entrypoint argument is provided', async () => { - const process_stderrSpy: jest.SpyInstance = jest + process_stderrSpy = jest .spyOn(process.stderr, 'write') .mockImplementation() - await command - .makeProgram() - .parseAsync(['./__fixtures__/typescript/success', ''], { from: 'user' }) + await ( + await makeProgram() + ).parseAsync(['./__fixtures__/typescript/success', ''], { from: 'user' }) expect(process_exitSpy).toHaveBeenCalled() @@ -90,19 +93,104 @@ describe('Commmand', () => { }) it('Exits if no env-file argument is provided', async () => { - const process_stderrSpy: jest.SpyInstance = jest + process_stderrSpy = jest .spyOn(process.stderr, 'write') .mockImplementation() - await command - .makeProgram() - .parseAsync(['./__fixtures__/typescript/success', 'src/index.ts'], { - from: 'user' - }) + await ( + await makeProgram() + ).parseAsync(['./__fixtures__/typescript/success', 'src/index.ts'], { + from: 'user' + }) expect(process_exitSpy).toHaveBeenCalled() process_stderrSpy.mockRestore() }) + + it('Exits if the action path is not a directory', async () => { + process_stderrSpy = jest + .spyOn(process.stderr, 'write') + .mockImplementation() + + await expect( + (await makeProgram()).parseAsync( + ['./package.json', 'src/index.ts', '.env'], + { + from: 'user' + } + ) + ).rejects.toThrow('Action path must be a directory') + + process_stderrSpy.mockRestore() + }) + + it('Exits if the action path does not exist', async () => { + process_stderrSpy = jest + .spyOn(process.stderr, 'write') + .mockImplementation() + + await expect( + (await makeProgram()).parseAsync( + ['/test/path/does/not/exist', 'src/index.ts', '.env'], + { + from: 'user' + } + ) + ).rejects.toThrow('Action path does not exist') + + process_stderrSpy.mockRestore() + }) + + it('Exits if the action path does not contain an action.yml', async () => { + process_stderrSpy = jest + .spyOn(process.stderr, 'write') + .mockImplementation() + + await expect( + (await makeProgram()).parseAsync( + ['./__fixtures__', 'src/index.ts', '.env'], + { + from: 'user' + } + ) + ).rejects.toThrow('Action path must contain an action.yml file') + + process_stderrSpy.mockRestore() + }) + + it('Exits if the entrypoint does not exist', async () => { + process_stderrSpy = jest + .spyOn(process.stderr, 'write') + .mockImplementation() + + await expect( + (await makeProgram()).parseAsync( + ['./__fixtures__/typescript/success', 'src/fake.ts', '.env'], + { + from: 'user' + } + ) + ).rejects.toThrow('Entrypoint does not exist') + + process_stderrSpy.mockRestore() + }) + + it('Throws if the env file does not exist', async () => { + process_stderrSpy = jest + .spyOn(process.stderr, 'write') + .mockImplementation() + + await expect( + (await makeProgram()).parseAsync( + ['./__fixtures__/typescript/success', 'src/index.ts', '.notreal.env'], + { + from: 'user' + } + ) + ).rejects.toThrow('Environment file does not exist') + + process_stderrSpy.mockRestore() + }) }) }) diff --git a/__tests__/commands/run.test.ts b/__tests__/commands/run.test.ts index 3b98156..e49cdb0 100644 --- a/__tests__/commands/run.test.ts +++ b/__tests__/commands/run.test.ts @@ -1,11 +1,12 @@ -import * as core from '@actions/core' -import * as run from '../../src/commands/run' -import * as coreStubs from '../../src/stubs/core-stubs' -import * as envStubs from '../../src/stubs/env-stubs' +/* eslint-disable import/no-namespace */ + +import { setFailed } from '@actions/core' +import { action } from '../../src/commands/run' +import { ResetCoreMetadata } from '../../src/stubs/core-stubs' +import { EnvMeta, ResetEnvMetadata } from '../../src/stubs/env-stubs' import * as output from '../../src/utils/output' -// eslint-disable-next-line no-undef -let envBackup: NodeJS.ProcessEnv = process.env +let envBackup: { [key: string]: string | undefined } = process.env describe('Command: run', () => { beforeAll(() => { @@ -17,8 +18,8 @@ describe('Command: run', () => { beforeEach(() => { // Reset metadata - envStubs.ResetEnvMetadata() - coreStubs.ResetCoreMetadata() + ResetEnvMetadata() + ResetCoreMetadata() // Back up environment variables envBackup = process.env @@ -34,65 +35,65 @@ describe('Command: run', () => { describe('TypeScript', () => { it('Action: success', async () => { - envStubs.EnvMeta.actionFile = `./__fixtures__/typescript/success/action.yml` - envStubs.EnvMeta.actionPath = `./__fixtures__/typescript/success` - envStubs.EnvMeta.entrypoint = `./__fixtures__/typescript/success/src/index.ts` - envStubs.EnvMeta.envFile = `./__fixtures__/typescript/success/.env.fixture` + EnvMeta.actionFile = `./__fixtures__/typescript/success/action.yml` + EnvMeta.actionPath = `./__fixtures__/typescript/success` + EnvMeta.entrypoint = `./__fixtures__/typescript/success/src/index.ts` + EnvMeta.envFile = `./__fixtures__/typescript/success/.env.fixture` - await expect(run.action()).resolves.toBeUndefined() - expect(core.setFailed).not.toHaveBeenCalled() + await expect(action()).resolves.toBeUndefined() + expect(setFailed).not.toHaveBeenCalled() }) it('Action: failure', async () => { - envStubs.EnvMeta.actionFile = `./__fixtures__/typescript/failure/action.yml` - envStubs.EnvMeta.actionPath = `./__fixtures__/typescript/failure` - envStubs.EnvMeta.entrypoint = `./__fixtures__/typescript/failure/src/index.ts` - envStubs.EnvMeta.envFile = `./__fixtures__/typescript/failure/.env.fixture` + EnvMeta.actionFile = `./__fixtures__/typescript/failure/action.yml` + EnvMeta.actionPath = `./__fixtures__/typescript/failure` + EnvMeta.entrypoint = `./__fixtures__/typescript/failure/src/index.ts` + EnvMeta.envFile = `./__fixtures__/typescript/failure/.env.fixture` - await expect(run.action()).resolves.toBeUndefined() - expect(core.setFailed).toHaveBeenCalledWith('TypeScript Action Failed!') + await expect(action()).resolves.toBeUndefined() + expect(setFailed).toHaveBeenCalledWith('TypeScript Action Failed!') }) it('Action: no-import', async () => { - envStubs.EnvMeta.actionFile = `./__fixtures__/typescript/no-import/action.yml` - envStubs.EnvMeta.actionPath = `./__fixtures__/typescript/no-import` - envStubs.EnvMeta.entrypoint = `./__fixtures__/typescript/no-import/src/index.ts` - envStubs.EnvMeta.envFile = `./__fixtures__/typescript/no-import/.env.fixture` + EnvMeta.actionFile = `./__fixtures__/typescript/no-import/action.yml` + EnvMeta.actionPath = `./__fixtures__/typescript/no-import` + EnvMeta.entrypoint = `./__fixtures__/typescript/no-import/src/index.ts` + EnvMeta.envFile = `./__fixtures__/typescript/no-import/.env.fixture` - await expect(run.action()).resolves.toBeUndefined() - expect(core.setFailed).not.toHaveBeenCalled() + await expect(action()).resolves.toBeUndefined() + expect(setFailed).not.toHaveBeenCalled() }) }) describe('JavaScript', () => { it('Action: success', async () => { - envStubs.EnvMeta.actionFile = `./__fixtures__/javascript/success/action.yml` - envStubs.EnvMeta.actionPath = `./__fixtures__/javascript/success` - envStubs.EnvMeta.entrypoint = `./__fixtures__/javascript/success/src/index.js` - envStubs.EnvMeta.envFile = `./__fixtures__/javascript/success/.env.fixture` + EnvMeta.actionFile = `./__fixtures__/javascript/success/action.yml` + EnvMeta.actionPath = `./__fixtures__/javascript/success` + EnvMeta.entrypoint = `./__fixtures__/javascript/success/src/index.js` + EnvMeta.envFile = `./__fixtures__/javascript/success/.env.fixture` - await expect(run.action()).resolves.toBeUndefined() - expect(core.setFailed).not.toHaveBeenCalled() + await expect(action()).resolves.toBeUndefined() + expect(setFailed).not.toHaveBeenCalled() }) it('Action: failure', async () => { - envStubs.EnvMeta.actionFile = `./__fixtures__/javascript/failure/action.yml` - envStubs.EnvMeta.actionPath = `./__fixtures__/javascript/failure` - envStubs.EnvMeta.entrypoint = `./__fixtures__/javascript/failure/src/index.js` - envStubs.EnvMeta.envFile = `./__fixtures__/javascript/failure/.env.fixture` + EnvMeta.actionFile = `./__fixtures__/javascript/failure/action.yml` + EnvMeta.actionPath = `./__fixtures__/javascript/failure` + EnvMeta.entrypoint = `./__fixtures__/javascript/failure/src/index.js` + EnvMeta.envFile = `./__fixtures__/javascript/failure/.env.fixture` - await expect(run.action()).resolves.toBeUndefined() - expect(core.setFailed).toHaveBeenCalled() + await expect(action()).resolves.toBeUndefined() + expect(setFailed).toHaveBeenCalled() }) it('Action: no-import', async () => { - envStubs.EnvMeta.actionFile = `./__fixtures__/javascript/no-import/action.yml` - envStubs.EnvMeta.actionPath = `./__fixtures__/javascript/no-import` - envStubs.EnvMeta.entrypoint = `./__fixtures__/javascript/no-import/src/index.js` - envStubs.EnvMeta.envFile = `./__fixtures__/javascript/no-import/.env.fixture` + EnvMeta.actionFile = `./__fixtures__/javascript/no-import/action.yml` + EnvMeta.actionPath = `./__fixtures__/javascript/no-import` + EnvMeta.entrypoint = `./__fixtures__/javascript/no-import/src/index.js` + EnvMeta.envFile = `./__fixtures__/javascript/no-import/.env.fixture` - await expect(run.action()).resolves.toBeUndefined() - expect(core.setFailed).not.toHaveBeenCalled() + await expect(action()).resolves.toBeUndefined() + expect(setFailed).not.toHaveBeenCalled() }) }) }) diff --git a/__tests__/index.test.ts b/__tests__/index.test.ts index 0c05a18..ded3459 100644 --- a/__tests__/index.test.ts +++ b/__tests__/index.test.ts @@ -1,7 +1,10 @@ +/* eslint-disable import/no-namespace */ + import { Command } from 'commander' import * as command from '../src/command' -import * as coreStubs from '../src/stubs/core-stubs' -import * as envStubs from '../src/stubs/env-stubs' +import { run } from '../src/index' +import { ResetCoreMetadata } from '../src/stubs/core-stubs' +import { ResetEnvMetadata } from '../src/stubs/env-stubs' let command_makeProgramSpy: jest.SpyInstance @@ -14,17 +17,17 @@ describe('Index', () => { // Stub the command.makeProgram call command_makeProgramSpy = jest .spyOn(command, 'makeProgram') - .mockImplementation(() => { - return { + .mockImplementation(async () => { + return Promise.resolve({ parse: () => {} - } as Command + } as Command) }) }) beforeEach(() => { // Reset metadata - envStubs.ResetEnvMetadata() - coreStubs.ResetCoreMetadata() + ResetEnvMetadata() + ResetCoreMetadata() }) afterEach(() => { @@ -34,11 +37,7 @@ describe('Index', () => { describe('run()', () => { it('Runs the program', async () => { - const index: typeof import('../src/index') = (await import( - '../src/index' - )) as typeof import('../src/index') - - await index.run() + await run() expect(command_makeProgramSpy).toHaveBeenCalled() }) diff --git a/__tests__/stubs/core-stubs.test.ts b/__tests__/stubs/core-stubs.test.ts index 6646e7a..6cda28d 100644 --- a/__tests__/stubs/core-stubs.test.ts +++ b/__tests__/stubs/core-stubs.test.ts @@ -1,14 +1,37 @@ -import { ExitCode } from '../../src/enums' -import * as coreStubs from '../../src/stubs/core-stubs' -import * as envStubs from '../../src/stubs/env-stubs' +import { + CoreMeta, + ResetCoreMetadata, + exportVariable, + setSecret, + addPath, + getInput, + getMultilineInput, + getBooleanInput, + setOutput, + setCommandEcho, + setFailed, + log, + isDebug, + debug, + error, + warning, + notice, + info, + startGroup, + endGroup, + group, + saveState, + getState, + getIDToken +} from '../../src/stubs/core-stubs' +import { EnvMeta, ResetEnvMetadata } from '../../src/stubs/env-stubs' import type { CoreMetadata } from '../../src/types' -// eslint-disable-next-line no-undef -let envBackup: NodeJS.ProcessEnv = process.env +let envBackup: { [key: string]: string | undefined } = process.env /** Empty CoreMetadata Object */ const empty: CoreMetadata = { - exitCode: ExitCode.Success, + exitCode: 0, exitMessage: '', outputs: {}, secrets: [], @@ -36,8 +59,8 @@ describe('Core', () => { beforeEach(() => { // Reset metadata - envStubs.ResetEnvMetadata() - coreStubs.ResetCoreMetadata() + ResetEnvMetadata() + ResetCoreMetadata() // Back up environment variables envBackup = process.env @@ -54,65 +77,65 @@ describe('Core', () => { describe('CoreMeta', () => { it('Tracks updates to the core metadata', () => { // Initial state should be empty - expect(coreStubs.CoreMeta.exitCode).toEqual(empty.exitCode) - expect(coreStubs.CoreMeta.exitMessage).toEqual(empty.exitMessage) - expect(coreStubs.CoreMeta.outputs).toMatchObject(empty.outputs) - expect(coreStubs.CoreMeta.secrets).toMatchObject(empty.secrets) - expect(coreStubs.CoreMeta.stepDebug).toEqual(empty.stepDebug) - expect(coreStubs.CoreMeta.echo).toEqual(empty.echo) - expect(coreStubs.CoreMeta.state).toMatchObject(empty.state) + expect(CoreMeta.exitCode).toEqual(empty.exitCode) + expect(CoreMeta.exitMessage).toEqual(empty.exitMessage) + expect(CoreMeta.outputs).toMatchObject(empty.outputs) + expect(CoreMeta.secrets).toMatchObject(empty.secrets) + expect(CoreMeta.stepDebug).toEqual(empty.stepDebug) + expect(CoreMeta.echo).toEqual(empty.echo) + expect(CoreMeta.state).toMatchObject(empty.state) // Update the metadata - coreStubs.CoreMeta.exitCode = ExitCode.Failure - coreStubs.CoreMeta.exitMessage = 'test' - coreStubs.CoreMeta.outputs = { 'my-output': 'test' } - coreStubs.CoreMeta.secrets = ['secret-value-1234'] - coreStubs.CoreMeta.stepDebug = true - coreStubs.CoreMeta.echo = true - coreStubs.CoreMeta.state = { 'my-state': 'test' } + CoreMeta.exitCode = 1 + CoreMeta.exitMessage = 'test' + CoreMeta.outputs = { 'my-output': 'test' } + CoreMeta.secrets = ['secret-value-1234'] + CoreMeta.stepDebug = true + CoreMeta.echo = true + CoreMeta.state = { 'my-state': 'test' } // Verify the updated metadata - expect(coreStubs.CoreMeta.exitCode).toEqual(ExitCode.Failure) - expect(coreStubs.CoreMeta.exitMessage).toEqual('test') - expect(coreStubs.CoreMeta.outputs).toMatchObject({ 'my-output': 'test' }) - expect(coreStubs.CoreMeta.secrets).toMatchObject(['secret-value-1234']) - expect(coreStubs.CoreMeta.stepDebug).toEqual(true) - expect(coreStubs.CoreMeta.echo).toEqual(true) - expect(coreStubs.CoreMeta.state).toMatchObject({ 'my-state': 'test' }) + expect(CoreMeta.exitCode).toEqual(1) + expect(CoreMeta.exitMessage).toEqual('test') + expect(CoreMeta.outputs).toMatchObject({ 'my-output': 'test' }) + expect(CoreMeta.secrets).toMatchObject(['secret-value-1234']) + expect(CoreMeta.stepDebug).toEqual(true) + expect(CoreMeta.echo).toEqual(true) + expect(CoreMeta.state).toMatchObject({ 'my-state': 'test' }) // Reset the metadata - coreStubs.ResetCoreMetadata() + ResetCoreMetadata() // Verify the reset metadata - expect(coreStubs.CoreMeta.exitCode).toEqual(empty.exitCode) - expect(coreStubs.CoreMeta.exitMessage).toEqual(empty.exitMessage) - expect(coreStubs.CoreMeta.outputs).toMatchObject(empty.outputs) - expect(coreStubs.CoreMeta.secrets).toMatchObject(empty.secrets) - expect(coreStubs.CoreMeta.stepDebug).toEqual(empty.stepDebug) - expect(coreStubs.CoreMeta.echo).toEqual(empty.echo) - expect(coreStubs.CoreMeta.state).toMatchObject(empty.state) + expect(CoreMeta.exitCode).toEqual(empty.exitCode) + expect(CoreMeta.exitMessage).toEqual(empty.exitMessage) + expect(CoreMeta.outputs).toMatchObject(empty.outputs) + expect(CoreMeta.secrets).toMatchObject(empty.secrets) + expect(CoreMeta.stepDebug).toEqual(empty.stepDebug) + expect(CoreMeta.echo).toEqual(empty.echo) + expect(CoreMeta.state).toMatchObject(empty.state) }) }) describe('Core Stubs', () => { describe('exportVariable()', () => { it('Exports an environment variable', () => { - coreStubs.exportVariable('TEST', 'test') - expect(envStubs.EnvMeta.env).toMatchObject({ TEST: 'test' }) + exportVariable('TEST', 'test') + expect(EnvMeta.env).toMatchObject({ TEST: 'test' }) }) }) describe('setSecre()', () => { it('Sets a secret to mask', () => { - coreStubs.setSecret('test') - expect(coreStubs.CoreMeta.secrets).toMatchObject(['test']) + setSecret('test') + expect(CoreMeta.secrets).toMatchObject(['test']) }) }) describe('addPath()', () => { it('Appends to the path', () => { - coreStubs.addPath('/usr/test') - expect(envStubs.EnvMeta.path.includes('/usr/test')).toBeTruthy() + addPath('/usr/test') + expect(EnvMeta.path.includes('/usr/test')).toBeTruthy() }) }) @@ -120,29 +143,27 @@ describe('Core', () => { it('Gets action inputs', () => { // Test both upper and lower case versions of the input process.env.INPUT_TEST = 'test-upper' - expect(coreStubs.getInput('test')).toEqual('test-upper') + expect(getInput('test')).toEqual('test-upper') delete process.env.INPUT_TEST process.env.INPUT_test = 'test-lower' - expect(coreStubs.getInput('test')).toEqual('test-lower') + expect(getInput('test')).toEqual('test-lower') }) it('Returns an empty string', () => { - expect(coreStubs.getInput('test-input-missing')).toEqual('') + expect(getInput('test-input-missing')).toEqual('') }) it('Throws an error if the input is required and not found', () => { expect(() => - coreStubs.getInput('test-input-missing', { required: true }) + getInput('test-input-missing', { required: true }) ).toThrow() }) it('Trims whitespace', () => { process.env.INPUT_TEST = ' test ' - expect(coreStubs.getInput('test', { trimWhitespace: true })).toEqual( - 'test' - ) + expect(getInput('test', { trimWhitespace: true })).toEqual('test') }) }) @@ -150,7 +171,7 @@ describe('Core', () => { it('Gets action inputs', () => { // Test both upper and lower case versions of the input process.env.INPUT_TEST = `test\nmultiline\nupper` - expect(coreStubs.getMultilineInput('test')).toMatchObject([ + expect(getMultilineInput('test')).toMatchObject([ 'test', 'multiline', 'upper' @@ -159,7 +180,7 @@ describe('Core', () => { delete process.env.INPUT_TEST process.env.INPUT_test = `test\nmultiline\nlower` - expect(coreStubs.getMultilineInput('test')).toMatchObject([ + expect(getMultilineInput('test')).toMatchObject([ 'test', 'multiline', 'lower' @@ -167,14 +188,12 @@ describe('Core', () => { }) it('Returns an empty list if the input is not found', () => { - expect(coreStubs.getMultilineInput('test-input-missing')).toMatchObject( - [] - ) + expect(getMultilineInput('test-input-missing')).toMatchObject([]) }) it('Throws an error if the input is required and not found', () => { expect(() => - coreStubs.getMultilineInput('test-input-missing', { + getMultilineInput('test-input-missing', { required: true }) ).toThrow() @@ -183,7 +202,7 @@ describe('Core', () => { it('Trims whitespace from the input', () => { process.env.INPUT_TEST = ' test \n muliline \n spaces ' expect( - coreStubs.getMultilineInput('test', { trimWhitespace: true }) + getMultilineInput('test', { trimWhitespace: true }) ).toMatchObject(['test', 'muliline', 'spaces']) }) }) @@ -192,17 +211,17 @@ describe('Core', () => { it('Gets the action inputs', () => { // Test both upper and lower case versions of the input process.env.INPUT_TEST = 'true' - expect(coreStubs.getBooleanInput('test')).toBeTruthy() + expect(getBooleanInput('test')).toBeTruthy() delete process.env.INPUT_TEST process.env.INPUT_test = 'false' - expect(coreStubs.getBooleanInput('test')).toBeFalsy() + expect(getBooleanInput('test')).toBeFalsy() }) it('Throws an error if the input is required and not found', () => { expect(() => - coreStubs.getBooleanInput('test-input-missing', { + getBooleanInput('test-input-missing', { required: true }) ).toThrow() @@ -210,45 +229,45 @@ describe('Core', () => { it('Returns true or false for valid YAML boolean values', () => { process.env.INPUT_TEST = 'true' - expect(coreStubs.getBooleanInput('test')).toBeTruthy() + expect(getBooleanInput('test')).toBeTruthy() process.env.INPUT_TEST = 'True' - expect(coreStubs.getBooleanInput('test')).toBeTruthy() + expect(getBooleanInput('test')).toBeTruthy() process.env.INPUT_TEST = 'TRUE' - expect(coreStubs.getBooleanInput('test')).toBeTruthy() + expect(getBooleanInput('test')).toBeTruthy() process.env.INPUT_TEST = 'false' - expect(coreStubs.getBooleanInput('test')).toBeFalsy() + expect(getBooleanInput('test')).toBeFalsy() process.env.INPUT_TEST = 'False' - expect(coreStubs.getBooleanInput('test')).toBeFalsy() + expect(getBooleanInput('test')).toBeFalsy() process.env.INPUT_TEST = 'FALSE' - expect(coreStubs.getBooleanInput('test')).toBeFalsy() + expect(getBooleanInput('test')).toBeFalsy() }) it('Throws an error if the input is not a valid YAML boolean value', () => { process.env.INPUT_TEST = 'This is not a valid boolean value' - expect(() => coreStubs.getBooleanInput('test')).toThrow() + expect(() => getBooleanInput('test')).toThrow() }) }) describe('setOutput()', () => { it('Sets the action outputs', () => { - jest.spyOn(coreStubs.CoreMeta.colors, 'cyan').mockImplementation() + jest.spyOn(CoreMeta.colors, 'cyan').mockImplementation() - coreStubs.setOutput('my-output', 'output-value') + setOutput('my-output', 'output-value') - expect(coreStubs.CoreMeta.outputs['my-output']).toEqual('output-value') + expect(CoreMeta.outputs['my-output']).toEqual('output-value') }) it('Logs the output to the console', () => { const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'cyan') + .spyOn(CoreMeta.colors, 'cyan') .mockImplementation() - coreStubs.setOutput('my-output', 'output-value') + setOutput('my-output', 'output-value') expect(core_outputSpy).toHaveBeenCalledWith( '::set-output name=my-output::output-value' @@ -258,29 +277,29 @@ describe('Core', () => { describe('setCommandEcho()', () => { it('Sets the command echo flag', () => { - coreStubs.setCommandEcho(true) - expect(coreStubs.CoreMeta.echo).toBeTruthy() + setCommandEcho(true) + expect(CoreMeta.echo).toBeTruthy() - coreStubs.setCommandEcho(false) - expect(coreStubs.CoreMeta.echo).toBeFalsy() + setCommandEcho(false) + expect(CoreMeta.echo).toBeFalsy() }) }) describe('setFailed()', () => { it('Sets the exit code to failure', () => { - jest.spyOn(coreStubs.CoreMeta.colors, 'red').mockImplementation() + jest.spyOn(CoreMeta.colors, 'red').mockImplementation() - coreStubs.setFailed('test') + setFailed('test') - expect(coreStubs.CoreMeta.exitCode).toEqual(ExitCode.Failure) - expect(coreStubs.CoreMeta.exitMessage).toEqual('test') + expect(CoreMeta.exitCode).toEqual(1) + expect(CoreMeta.exitMessage).toEqual('test') }) }) describe('log()', () => { it('Throws an error if startLine and endLine are different when columns are set', () => { expect((): void => - coreStubs.log('group', 'my message', { + log('group', 'my message', { startLine: 1, endLine: 2, startColumn: 1 @@ -288,7 +307,7 @@ describe('Core', () => { ).toThrow() expect((): void => - coreStubs.log('group', 'my message', { + log('group', 'my message', { startLine: 1, endLine: 2, endColumn: 2 @@ -298,23 +317,23 @@ describe('Core', () => { it('Logs only the color when no message is provided', () => { const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'blue') + .spyOn(CoreMeta.colors, 'blue') .mockImplementation() - coreStubs.log('group') + log('group') expect(core_outputSpy).toHaveBeenCalledWith('::group::') }) it('Redacts secrets from the output', () => { const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'blue') + .spyOn(CoreMeta.colors, 'blue') .mockImplementation() // Set a secret to mask - coreStubs.CoreMeta.secrets = ['secret-value-1234'] + CoreMeta.secrets = ['secret-value-1234'] - coreStubs.log('group', 'my secret is secret-value-1234') + log('group', 'my secret is secret-value-1234') expect(core_outputSpy).toHaveBeenCalledWith( '::group::my secret is ****' @@ -323,10 +342,10 @@ describe('Core', () => { it('Includes annotations in the output', () => { const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'blue') + .spyOn(CoreMeta.colors, 'blue') .mockImplementation() - coreStubs.log('group', 'my message', { + log('group', 'my message', { title: 'my title', file: 'my-file.txt' }) @@ -338,10 +357,10 @@ describe('Core', () => { it('Defaults the endLine property to startLine', () => { const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'white') + .spyOn(CoreMeta.colors, 'white') .mockImplementation() - coreStubs.log('info', 'my message', { + log('info', 'my message', { startLine: 1 }) @@ -352,10 +371,10 @@ describe('Core', () => { it('Defaults the endColumn property to startColumn', () => { const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'white') + .spyOn(CoreMeta.colors, 'white') .mockImplementation() - coreStubs.log('info', 'my message', { + log('info', 'my message', { startColumn: 1 }) @@ -367,49 +386,61 @@ describe('Core', () => { describe('isDebug()', () => { it('Returns the step debug setting', () => { - coreStubs.CoreMeta.stepDebug = true - expect(coreStubs.isDebug()).toBeTruthy() + CoreMeta.stepDebug = true + expect(isDebug()).toBeTruthy() - coreStubs.CoreMeta.stepDebug = false - expect(coreStubs.isDebug()).toBeFalsy() + CoreMeta.stepDebug = false + expect(isDebug()).toBeFalsy() }) }) describe('debug()', () => { it('Logs to the console if debug logging is enabled', () => { // Enable step debug logging - coreStubs.CoreMeta.stepDebug = true + CoreMeta.stepDebug = true const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'gray') + .spyOn(CoreMeta.colors, 'gray') .mockImplementation() - coreStubs.debug('test') + debug('test') expect(core_outputSpy).toHaveBeenCalledWith('::debug::test') }) it('Does not log to the console if debug logging is disabled', () => { // Disable step debug logging - coreStubs.CoreMeta.stepDebug = false + CoreMeta.stepDebug = false const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'gray') + .spyOn(CoreMeta.colors, 'gray') .mockImplementation() - coreStubs.debug('test') + debug('test') expect(core_outputSpy).not.toHaveBeenCalled() }) }) + describe('error()', () => { + it('Logs to the console', () => { + const core_outputSpy: jest.SpyInstance = jest + .spyOn(CoreMeta.colors, 'red') + .mockImplementation() + + error('test') + + expect(core_outputSpy).toHaveBeenCalledWith('::error::test') + }) + }) + describe('warning()', () => { it('Logs to the console', () => { const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'yellow') + .spyOn(CoreMeta.colors, 'yellow') .mockImplementation() - coreStubs.warning('test') + warning('test') expect(core_outputSpy).toHaveBeenCalledWith('::warning::test') }) @@ -418,10 +449,10 @@ describe('Core', () => { describe('notice()', () => { it('Logs to the console', () => { const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'magenta') + .spyOn(CoreMeta.colors, 'magenta') .mockImplementation() - coreStubs.notice('test') + notice('test') expect(core_outputSpy).toHaveBeenCalledWith('::notice::test') }) @@ -430,10 +461,10 @@ describe('Core', () => { describe('info()', () => { it('Logs to the console', () => { const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'white') + .spyOn(CoreMeta.colors, 'white') .mockImplementation() - coreStubs.info('test') + info('test') expect(core_outputSpy).toHaveBeenCalledWith('::info::test') }) @@ -442,10 +473,10 @@ describe('Core', () => { describe('startGroup()', () => { it('Logs to the console', () => { const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'blue') + .spyOn(CoreMeta.colors, 'blue') .mockImplementation() - coreStubs.startGroup('test') + startGroup('test') expect(core_outputSpy).toHaveBeenCalledWith('::group::test') }) @@ -454,10 +485,10 @@ describe('Core', () => { describe('endGroup()', () => { it('Logs to the console', () => { const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'blue') + .spyOn(CoreMeta.colors, 'blue') .mockImplementation() - coreStubs.endGroup() + endGroup() expect(core_outputSpy).toHaveBeenCalledWith('::endgroup::') }) @@ -466,19 +497,18 @@ describe('Core', () => { describe('group()', () => { it('Logs grouped messages to the console', async () => { const core_outputSpy: jest.SpyInstance = jest - .spyOn(coreStubs.CoreMeta.colors, 'blue') + .spyOn(CoreMeta.colors, 'blue') .mockImplementation() const core_infoSpy: jest.SpyInstance = jest.spyOn( - coreStubs.CoreMeta.colors, + CoreMeta.colors, 'white' ) - // eslint-disable-next-line @typescript-eslint/require-await - await coreStubs.group('my-group', async () => { - coreStubs.info('test') + await group('my-group', async () => { + info('test') - // Do some async work... + await Promise.resolve() return }) @@ -491,29 +521,29 @@ describe('Core', () => { describe('saveState()', () => { it('Saves string data', () => { - coreStubs.saveState( + saveState( 'string-test', JSON.stringify({ 'my-state': 'test-string-info' }) ) - expect(coreStubs.CoreMeta.state).toMatchObject({ + expect(CoreMeta.state).toMatchObject({ 'string-test': '{"my-state":"test-string-info"}' }) }) it('Saves JSON data', () => { - coreStubs.saveState('json-test', { 'my-state': 'test-json-info' }) + saveState('json-test', { 'my-state': 'test-json-info' }) - expect(coreStubs.CoreMeta.state).toMatchObject({ + expect(CoreMeta.state).toMatchObject({ 'json-test': '{"my-state":"test-json-info"}' }) }) it('Saves null and undefined as empty strings', () => { - coreStubs.saveState('undefined-test', undefined) - coreStubs.saveState('null-test', null) + saveState('undefined-test', undefined) + saveState('null-test', null) - expect(coreStubs.CoreMeta.state).toMatchObject({ + expect(CoreMeta.state).toMatchObject({ 'undefined-test': '', 'null-test': '' }) @@ -522,21 +552,21 @@ describe('Core', () => { describe('getState()', () => { it('Gets the state from the environment', () => { - coreStubs.CoreMeta.state = { + CoreMeta.state = { test: '{"my-state":"test-info"}' } - expect(coreStubs.getState('test')).toEqual('{"my-state":"test-info"}') + expect(getState('test')).toEqual('{"my-state":"test-info"}') }) it('Returns an empty string for values not in the state', () => { - expect(coreStubs.getState('nonexistent-test')).toEqual('') + expect(getState('nonexistent-test')).toEqual('') }) }) describe('getIDToken()', () => { it('Throws an error', async () => { - await expect(coreStubs.getIDToken()).rejects.toThrow('Not implemented') + await expect(getIDToken()).rejects.toThrow('Not implemented') }) }) }) diff --git a/__tests__/stubs/env-stubs.test.ts b/__tests__/stubs/env-stubs.test.ts index 298f90b..c7a3493 100644 --- a/__tests__/stubs/env-stubs.test.ts +++ b/__tests__/stubs/env-stubs.test.ts @@ -1,5 +1,5 @@ -import * as coreStubs from '../../src/stubs/core-stubs' -import * as envStubs from '../../src/stubs/env-stubs' +import { ResetCoreMetadata } from '../../src/stubs/core-stubs' +import { EnvMeta, ResetEnvMetadata } from '../../src/stubs/env-stubs' import type { EnvMetadata } from '../../src/types' /** Empty EnvMetadata Object */ @@ -25,8 +25,8 @@ describe('Env', () => { beforeEach(() => { // Reset metadata - envStubs.ResetEnvMetadata() - coreStubs.ResetCoreMetadata() + ResetEnvMetadata() + ResetCoreMetadata() }) afterEach(() => { @@ -37,22 +37,22 @@ describe('Env', () => { describe('EnvMeta', () => { it('Tracks updates to the environment metadata', () => { // Initial state should be empty - expect(envStubs.EnvMeta).toMatchObject(empty) + expect(EnvMeta).toMatchObject(empty) // Update the metadata - envStubs.EnvMeta.actionFile = 'action.yml' - envStubs.EnvMeta.actionPath = '/some/path' - envStubs.EnvMeta.entrypoint = 'index.ts' - envStubs.EnvMeta.env = { TEST: 'test' } - envStubs.EnvMeta.envBackup = { TEST: 'testBackup' } - envStubs.EnvMeta.envFile = '.env' - envStubs.EnvMeta.inputs = { input: { description: 'test input' } } - envStubs.EnvMeta.outputs = { output: { description: 'test output' } } - envStubs.EnvMeta.path = '/usr/bin' - envStubs.EnvMeta.pathBackup = '/usr/bin/backup' + EnvMeta.actionFile = 'action.yml' + EnvMeta.actionPath = '/some/path' + EnvMeta.entrypoint = 'index.ts' + EnvMeta.env = { TEST: 'test' } + EnvMeta.envBackup = { TEST: 'testBackup' } + EnvMeta.envFile = '.env' + EnvMeta.inputs = { input: { description: 'test input' } } + EnvMeta.outputs = { output: { description: 'test output' } } + EnvMeta.path = '/usr/bin' + EnvMeta.pathBackup = '/usr/bin/backup' // Verify the updated metadata - expect(envStubs.EnvMeta).toMatchObject({ + expect(EnvMeta).toMatchObject({ actionFile: 'action.yml', actionPath: '/some/path', entrypoint: 'index.ts', @@ -66,10 +66,10 @@ describe('Env', () => { }) // Reset the metadata - envStubs.ResetEnvMetadata() + ResetEnvMetadata() // Verify the reset metadata - expect(envStubs.EnvMeta).toMatchObject(empty) + expect(EnvMeta).toMatchObject(empty) }) }) }) diff --git a/__tests__/utils/checks.test.ts b/__tests__/utils/checks.test.ts deleted file mode 100644 index 4e59bb8..0000000 --- a/__tests__/utils/checks.test.ts +++ /dev/null @@ -1,48 +0,0 @@ -import * as coreStubs from '../../src/stubs/core-stubs' -import * as envStubs from '../../src/stubs/env-stubs' -import * as checks from '../../src/utils/checks' - -describe('Checks', () => { - beforeAll(() => { - // Prevent output during tests - jest.spyOn(console, 'log').mockImplementation() - jest.spyOn(console, 'table').mockImplementation() - }) - - beforeEach(() => { - // Reset metadata - envStubs.ResetEnvMetadata() - coreStubs.ResetCoreMetadata() - }) - - afterEach(() => { - // Reset all spies - jest.resetAllMocks() - }) - - describe('checkActionPath()', () => { - it('Throws if the path is not a directory', () => { - expect(() => checks.checkActionPath('package.json')).toThrow() - }) - - it('Throws if the path does not exist', () => { - expect(() => checks.checkActionPath('test/path/does/not/exist')).toThrow() - }) - - it('Throws if the path does not contain an action.yml file', () => { - expect(() => checks.checkActionPath('./__fixtures__')).toThrow() - }) - }) - - describe('checkEntryPoint()', () => { - it('Throws if the entrypoint does not exist', () => { - expect(() => checks.checkEntryPoint('index.js')).toThrow() - }) - }) - - describe('checkEnvFile()', () => { - it('Throws if the env file does not exist', () => { - expect(() => checks.checkEnvFile('test.env')).toThrow() - }) - }) -}) diff --git a/__tests__/utils/output.test.ts b/__tests__/utils/output.test.ts index f4bb911..a5db17f 100644 --- a/__tests__/utils/output.test.ts +++ b/__tests__/utils/output.test.ts @@ -1,6 +1,6 @@ -import * as coreStubs from '../../src/stubs/core-stubs' -import * as envStubs from '../../src/stubs/env-stubs' -import * as output from '../../src/utils/output' +import { ResetCoreMetadata } from '../../src/stubs/core-stubs' +import { ResetEnvMetadata } from '../../src/stubs/env-stubs' +import { printTitle } from '../../src/utils/output' let console_logSpy: jest.SpyInstance @@ -13,8 +13,8 @@ describe('Output', () => { beforeEach(() => { // Reset metadata - envStubs.ResetEnvMetadata() - coreStubs.ResetCoreMetadata() + ResetEnvMetadata() + ResetCoreMetadata() }) afterEach(() => { @@ -24,7 +24,7 @@ describe('Output', () => { describe('printTitle()', () => { it('Prints the correct number of (=) signs', () => { - output.printTitle(console.log, 'Test') + printTitle(console.log, 'Test') expect(console_logSpy).toHaveBeenCalledTimes(3) expect(console_logSpy).toHaveBeenNthCalledWith(1, '='.repeat(80)) From 2c0a920ace9d0a7847b950f40fd0cbc58b4eba49 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 11:56:43 -0500 Subject: [PATCH 08/32] Switch to tsx --- src/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 0ffa5b4..f199a51 100755 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,4 @@ -#!/usr/bin/env ts-node - +#!/usr/bin/env tsx import type { Command } from 'commander' import { textSync } from 'figlet' import { makeProgram } from './command' From 421d4b3f58a6d632183fe6fa7684facf097d9f4a Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 11:57:00 -0500 Subject: [PATCH 09/32] Add docstring --- src/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/index.ts b/src/index.ts index f199a51..7a716e5 100755 --- a/src/index.ts +++ b/src/index.ts @@ -3,6 +3,11 @@ import type { Command } from 'commander' import { textSync } from 'figlet' import { makeProgram } from './command' +/** + * Runs the CLI program + * + * @returns A promise that resolves when the program is finished + */ export async function run(): Promise { const chalk = (await import('chalk')).default From 2418f5f0f36760b90188f594a7762720e0a9f7fa Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 11:57:10 -0500 Subject: [PATCH 10/32] Switch to async call --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 7a716e5..17c3afc 100755 --- a/src/index.ts +++ b/src/index.ts @@ -15,7 +15,7 @@ export async function run(): Promise { console.log(chalk.blue(textSync('Action Debugger'))) // Run the program - const program: Command = makeProgram() + const program: Command = await makeProgram() program.parse() } From a5b684bc38ad1d6e38ec8a0c29773f830a200a2e Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 12:15:02 -0500 Subject: [PATCH 11/32] Clarify types --- src/types.ts | 181 +++++++++++++++++++++++---------------------------- 1 file changed, 82 insertions(+), 99 deletions(-) diff --git a/src/types.ts b/src/types.ts index 66c208d..60c531d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,152 +1,135 @@ -import { ExitCode } from './enums' - -/** - * Environment metadata - */ +/** Environment Metadata */ export type EnvMetadata = { + /** Path to the `action.yml` file */ actionFile: string + + /** Path to the action directory */ actionPath: string + + /** Environment variables */ env: { [key: string]: string | undefined TZ?: string | undefined } + + /** Backup of environment variables prior to action invocation */ envBackup: { [key: string]: string | undefined TZ?: string | undefined } + + /** Path to the `.env` file */ envFile: string + + /** System path */ path: string + + /** Backup of system path prior to action invocation */ pathBackup: string | undefined + + /** Inputs defined in `action.yml` */ inputs: { [key: string]: Input } + + /** Outputs defined in `action.yml` */ outputs: { [key: string]: Output } + + /** Pre-transpilation entrypoint for the action (e.g. `src/index.ts`) */ entrypoint: string } -/** - * Metadata for `@actions/core` - */ +/** Metadata for `@actions/core` */ export type CoreMetadata = { - exitCode: ExitCode + /** Exit code (0 = success, 1 = failure) */ + exitCode: 0 | 1 + + /** Exit message (empty if success) */ exitMessage: string + + /** Outputs set during action invocation */ outputs: { [key: string]: string } + + /** Secrets registered during action invocation */ secrets: string[] + + /** Actions step debug setting */ stepDebug: boolean + + /** Command echo setting */ echo: boolean + + /** Current action state */ state: { [key: string]: string } + + /** + * Colors used to send output to the console + * + * This is not part of `@actions/core` but is included here for convenience + * when calling related functions. + */ colors: { [key: string]: (message: string) => void } } -/** - * Return value for the loadAction function - */ +/** Properties of an `action.yml` */ export type Action = { + /** Name of the action */ + name: string + + /** Author of the action */ + author?: string + + /** Description of the action */ + description: string + + /** Inputs defined in the action */ inputs: Record + + /** Outputs defined in the action */ outputs: Record + + /** How the action is invoked */ + runs: Runs } -/** - * A GitHub Actions input - */ +/** Input properties of an `action.yml` */ export type Input = { + /** Description of the input */ description: string + + /** Whether the input is required */ required?: boolean + + /** Default value of the input */ default?: string + + /** Deprecation message for the input */ deprecationMessage?: string } -/** - * A GitHub Actions output - */ +/** Output properties of an `action.yml` */ export type Output = { + /** Description of the output */ description: string } -//----------------------------------------------------------------------- -// @actions/core -//----------------------------------------------------------------------- - -/** - * Optional properties that can be sent with annotation commands (notice, error, and warning) - * See: https://docs.github.com/en/rest/reference/checks#create-a-check-run for more information about annotations. - */ -export type AnnotationProperties = { - /** A title for the annotation. */ - title?: string - - /** The path of the file for which the annotation should be created. */ - file?: string - - /** The start line for the annotation. */ - startLine?: number - - /** The end line for the annotation. Defaults to `startLine` when `startLine` is provided. */ - endLine?: number - - /** The start column for the annotation. Cannot be sent when `startLine` and `endLine` are different values. */ - startColumn?: number - - /** - * The end column for the annotation. Cannot be sent when `startLine` and `endLine` are different values. - * Defaults to `startColumn` when `startColumn` is provided. - */ - endColumn?: number -} +/** How the action is invoked */ +export type Runs = { + /** Type of event */ + using: string -/** - * Interface for getInput options - */ -export type InputOptions = { - /** Optional. Whether the input is required. If required and not present, will throw. Defaults to false */ - required?: boolean + /** The entrypoint */ + main: string - /** Optional. Whether leading/trailing whitespace will be trimmed for the input. Defaults to true */ - trimWhitespace?: boolean -} + /** Script to run at the start of a job (before `main`) */ + pre?: string -//----------------------------------------------------------------------- -// @actions/github -//----------------------------------------------------------------------- + /** Conditions for the `pre` script to run */ + 'pre-if'?: () => boolean -export type PayloadRepository = { - [key: string]: any - full_name?: string - name: string - owner: { - [key: string]: any - login: string - name?: string - } - html_url?: string -} + /** Script to run at the end of a job (after `main`) */ + post?: string -export type WebhookPayload = { - [key: string]: any - repository?: PayloadRepository - issue?: { - [key: string]: any - number: number - html_url?: string - body?: string - } - pull_request?: { - [key: string]: any - number: number - html_url?: string - body?: string - } - sender?: { - [key: string]: any - type: string - } - action?: string - installation?: { - id: number - [key: string]: any - } - comment?: { - id: number - [key: string]: any - } + /** Conditions for the `post` script to run */ + 'post-if'?: () => boolean } From 41aa17c83b68889bbfcd1c50fca88b7d3d43a001 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 12:23:40 -0500 Subject: [PATCH 12/32] Rename env to dotenv --- __tests__/command.test.ts | 2 +- __tests__/commands/run.test.ts | 12 ++++++------ __tests__/stubs/env-stubs.test.ts | 6 +++--- src/stubs/env-stubs.ts | 4 ++-- src/types.ts | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/__tests__/command.test.ts b/__tests__/command.test.ts index 9d8f0ca..8767403 100644 --- a/__tests__/command.test.ts +++ b/__tests__/command.test.ts @@ -154,7 +154,7 @@ describe('Commmand', () => { from: 'user' } ) - ).rejects.toThrow('Action path must contain an action.yml file') + ).rejects.toThrow('Path must contain an action.yml file') process_stderrSpy.mockRestore() }) diff --git a/__tests__/commands/run.test.ts b/__tests__/commands/run.test.ts index e49cdb0..7f33e64 100644 --- a/__tests__/commands/run.test.ts +++ b/__tests__/commands/run.test.ts @@ -37,8 +37,8 @@ describe('Command: run', () => { it('Action: success', async () => { EnvMeta.actionFile = `./__fixtures__/typescript/success/action.yml` EnvMeta.actionPath = `./__fixtures__/typescript/success` + EnvMeta.dotenvFile = `./__fixtures__/typescript/success/.env.fixture` EnvMeta.entrypoint = `./__fixtures__/typescript/success/src/index.ts` - EnvMeta.envFile = `./__fixtures__/typescript/success/.env.fixture` await expect(action()).resolves.toBeUndefined() expect(setFailed).not.toHaveBeenCalled() @@ -47,8 +47,8 @@ describe('Command: run', () => { it('Action: failure', async () => { EnvMeta.actionFile = `./__fixtures__/typescript/failure/action.yml` EnvMeta.actionPath = `./__fixtures__/typescript/failure` + EnvMeta.dotenvFile = `./__fixtures__/typescript/failure/.env.fixture` EnvMeta.entrypoint = `./__fixtures__/typescript/failure/src/index.ts` - EnvMeta.envFile = `./__fixtures__/typescript/failure/.env.fixture` await expect(action()).resolves.toBeUndefined() expect(setFailed).toHaveBeenCalledWith('TypeScript Action Failed!') @@ -57,8 +57,8 @@ describe('Command: run', () => { it('Action: no-import', async () => { EnvMeta.actionFile = `./__fixtures__/typescript/no-import/action.yml` EnvMeta.actionPath = `./__fixtures__/typescript/no-import` + EnvMeta.dotenvFile = `./__fixtures__/typescript/no-import/.env.fixture` EnvMeta.entrypoint = `./__fixtures__/typescript/no-import/src/index.ts` - EnvMeta.envFile = `./__fixtures__/typescript/no-import/.env.fixture` await expect(action()).resolves.toBeUndefined() expect(setFailed).not.toHaveBeenCalled() @@ -69,8 +69,8 @@ describe('Command: run', () => { it('Action: success', async () => { EnvMeta.actionFile = `./__fixtures__/javascript/success/action.yml` EnvMeta.actionPath = `./__fixtures__/javascript/success` + EnvMeta.dotenvFile = `./__fixtures__/javascript/success/.env.fixture` EnvMeta.entrypoint = `./__fixtures__/javascript/success/src/index.js` - EnvMeta.envFile = `./__fixtures__/javascript/success/.env.fixture` await expect(action()).resolves.toBeUndefined() expect(setFailed).not.toHaveBeenCalled() @@ -79,8 +79,8 @@ describe('Command: run', () => { it('Action: failure', async () => { EnvMeta.actionFile = `./__fixtures__/javascript/failure/action.yml` EnvMeta.actionPath = `./__fixtures__/javascript/failure` + EnvMeta.dotenvFile = `./__fixtures__/javascript/failure/.env.fixture` EnvMeta.entrypoint = `./__fixtures__/javascript/failure/src/index.js` - EnvMeta.envFile = `./__fixtures__/javascript/failure/.env.fixture` await expect(action()).resolves.toBeUndefined() expect(setFailed).toHaveBeenCalled() @@ -89,8 +89,8 @@ describe('Command: run', () => { it('Action: no-import', async () => { EnvMeta.actionFile = `./__fixtures__/javascript/no-import/action.yml` EnvMeta.actionPath = `./__fixtures__/javascript/no-import` + EnvMeta.dotenvFile = `./__fixtures__/javascript/no-import/.env.fixture` EnvMeta.entrypoint = `./__fixtures__/javascript/no-import/src/index.js` - EnvMeta.envFile = `./__fixtures__/javascript/no-import/.env.fixture` await expect(action()).resolves.toBeUndefined() expect(setFailed).not.toHaveBeenCalled() diff --git a/__tests__/stubs/env-stubs.test.ts b/__tests__/stubs/env-stubs.test.ts index c7a3493..628677e 100644 --- a/__tests__/stubs/env-stubs.test.ts +++ b/__tests__/stubs/env-stubs.test.ts @@ -6,10 +6,10 @@ import type { EnvMetadata } from '../../src/types' const empty: EnvMetadata = { actionFile: '', actionPath: '', + dotenvFile: '', entrypoint: '', env: {}, envBackup: {}, - envFile: '', inputs: {}, outputs: {}, path: '', @@ -42,10 +42,10 @@ describe('Env', () => { // Update the metadata EnvMeta.actionFile = 'action.yml' EnvMeta.actionPath = '/some/path' + EnvMeta.dotenvFile = '.env' EnvMeta.entrypoint = 'index.ts' EnvMeta.env = { TEST: 'test' } EnvMeta.envBackup = { TEST: 'testBackup' } - EnvMeta.envFile = '.env' EnvMeta.inputs = { input: { description: 'test input' } } EnvMeta.outputs = { output: { description: 'test output' } } EnvMeta.path = '/usr/bin' @@ -55,10 +55,10 @@ describe('Env', () => { expect(EnvMeta).toMatchObject({ actionFile: 'action.yml', actionPath: '/some/path', + dotenvFile: '.env', entrypoint: 'index.ts', env: { TEST: 'test' }, envBackup: { TEST: 'testBackup' }, - envFile: '.env', inputs: { input: { description: 'test input' } }, outputs: { output: { description: 'test output' } }, path: '/usr/bin', diff --git a/src/stubs/env-stubs.ts b/src/stubs/env-stubs.ts index 6392c9d..3dbe341 100644 --- a/src/stubs/env-stubs.ts +++ b/src/stubs/env-stubs.ts @@ -6,10 +6,10 @@ import type { EnvMetadata } from '../types' export const EnvMeta: EnvMetadata = { actionFile: '', actionPath: '', + dotenvFile: '', entrypoint: '', env: {}, envBackup: {}, - envFile: '', inputs: {}, outputs: {}, path: '', @@ -22,10 +22,10 @@ export const EnvMeta: EnvMetadata = { export function ResetEnvMetadata(): void { EnvMeta.actionFile = '' EnvMeta.actionPath = '' + EnvMeta.dotenvFile = '' EnvMeta.entrypoint = '' EnvMeta.env = {} EnvMeta.envBackup = {} - EnvMeta.envFile = '' EnvMeta.inputs = {} EnvMeta.outputs = {} EnvMeta.path = '' diff --git a/src/types.ts b/src/types.ts index 60c531d..c4b2c78 100644 --- a/src/types.ts +++ b/src/types.ts @@ -6,6 +6,9 @@ export type EnvMetadata = { /** Path to the action directory */ actionPath: string + /** Path to the `.env` file */ + dotenvFile: string + /** Environment variables */ env: { [key: string]: string | undefined @@ -18,9 +21,6 @@ export type EnvMetadata = { TZ?: string | undefined } - /** Path to the `.env` file */ - envFile: string - /** System path */ path: string From 1b4632f0b46a39c5c7878812113a29b36a51d503 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 12:24:17 -0500 Subject: [PATCH 13/32] Move check functions --- src/command.ts | 93 ++++++++++++++++++++++++++++++++++++++++----- src/utils/checks.ts | 81 --------------------------------------- 2 files changed, 83 insertions(+), 91 deletions(-) delete mode 100644 src/utils/checks.ts diff --git a/src/command.ts b/src/command.ts index fb34fb8..3c802dc 100644 --- a/src/command.ts +++ b/src/command.ts @@ -1,15 +1,88 @@ -import type { Command } from 'commander' -import * as commander from 'commander' -import * as run from './commands/run' -import { checkActionPath, checkEntryPoint, checkEnvFile } from './utils/checks' +import { Command, InvalidArgumentError } from 'commander' +import { action as runAction } from './commands/run' +import { EnvMeta } from './stubs/env-stubs' -export function makeProgram(): Command { - const program: Command = new commander.Command() +export async function makeProgram(): Promise { + const program: Command = new Command() + const fs = await import('fs') + const path = await import('path') + + /** + * Checks if the provided action path is valid + * + * @param value The action path + * @returns The resolved action path + */ + function checkActionPath(value: string): string { + const actionPath: string = path.resolve(value) + + try { + // Confirm the value is a directory + if (!fs.statSync(actionPath).isDirectory()) + throw new InvalidArgumentError('Action path must be a directory') + } catch (err: any) { + /* eslint-disable @typescript-eslint/no-unsafe-member-access */ + if ('code' in err && err.code === 'ENOENT') + throw new InvalidArgumentError('Action path does not exist') + else throw new InvalidArgumentError(err.message as string) + /* eslint-enable @typescript-eslint/no-unsafe-member-access */ + } + + const actionFile: string = path.resolve(actionPath, 'action.yml') + + // Confirm there is an `action.yml` in the directory + if (!fs.existsSync(actionFile)) + throw new InvalidArgumentError('Path must contain an action.yml file') + + // Save the action path and file to environment metadata + EnvMeta.actionPath = actionPath + EnvMeta.actionFile = path.resolve(EnvMeta.actionPath, 'action.yml') + + return path.resolve(value) + } + + /** + * Checks if the provided entrypoint is valid + * + * @param value The entrypoint + * @returns The resolved entrypoint path + */ + function checkEntrypoint(value: string): string { + const entrypoint: string = path.resolve(EnvMeta.actionPath, value) + + // Confirm the entrypoint exists + if (!fs.existsSync(entrypoint)) + throw new InvalidArgumentError('Entrypoint does not exist') + + // Save the action entrypoint to environment metadata + EnvMeta.entrypoint = entrypoint + + return entrypoint + } + + /** + * Checks if the provided dotenv file is valid + * + * @param value The dotenv file path + * @returns The resolved dotenv file path + */ + function checkDotenvFile(value: string): string { + const dotenvFile: string = path.resolve(value) + + // Confirm the dotenv file exists + if (!fs.existsSync(dotenvFile)) + throw new InvalidArgumentError('Environment file does not exist') + + // Save the .env file path to environment metadata + EnvMeta.dotenvFile = dotenvFile + + return dotenvFile + } program .name('local-action') .description('Test a GitHub Action locally') - .version('0.1.0') + .version('1.0.0') program .command('run', { isDefault: true }) @@ -18,11 +91,11 @@ export function makeProgram(): Command { .argument( '', 'Action entrypoint (relative to the action directory)', - checkEntryPoint + checkEntrypoint ) - .argument('', 'Path to the local .env file', checkEnvFile) + .argument('', 'Path to the local .env file', checkDotenvFile) .action(async () => { - await run.action() + await runAction() }) return program diff --git a/src/utils/checks.ts b/src/utils/checks.ts deleted file mode 100644 index 494421b..0000000 --- a/src/utils/checks.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { InvalidArgumentError } from 'commander' -import fs from 'fs' -import path from 'path' -import { EnvMeta } from '../stubs/env-stubs' - -/** - * Checks if the provided action path is valid - * - * @param value The action path - * @returns The resolved action path - */ -export function checkActionPath(value: string): string { - const actionPath: string = path.resolve(value) - - try { - const stat: fs.Stats = fs.statSync(actionPath) - - // Confirm the value is a directory - if (!stat.isDirectory()) - throw new InvalidArgumentError('Action path must be a directory') - } catch (err: any) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - if (err.code === 'ENOENT') - throw new InvalidArgumentError('Action path does not exist') - - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-member-access - throw new InvalidArgumentError(err.message) - } - - const actionFile: string = path.resolve(actionPath, 'action.yml') - - // Confirm there is an `action.yml` in the directory - if (!fs.existsSync(actionFile)) - throw new InvalidArgumentError( - 'Action path must contain an action.yml file' - ) - - // Save the action path and file to environment metadata - EnvMeta.actionPath = actionPath - EnvMeta.actionFile = path.resolve(EnvMeta.actionPath, 'action.yml') - - return path.resolve(value) -} - -/** - * Checks if the provided entrypoint is valid - * - * @param value The entrypoint - * @returns The resolved entrypoint path - */ -export function checkEntryPoint(value: string): string { - const entrypoint: string = path.resolve(EnvMeta.actionPath, value) - - // Confirm the entrypoint exists - if (!fs.existsSync(entrypoint)) - throw new InvalidArgumentError('Entrypoint does not exist') - - // Save the action entrypoint to environment metadata - EnvMeta.entrypoint = entrypoint - - return entrypoint -} - -/** - * Checks if the provided env file is valid - * - * @param value The env file path - * @returns The resolved env file path - */ -export function checkEnvFile(value: string): string { - const envFile: string = path.resolve(value) - - // Confirm the env file exists - if (!fs.existsSync(envFile)) - throw new InvalidArgumentError('Environment file does not exist') - - // Save the .env file path to environment metadata - EnvMeta.envFile = envFile - - return envFile -} From 8d7889496712be9c91f03ba2dce9c150e5415fd1 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 12:28:27 -0500 Subject: [PATCH 14/32] Add function docstring --- src/command.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/command.ts b/src/command.ts index 3c802dc..301ec63 100644 --- a/src/command.ts +++ b/src/command.ts @@ -2,6 +2,11 @@ import { Command, InvalidArgumentError } from 'commander' import { action as runAction } from './commands/run' import { EnvMeta } from './stubs/env-stubs' +/** + * Creates the program for the CLI + * + * @returns A promise that resolves to the program Command object + */ export async function makeProgram(): Promise { const program: Command = new Command() const fs = await import('fs') From bbdceb099a3d9d4742fa83e4b173620f3b295a7e Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 12:28:48 -0500 Subject: [PATCH 15/32] Add docstrings and correct types --- src/utils/output.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/utils/output.ts b/src/utils/output.ts index 60fe629..4be12bc 100644 --- a/src/utils/output.ts +++ b/src/utils/output.ts @@ -1,12 +1,20 @@ +/** Default print width for titles */ export const printWidth: number = 80 -export function printTitle(color: any, title: string): void { +/** + * Prints a title with a specific color + * + * @param color The color function to use + * @param title The title text to print + * @returns void + */ +export function printTitle( + color: (message: string) => void, + title: string +): void { const spaces: string = ' '.repeat((80 - title.length) / 2) - // eslint-disable-next-line @typescript-eslint/no-unsafe-call color('='.repeat(printWidth)) - // eslint-disable-next-line @typescript-eslint/no-unsafe-call color(`${spaces}${title}`) - // eslint-disable-next-line @typescript-eslint/no-unsafe-call color('='.repeat(printWidth)) } From 19f89278d482e7a3479fc4ea116bfd78dde26dfa Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 12:59:03 -0500 Subject: [PATCH 16/32] Add types --- src/enums.ts | 11 ----------- src/types.ts | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 11 deletions(-) delete mode 100644 src/enums.ts diff --git a/src/enums.ts b/src/enums.ts deleted file mode 100644 index caa5c91..0000000 --- a/src/enums.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * The code to exit an action - */ -// eslint-disable-next-line no-shadow -export enum ExitCode { - /** A code indicating that the action was successful */ - Success = 0, - - /** A code indicating that the action was a failure */ - Failure = 1 -} diff --git a/src/types.ts b/src/types.ts index c4b2c78..ad2458d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -133,3 +133,54 @@ export type Runs = { /** Conditions for the `post` script to run */ 'post-if'?: () => boolean } + +/** + * Optional properties that can be sent with annotation commands (notice, error, + * and warning). + */ +export type AnnotationProperties = { + /** A title for the annotation. */ + title?: string + + /** The path of the file for which the annotation should be created. */ + file?: string + + /** The start line for the annotation. */ + startLine?: number + + /** + * The end line for the annotation. Defaults to `startLine` when `startLine` + * is provided. + */ + endLine?: number + + /** + * The start column for the annotation. Cannot be sent when `startLine` and + * `endLine` are different values. + */ + startColumn?: number + + /** + * The end column for the annotation. Cannot be sent when `startLine` and + * `endLine` are different values. Defaults to `startColumn` when + * `startColumn` is provided. + */ + endColumn?: number +} + +/** + * Options for getInput. + */ +export type InputOptions = { + /** + * Optional. Whether the input is required. If required and not present, + * will throw. Defaults to false. + */ + required?: boolean + + /** + * Optional. Whether leading/trailing whitespace will be trimmed for the + * input. Defaults to true. + */ + trimWhitespace?: boolean +} From cc0b9faf5fb4a3bf9412a12a393c749450c42099 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 12:59:30 -0500 Subject: [PATCH 17/32] Documentation --- src/stubs/env-stubs.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/stubs/env-stubs.ts b/src/stubs/env-stubs.ts index 3dbe341..d937325 100644 --- a/src/stubs/env-stubs.ts +++ b/src/stubs/env-stubs.ts @@ -18,6 +18,8 @@ export const EnvMeta: EnvMetadata = { /** * Resets the environment metadata + * + * @returns void */ export function ResetEnvMetadata(): void { EnvMeta.actionFile = '' From 90d6b0d57935109cb184b136ce16782c6d88f7a0 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:00:37 -0500 Subject: [PATCH 18/32] Additional comments and typing --- src/commands/run.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/commands/run.ts b/src/commands/run.ts index b2b900b..21abec2 100644 --- a/src/commands/run.ts +++ b/src/commands/run.ts @@ -1,8 +1,5 @@ import { config } from 'dotenv' -import fs from 'fs' -import path from 'path' import proxyquire from 'proxyquire' -import YAML from 'yaml' import { CoreMeta, addPath, @@ -34,6 +31,9 @@ import { printTitle } from '../utils/output' export async function action(): Promise { const { Chalk } = await import('chalk') const chalk = new Chalk() + const fs = await import('fs') + const path = await import('path') + const YAML = await import('yaml') // Back up the environment EnvMeta.envBackup = { ...process.env } @@ -72,23 +72,22 @@ export async function action(): Promise { }, { Field: 'Environment File', - Value: EnvMeta.envFile + Value: EnvMeta.dotenvFile } ]) console.log() // Load the environment file - // TODO: Load this into EnvMeta directly? What about secrets... - config({ path: path.resolve(process.cwd(), EnvMeta.envFile) }) + // @todo Load this into EnvMeta directly? What about secrets... + config({ path: path.resolve(process.cwd(), EnvMeta.dotenvFile) }) // Load step debug setting CoreMeta.stepDebug = process.env.ACTIONS_STEP_DEBUG === 'true' // Read the action.yml file and parse the expected inputs/outputs - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const actionYaml: Action = YAML.parse( - fs.readFileSync(EnvMeta.actionFile, 'utf8') - ) + fs.readFileSync(EnvMeta.actionFile, { encoding: 'utf8', flag: 'r' }) + ) as Action EnvMeta.inputs = actionYaml.inputs || {} EnvMeta.outputs = actionYaml.outputs || {} From 43faf241df68f4914eb6a6a0a43b19e81bfffb37 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:00:53 -0500 Subject: [PATCH 19/32] Additional comments and typing --- src/stubs/core-stubs.ts | 129 ++++++++++++++++++++++++++++++---------- 1 file changed, 99 insertions(+), 30 deletions(-) diff --git a/src/stubs/core-stubs.ts b/src/stubs/core-stubs.ts index 9948e5c..cd7f2eb 100644 --- a/src/stubs/core-stubs.ts +++ b/src/stubs/core-stubs.ts @@ -1,18 +1,11 @@ -import * as path from 'path' -import { ExitCode } from '../enums' import type { AnnotationProperties, CoreMetadata, InputOptions } from '../types' import { EnvMeta } from './env-stubs' /** - * Metadata for the core module stub. - * - * @remarks - * This is a stub for the core module, which is used to set and get environment - * variables, inputs, and outputs, as well as other core - * functionality. + * Metadata for `@actions/core` */ export const CoreMeta: CoreMetadata = { - exitCode: ExitCode.Success, + exitCode: 0, exitMessage: '', outputs: {}, secrets: [], @@ -32,10 +25,12 @@ export const CoreMeta: CoreMetadata = { } /** - * Resets the core metadata to its default values. + * Resets the core metadata + * + * @returns void */ export function ResetCoreMetadata(): void { - CoreMeta.exitCode = ExitCode.Success + CoreMeta.exitCode = 0 CoreMeta.exitMessage = '' CoreMeta.outputs = {} CoreMeta.secrets = [] @@ -53,8 +48,20 @@ export function ResetCoreMetadata(): void { * * @param name The name of the environment variable * @param value The value of the environment variable + * @returns void */ -export function exportVariable(name: string, value: string): void { +export function exportVariable( + name: string, + value: string | undefined | null | object +): void { + // Convert the value to a string + value = + value === undefined || value === null + ? '' + : typeof value === 'string' || value instanceof String + ? value.toString() + : JSON.stringify(value) + EnvMeta.env[name] = value process.env[name] = value } @@ -63,6 +70,7 @@ export function exportVariable(name: string, value: string): void { * Register a secret to mask it in logs * * @param secret The value to register + * @returns void */ export function setSecret(secret: string): void { CoreMeta.secrets.push(secret) @@ -72,14 +80,19 @@ export function setSecret(secret: string): void { * Prepends to the PATH * * @param inputPath The path to prepend to the PATH + * @returns void */ export function addPath(inputPath: string): void { + // Importing with require is necessary to avoid async/await. + // eslint-disable-next-line @typescript-eslint/no-var-requires + const path = require('path') as typeof import('path') + EnvMeta.path = `${inputPath}${path.delimiter}${process.env.PATH}` process.env.PATH = EnvMeta.path } /** - * Gets the action inputs from environment variables + * Gets the action input from the environment variables * * @param name The name of the input * @param options The options for the input @@ -170,20 +183,23 @@ export function getBooleanInput(name: string, options?: InputOptions): boolean { * * @param name The name of the output * @param value The value of the output + * @returns void */ export function setOutput(name: string, value: string): void { CoreMeta.outputs[name] = value - // This command is deprecated...using here to have a meaningful log output + // This command is deprecated...it is being used here so there's meaningful + // log output for debugging purposes. CoreMeta.colors.cyan(`::set-output name=${name}::${value}`) } /** * Enables or disables the echoing of commands into stdout. * - * For local testing purposes, this currently does nothing. + * @todo Currently this does nothing. * * @param enabled Whether to enable command echoing + * @returns void */ export function setCommandEcho(enabled: boolean): void { CoreMeta.echo = enabled @@ -197,9 +213,10 @@ export function setCommandEcho(enabled: boolean): void { * Set the action status to failed * * @param message The message to log + * @returns void */ export function setFailed(message: string | Error): void { - CoreMeta.exitCode = ExitCode.Failure + CoreMeta.exitCode = 1 CoreMeta.exitMessage = message.toString() error(message.toString()) @@ -212,17 +229,25 @@ export function setFailed(message: string | Error): void { /** * Logs a message with optional annotations * - * This is used internally by the other logging functions, and should not be + * This is used internally by the other logging functions. It doesn't need to be * called directly. * * @param type The type of log message * @param message The message to log * @param properties The annotation properties + * @returns void */ export function log( type: string, message?: string, - properties: AnnotationProperties = {} + properties: AnnotationProperties = { + title: undefined, + file: undefined, + startLine: undefined, + endLine: undefined, + startColumn: undefined, + endColumn: undefined + } ): void { const params: string[] = [] @@ -287,9 +312,10 @@ export function isDebug(): boolean { /** * Logs a debug message to the console * - * ::debug::{message} + * E.g. `::debug::{message}` * * @param message The message to log + * @returns void */ export function debug(message: string): void { // Only log debug messages if the `stepDebug` flag is set @@ -301,14 +327,22 @@ export function debug(message: string): void { /** * Logs an error message to the console * - * ::error file={name},line={line},endLine={endLine},title={title}::{message} + * E.g. `::error file={name},line={line},endLine={endLine},title={title}::{message}` * * @param message The message to log * @param properties The annotation properties + * @returns void */ export function error( message: string, - properties: AnnotationProperties = {} + properties: AnnotationProperties = { + title: undefined, + file: undefined, + startLine: undefined, + endLine: undefined, + startColumn: undefined, + endColumn: undefined + } ): void { log('error', message, properties) } @@ -316,14 +350,22 @@ export function error( /** * Logs a warning message to the console * - * ::warning file={name},line={line},endLine={endLine},title={title}::{message} + * E.g. `::warning file={name},line={line},endLine={endLine},title={title}::{message}` * * @param message The message to log * @param properties The annotation properties + * @returns void */ export function warning( message: string, - properties: AnnotationProperties = {} + properties: AnnotationProperties = { + title: undefined, + file: undefined, + startLine: undefined, + endLine: undefined, + startColumn: undefined, + endColumn: undefined + } ): void { log('warning', message, properties) } @@ -331,14 +373,22 @@ export function warning( /** * Logs a notice message to the console * - * ::notice file={name},line={line},endLine={endLine},title={title}::{message} + * E.g. `::notice file={name},line={line},endLine={endLine},title={title}::{message}` * * @param message The message to log * @param properties The annotation properties + * @returns void */ export function notice( message: string, - properties: AnnotationProperties = {} + properties: AnnotationProperties = { + title: undefined, + file: undefined, + startLine: undefined, + endLine: undefined, + startColumn: undefined, + endColumn: undefined + } ): void { log('notice', message, properties) } @@ -346,9 +396,10 @@ export function notice( /** * Logs an info message to the console * - * ::info::{message} + * E.g. `::info::{message}` * * @param message The message to log + * @returns void */ export function info(message: string): void { log('info', message) @@ -358,18 +409,34 @@ export function info(message: string): void { * Starts a group of log lines * * @param title The title of the group + * @returns void */ export function startGroup(title: string): void { - log('group', title) + log('group', title, { + title: undefined, + file: undefined, + startLine: undefined, + endLine: undefined, + startColumn: undefined, + endColumn: undefined + }) } /** * Ends a group of log lines * * @param title The title of the group + * @returns void */ export function endGroup(): void { - log('endgroup') + log('endgroup', undefined, { + title: undefined, + file: undefined, + startLine: undefined, + endLine: undefined, + startColumn: undefined, + endColumn: undefined + }) } /** @@ -407,6 +474,7 @@ export async function group(name: string, fn: () => Promise): Promise { * * @param name The name of the state * @param value The value of the state + * @returns void */ export function saveState(name: string, value: any): void { if (value === undefined || value === null) CoreMeta.state[name] = '' @@ -436,7 +504,8 @@ export function getState(name: string): string { * @param aud The audience for the token * @returns A promise that resolves the OIDC token */ -// eslint-disable-next-line @typescript-eslint/no-unused-vars,@typescript-eslint/require-await export async function getIDToken(aud?: string): Promise { - throw new Error('Not implemented') + await Promise.reject(new Error('Not implemented')) + /* istanbul ignore next */ + return aud } From 56e3f1b74cea759d324b59b4b7fe3ab06d132f0a Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:05:33 -0500 Subject: [PATCH 20/32] Add TSConfig bootstrap --- __tests__/bootstrap.test.ts | 116 ++++++++++++++++++++++++++++++++++++ src/bootstrap.js | 44 ++++++++++++++ 2 files changed, 160 insertions(+) create mode 100644 __tests__/bootstrap.test.ts create mode 100644 src/bootstrap.js diff --git a/__tests__/bootstrap.test.ts b/__tests__/bootstrap.test.ts new file mode 100644 index 0000000..a20edf3 --- /dev/null +++ b/__tests__/bootstrap.test.ts @@ -0,0 +1,116 @@ +import fs from 'fs' +import { ResetCoreMetadata } from '../src/stubs/core-stubs' +import { ResetEnvMetadata } from '../src/stubs/env-stubs' + +let envBackup: { [key: string]: string | undefined } = process.env + +let fs_existsSyncSpy: jest.SpyInstance +let fs_readFileSyncSpy: jest.SpyInstance + +/** Example `tsconfig.json` with paths set. */ +const tsConfigWithPaths = { + compilerOptions: { + baseUrl: '.', + paths: { + 'fixtures/*': ['./__fixtures__/*'], + 'mocks/*': ['./__mocks__/*'], + 'tests/*': ['./__tests__/*'], + main: ['./src/main'], + types: ['./src/types'] + } + } +} + +/** Example `tsconfig.json` without paths set. */ +const tsConfigWithoutPaths = { + compilerOptions: { + baseUrl: '.' + } +} + +describe('Bootstrap', () => { + beforeAll(() => { + fs_existsSyncSpy = jest.spyOn(fs, 'existsSync') + fs_readFileSyncSpy = jest.spyOn(fs, 'readFileSync') + }) + + beforeEach(() => { + // Reset metadata + ResetEnvMetadata() + ResetCoreMetadata() + + // Back up environment variables + envBackup = process.env + }) + + afterEach(() => { + // Reset all spies + jest.resetAllMocks() + + // Reset module imports + jest.resetModules() + + // Restore environment variables + process.env = envBackup + }) + + it('Does nothing if no target action path is provided', async () => { + process.env.TARGET_ACTION_PATH = '' + + await import('../src/bootstrap') + + expect(fs_existsSyncSpy).not.toHaveBeenCalledWith( + `${process.env.TARGET_ACTION_PATH}/tsconfig.json` + ) + expect(fs_readFileSyncSpy).not.toHaveBeenCalledWith( + `${process.env.TARGET_ACTION_PATH}/tsconfig.json` + ) + }) + + it('Does nothing if the target action path does not exist', async () => { + process.env.TARGET_ACTION_PATH = 'non-existent-path' + + await import('../src/bootstrap') + + expect(fs_existsSyncSpy).toHaveBeenCalledWith( + `${process.env.TARGET_ACTION_PATH}/tsconfig.json` + ) + expect(fs_readFileSyncSpy).not.toHaveBeenCalledWith( + `${process.env.TARGET_ACTION_PATH}/tsconfig.json` + ) + }) + + it('Registers additional paths', async () => { + process.env.TARGET_ACTION_PATH = 'non-existent-path' + + fs_existsSyncSpy.mockReturnValueOnce(true) + fs_readFileSyncSpy.mockReturnValueOnce(JSON.stringify(tsConfigWithPaths)) + + await import('../src/bootstrap') + + expect(fs_existsSyncSpy).toHaveBeenCalledWith( + `${process.env.TARGET_ACTION_PATH}/tsconfig.json` + ) + expect(fs_readFileSyncSpy).toHaveBeenCalledWith( + `${process.env.TARGET_ACTION_PATH}/tsconfig.json`, + 'utf-8' + ) + }) + + it('Defaults to an empty paths object', async () => { + process.env.TARGET_ACTION_PATH = 'non-existent-path' + + fs_existsSyncSpy.mockReturnValueOnce(true) + fs_readFileSyncSpy.mockReturnValueOnce(JSON.stringify(tsConfigWithoutPaths)) + + await import('../src/bootstrap') + + expect(fs_existsSyncSpy).toHaveBeenCalledWith( + `${process.env.TARGET_ACTION_PATH}/tsconfig.json` + ) + expect(fs_readFileSyncSpy).toHaveBeenCalledWith( + `${process.env.TARGET_ACTION_PATH}/tsconfig.json`, + 'utf-8' + ) + }) +}) diff --git a/src/bootstrap.js b/src/bootstrap.js new file mode 100644 index 0000000..4b2e77f --- /dev/null +++ b/src/bootstrap.js @@ -0,0 +1,44 @@ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-var-requires */ + +/** + * This file is used to bootstrap the environment for the action. + * + * It is added as a --require option to `npx tsx`. The purpose of this file is + * to handle TypeScript configuration options such as path mapping. For example, + * if an action repository makes use of TypeScript paths for module resolution, + * this bootstrap script will parse them and register them so that modules can + * be resolved correctly. + */ +if (process.env.TARGET_ACTION_PATH && process.env.TARGET_ACTION_PATH !== '') { + const fs = require('fs') + + // Check if the action has a `tsconfig.json` file. + if (fs.existsSync(`${process.env.TARGET_ACTION_PATH}/tsconfig.json`)) { + const tsConfigPaths = require('tsconfig-paths') + + // Load the `tsconfig.json` from the action directory. + const actionTsConfig = JSON.parse( + fs.readFileSync( + `${process.env.TARGET_ACTION_PATH}/tsconfig.json`, + 'utf-8' + ) + ) + + // Load the current `tsconfig.json` from the root of this directory. + tsConfigPaths.loadConfig(__dirname) + + // Get the paths from the action's `tsconfig.json`, if any. + const paths = actionTsConfig.compilerOptions.paths ?? {} + + // Add any path mappings from the imported action. Replace the base URL with + // the target action path. + // @todo Should this take into account the previous `baseUrl` value? + tsConfigPaths.register({ + baseUrl: process.env.TARGET_ACTION_PATH, + paths, + addMatchAll: true + }) + } +} From dbb7cac2bda853322b1be191a9845fc0be01076e Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:05:59 -0500 Subject: [PATCH 21/32] Add basic local-action script --- bin/local-action | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100755 bin/local-action diff --git a/bin/local-action b/bin/local-action new file mode 100755 index 0000000..042780c --- /dev/null +++ b/bin/local-action @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +# This script is used to run the local action. It sets the NODE_OPTIONS +# environment variable to require the bootstrap file, which sets up the +# TypeScript environment for the action. + +# Set the first argument (local path to action) as an env var. This is used +# in the bootstrap file to check for a `tsconfig.json`. +export TARGET_ACTION_PATH="$1" + +# Set the NODE_OPTIONS environment variable to require the bootstrap file +NODE_OPTIONS='--require "./src/bootstrap.js"' npx tsx "./src/index.ts" "$@" \ No newline at end of file From 1e2bfbb0130be717258513ac42d7b5e76d628ca4 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:06:20 -0500 Subject: [PATCH 22/32] Direct local-action to new script --- package-lock.json | 2692 +++++++++++++++++++++++++++++++-------------- package.json | 16 +- 2 files changed, 1895 insertions(+), 813 deletions(-) diff --git a/package-lock.json b/package-lock.json index 91cd7dd..0f0e96a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,34 +1,36 @@ { "name": "@github/local-action", - "version": "0.2.0", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@github/local-action", - "version": "0.2.0", + "version": "1.0.0", "license": "MIT", "dependencies": { "@actions/core": "^1.10.1", "@octokit/core": "^5.1.0", "chalk": "^5.3.0", - "commander": "^11.1.0", + "commander": "^12.0.0", "dotenv": "^16.4.1", "figlet": "^1.7.0", "js-yaml": "^4.1.0", "proxyquire": "^2.1.3", - "ts-node": "^10.9.2", + "tsconfig-paths": "^4.2.0", + "tsx": "^4.7.1", "typescript": "^5.3.3", "yaml": "^2.3.4" }, "bin": { - "local-action": "src/index.ts" + "local-action": "bin/local-action", + "tsx": "node_modules/dist/cli.mjs" }, "devDependencies": { "@jest/globals": "^29.7.0", "@types/figlet": "^1.5.8", "@types/jest": "^29.5.12", - "@types/node": "^20.11.16", + "@types/node": "^20.11.18", "@types/proxyquire": "^1.3.31", "@typescript-eslint/eslint-plugin": "^6.20.0", "@typescript-eslint/parser": "^6.20.0", @@ -51,15 +53,17 @@ }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@actions/core": { "version": "1.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", + "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", "dependencies": { "@actions/http-client": "^2.0.1", "uuid": "^8.3.2" @@ -67,7 +71,8 @@ }, "node_modules/@actions/http-client": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.0.tgz", + "integrity": "sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==", "dependencies": { "tunnel": "^0.0.6", "undici": "^5.25.4" @@ -194,18 +199,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -230,16 +223,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", @@ -256,15 +239,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -274,12 +248,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", @@ -679,9 +647,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.2", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dev": true, - "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -749,12 +718,17 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "optional": true, + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -762,10 +736,368 @@ "node": ">=12" } }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -777,9 +1109,10 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -807,6 +1140,28 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/js": { "version": "8.56.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", @@ -817,35 +1172,60 @@ } }, "node_modules/@fastify/busboy": { - "version": "2.0.0", - "license": "MIT", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", "engines": { "node": ">=14" } }, "node_modules/@github/browserslist-config": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@github/browserslist-config/-/browserslist-config-1.0.0.tgz", + "integrity": "sha512-gIhjdJp/c2beaIWWIlsXdqXVRUz3r2BxBCpfz/F3JXHvSAQ1paMYjLH+maEATtENg+k5eLV7gA+9yPp762ieuw==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, - "license": "MIT" + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10.10.0" + "node": "*" } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -855,9 +1235,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { @@ -885,15 +1265,6 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -970,8 +1341,9 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -1195,15 +1567,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, "node_modules/@jest/globals": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", @@ -1262,16 +1625,6 @@ } } }, - "node_modules/@jest/reporters/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1347,16 +1700,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/source-map/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@jest/test-result": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", @@ -1413,16 +1756,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@jest/transform/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1554,7 +1887,9 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -1570,20 +1905,25 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "license": "MIT", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1594,16 +1934,18 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1614,7 +1956,8 @@ }, "node_modules/@octokit/auth-token": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "engines": { "node": ">= 18" } @@ -1637,11 +1980,11 @@ } }, "node_modules/@octokit/endpoint": { - "version": "9.0.1", - "license": "MIT", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz", + "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==", "dependencies": { "@octokit/types": "^12.0.0", - "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -1650,7 +1993,8 @@ }, "node_modules/@octokit/graphql": { "version": "7.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", + "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", "dependencies": { "@octokit/request": "^8.0.1", "@octokit/types": "^12.0.0", @@ -1661,17 +2005,18 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "19.0.0", - "license": "MIT" + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.1.0.tgz", + "integrity": "sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==" }, "node_modules/@octokit/request": { - "version": "8.1.4", - "license": "MIT", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.2.0.tgz", + "integrity": "sha512-exPif6x5uwLqv1N1irkLG1zZNJkOtj8bZxuVHd71U5Ftuxf2wGNvAJyNBcPbPC+EBzwYEbBDdSFb8EPcjpYxPQ==", "dependencies": { "@octokit/endpoint": "^9.0.0", "@octokit/request-error": "^5.0.0", "@octokit/types": "^12.0.0", - "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -1680,7 +2025,8 @@ }, "node_modules/@octokit/request-error": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", + "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", "dependencies": { "@octokit/types": "^12.0.0", "deprecation": "^2.0.0", @@ -1691,16 +2037,17 @@ } }, "node_modules/@octokit/types": { - "version": "12.0.0", - "license": "MIT", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.4.0.tgz", + "integrity": "sha512-FLWs/AvZllw/AGVs+nJ+ELCDZZJk+kY0zMen118xhL2zD0s1etIUHm1odgjP7epxYU1ln7SZxEUWYop5bhsdgQ==", "dependencies": { - "@octokit/openapi-types": "^19.0.0" + "@octokit/openapi-types": "^19.1.0" } }, "node_modules/@pkgr/core": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz", - "integrity": "sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" @@ -1716,29 +2063,54 @@ "dev": true }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true, + "optional": true, + "peer": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "optional": true, + "peer": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "optional": true, + "peer": true }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "optional": true, + "peer": true }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -1781,24 +2153,6 @@ "@babel/types": "^7.20.7" } }, - "node_modules/@types/eslint": { - "version": "8.44.6", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/@types/figlet": { "version": "1.5.8", "resolved": "https://registry.npmjs.org/@types/figlet/-/figlet-1.5.8.tgz", @@ -1815,9 +2169,10 @@ } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.5", - "dev": true, - "license": "MIT" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", @@ -1848,19 +2203,22 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.14", - "dev": true, - "license": "MIT" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, "node_modules/@types/node": { - "version": "20.11.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz", - "integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==", + "version": "20.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.18.tgz", + "integrity": "sha512-ABT5VWnnYneSBcNWYSCuR05M826RoMyMSGiFivXGx6ZUIsXb9vn4643IEwkg2zbEOSgAiSogtapN2fgc4mAPlw==", + "dev": true, "dependencies": { "undici-types": "~5.26.4" } @@ -1899,16 +2257,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz", - "integrity": "sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.20.0", - "@typescript-eslint/type-utils": "6.20.0", - "@typescript-eslint/utils": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1934,15 +2292,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.20.0.tgz", - "integrity": "sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.20.0", - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/typescript-estree": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "engines": { @@ -1962,13 +2320,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz", - "integrity": "sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1979,13 +2337,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz", - "integrity": "sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.20.0", - "@typescript-eslint/utils": "6.20.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -2006,9 +2364,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.20.0.tgz", - "integrity": "sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2019,13 +2377,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz", - "integrity": "sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2046,42 +2404,18 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/utils": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.20.0.tgz", - "integrity": "sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.20.0", - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "engines": { @@ -2096,12 +2430,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz", - "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2119,8 +2453,10 @@ "dev": true }, "node_modules/acorn": { - "version": "8.10.0", - "license": "MIT", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -2130,15 +2466,20 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "license": "MIT", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "optional": true, + "peer": true, "engines": { "node": ">=0.4.0" } @@ -2186,6 +2527,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -2200,8 +2550,9 @@ }, "node_modules/anymatch": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2212,27 +2563,37 @@ }, "node_modules/arg": { "version": "4.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "optional": true, + "peer": true }, "node_modules/argparse": { "version": "2.0.1", - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/aria-query": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, - "license": "Apache-2.0", "dependencies": { "dequal": "^2.0.3" } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2240,8 +2601,9 @@ }, "node_modules/array-includes": { "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -2258,22 +2620,43 @@ }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", + "node_modules/array.prototype.filter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", + "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", + "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2284,8 +2667,9 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -2301,8 +2685,9 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -2317,16 +2702,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, - "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -2337,14 +2724,25 @@ } }, "node_modules/ast-types-flow": { - "version": "0.0.7", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", "dev": true, - "license": "ISC" + "dependencies": { + "has-symbols": "^1.0.3" + } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2353,17 +2751,19 @@ } }, "node_modules/axe-core": { - "version": "4.8.2", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", "dev": true, - "license": "MPL-2.0", "engines": { "node": ">=4" } }, "node_modules/axobject-query": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "dequal": "^2.0.3" } @@ -2535,26 +2935,29 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/before-after-hook": { "version": "2.2.3", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" }, "node_modules/brace-expansion": { - "version": "1.1.11", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -2622,12 +3025,18 @@ "dev": true }, "node_modules/call-bind": { - "version": "1.0.2", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "set-function-length": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2643,20 +3052,18 @@ } }, "node_modules/camelcase": { - "version": "6.3.0", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001583", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz", - "integrity": "sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==", + "version": "1.0.30001585", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz", + "integrity": "sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==", "dev": true, "funding": [ { @@ -2675,7 +3082,8 @@ }, "node_modules/chalk": { "version": "5.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -2715,8 +3123,9 @@ }, "node_modules/cliui": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -2758,29 +3167,33 @@ "dev": true }, "node_modules/commander": { - "version": "11.1.0", - "license": "MIT", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", + "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/common-tags": { "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/convert-source-map": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/create-jest": { "version": "29.7.0", @@ -2854,12 +3267,17 @@ }, "node_modules/create-require": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "optional": true, + "peer": true }, "node_modules/cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2871,13 +3289,15 @@ }, "node_modules/damerau-levenshtein": { "version": "1.0.8", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true }, "node_modules/debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -2906,8 +3326,9 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/deepmerge": { "version": "4.3.1", @@ -2919,13 +3340,15 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", + "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.2", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -2933,8 +3356,9 @@ }, "node_modules/define-properties": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -2949,12 +3373,14 @@ }, "node_modules/deprecation": { "version": "2.3.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" }, "node_modules/dequal": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -2968,6 +3394,17 @@ "node": ">=8" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -2979,8 +3416,9 @@ }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -2990,13 +3428,15 @@ }, "node_modules/dlv": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -3016,9 +3456,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.656", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.656.tgz", - "integrity": "sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q==", + "version": "1.4.665", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz", + "integrity": "sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw==", "dev": true }, "node_modules/emittery": { @@ -3035,13 +3475,15 @@ }, "node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/enhanced-resolve": { "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -3060,25 +3502,26 @@ } }, "node_modules/es-abstract": { - "version": "1.22.2", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.1", + "get-intrinsic": "^1.2.2", "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", + "hasown": "^2.0.0", "internal-slot": "^1.0.5", "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", @@ -3088,7 +3531,7 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.1", @@ -3102,7 +3545,7 @@ "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -3111,31 +3554,71 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.1", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -3148,18 +3631,57 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, "node_modules/escalade": { - "version": "3.1.1", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -3223,9 +3745,10 @@ } }, "node_modules/eslint-config-prettier": { - "version": "9.0.0", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, - "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -3235,8 +3758,9 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -3245,16 +3769,18 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-import-resolver-typescript": { "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, - "license": "ISC", "dependencies": { "debug": "^4.3.4", "enhanced-resolve": "^5.12.0", @@ -3277,8 +3803,9 @@ }, "node_modules/eslint-module-utils": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -3293,16 +3820,18 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-escompat": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.4.0.tgz", + "integrity": "sha512-ufTPv8cwCxTNoLnTZBFTQ5SxU2w7E7wiMIS7PSxsgP1eAxFjtSaoZ80LRn64hI8iYziE6kJG6gX/ZCJVxh48Bg==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.0" }, @@ -3312,8 +3841,9 @@ }, "node_modules/eslint-plugin-eslint-comments": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5", "ignore": "^5.0.5" @@ -3330,16 +3860,18 @@ }, "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/eslint-plugin-filenames": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz", + "integrity": "sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w==", "dev": true, - "license": "MIT", "dependencies": { "lodash.camelcase": "4.3.0", "lodash.kebabcase": "4.1.1", @@ -3352,8 +3884,9 @@ }, "node_modules/eslint-plugin-github": { "version": "4.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.10.1.tgz", + "integrity": "sha512-1AqQBockOM+m0ZUpwfjWtX0lWdX5cRi/hwJnSNvXoOmz/Hh+ULH6QFz6ENWueTWjoWpgPv0af3bj+snps6o4og==", "dev": true, - "license": "MIT", "dependencies": { "@github/browserslist-config": "^1.0.0", "@typescript-eslint/eslint-plugin": "^6.0.0", @@ -3382,34 +3915,36 @@ }, "node_modules/eslint-plugin-i18n-text": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz", + "integrity": "sha512-3G3UetST6rdqhqW9SfcfzNYMpQXS7wNkJvp6dsXnjzGiku6Iu5hl3B0kmk6lIcFPwYjhQIY+tXVRtK9TlGT7RA==", "dev": true, - "license": "MIT", "peerDependencies": { "eslint": ">=5.0.0" } }, "node_modules/eslint-plugin-import": { - "version": "2.28.1", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, - "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", + "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -3418,18 +3953,30 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -3437,14 +3984,60 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, + "node_modules/eslint-plugin-import/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, "node_modules/eslint-plugin-jest": { "version": "27.6.3", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.3.tgz", @@ -3593,26 +4186,27 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" }, "engines": { "node": ">=4.0" @@ -3621,18 +4215,33 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/eslint-plugin-no-only-tests": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.1.0.tgz", + "integrity": "sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==", "dev": true, - "license": "MIT", "engines": { "node": ">=5.0.0" } @@ -3669,16 +4278,18 @@ }, "node_modules/eslint-rule-documentation": { "version": "1.0.23", + "resolved": "https://registry.npmjs.org/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz", + "integrity": "sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/eslint-scope": { "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -3692,8 +4303,9 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -3703,8 +4315,9 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3715,10 +4328,21 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3732,8 +4356,9 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3743,13 +4368,27 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT" + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, "node_modules/espree": { "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -3777,8 +4416,9 @@ }, "node_modules/esquery": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -3788,8 +4428,9 @@ }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -3799,16 +4440,18 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -3836,12 +4479,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -3875,13 +4512,15 @@ }, "node_modules/fast-diff": { "version": "1.3.0", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true }, "node_modules/fast-glob": { - "version": "3.3.1", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3895,8 +4534,9 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -3912,13 +4552,15 @@ }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fastq": { - "version": "1.15.0", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -3945,8 +4587,9 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -3956,7 +4599,8 @@ }, "node_modules/fill-keys": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", + "integrity": "sha512-tcgI872xXjwFF4xgQmLxi76GnwJG3g/3isB1l4/G5Z4zrbddGpBjqZCO9oEAcB5wX0Hj/5iQB3toxfO7in1hHA==", "dependencies": { "is-object": "~1.0.1", "merge-descriptors": "~1.0.0" @@ -3967,8 +4611,9 @@ }, "node_modules/fill-range": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3978,8 +4623,9 @@ }, "node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -3992,40 +4638,45 @@ } }, "node_modules/flat-cache": { - "version": "3.1.1", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { "version": "3.2.9", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true }, "node_modules/for-each": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/fs.realpath": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -4036,16 +4687,17 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -4061,8 +4713,9 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4078,21 +4731,27 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.2.1", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4120,12 +4779,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -4136,8 +4797,8 @@ }, "node_modules/get-tsconfig": { "version": "4.7.2", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -4146,14 +4807,15 @@ } }, "node_modules/glob": { - "version": "7.2.0", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -4166,8 +4828,9 @@ }, "node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -4175,6 +4838,28 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -4192,8 +4877,9 @@ }, "node_modules/globalthis": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.1.3" }, @@ -4206,8 +4892,9 @@ }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -4225,8 +4912,9 @@ }, "node_modules/gopd": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -4236,25 +4924,21 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/has": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/has-ansi": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -4264,34 +4948,38 @@ }, "node_modules/has-ansi/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/has-bigints": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4299,8 +4987,9 @@ }, "node_modules/has-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4310,8 +4999,9 @@ }, "node_modules/has-symbols": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4320,11 +5010,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -4333,10 +5024,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/html-escaper": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/human-signals": { "version": "2.1.0", @@ -4348,9 +5051,10 @@ } }, "node_modules/ignore": { - "version": "5.2.4", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } @@ -4392,24 +5096,27 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4417,16 +5124,18 @@ }, "node_modules/inherits": { "version": "2.0.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/internal-slot": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -4434,13 +5143,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4452,10 +5164,26 @@ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -4465,8 +5193,9 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -4480,8 +5209,9 @@ }, "node_modules/is-callable": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4490,10 +5220,11 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "license": "MIT", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4501,8 +5232,9 @@ }, "node_modules/is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -4515,16 +5247,30 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -4538,10 +5284,26 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -4549,10 +5311,20 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4562,16 +5334,18 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -4584,30 +5358,26 @@ }, "node_modules/is-object": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-path-inside": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -4619,10 +5389,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -4644,8 +5424,9 @@ }, "node_modules/is-string": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -4658,8 +5439,9 @@ }, "node_modules/is-symbol": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -4671,11 +5453,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, - "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -4684,10 +5467,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -4695,20 +5488,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/isarray": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -4731,8 +5540,9 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -4758,8 +5568,9 @@ }, "node_modules/istanbul-reports": { "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -4768,6 +5579,19 @@ "node": ">=8" } }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -5702,15 +6526,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/jest-runtime/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-snapshot": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", @@ -5889,6 +6704,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/jest-validate/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -6029,7 +6856,8 @@ }, "node_modules/js-yaml": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { "argparse": "^2.0.1" }, @@ -6051,8 +6879,9 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -6068,24 +6897,26 @@ }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json5": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "bin": { "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/jsx-ast-utils": { "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -6098,8 +6929,9 @@ }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -6115,15 +6947,20 @@ }, "node_modules/language-subtag-registry": { "version": "0.3.22", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true }, "node_modules/language-tags": { - "version": "1.0.5", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, - "license": "MIT", "dependencies": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" } }, "node_modules/leven": { @@ -6137,8 +6974,9 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -6155,8 +6993,9 @@ }, "node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -6175,13 +7014,15 @@ }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true }, "node_modules/lodash.kebabcase": { "version": "4.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true }, "node_modules/lodash.memoize": { "version": "4.1.2", @@ -6191,23 +7032,27 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/lodash.snakecase": { "version": "4.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true }, "node_modules/lodash.upperfirst": { "version": "4.3.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true }, "node_modules/loglevel": { - "version": "1.8.1", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.1.tgz", + "integrity": "sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6.0" }, @@ -6218,8 +7063,9 @@ }, "node_modules/loglevel-colored-level-prefix": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", + "integrity": "sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^1.1.3", "loglevel": "^1.4.1" @@ -6227,24 +7073,27 @@ }, "node_modules/loglevel-colored-level-prefix/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/loglevel-colored-level-prefix/node_modules/ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/loglevel-colored-level-prefix/node_modules/chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -6258,16 +7107,18 @@ }, "node_modules/loglevel-colored-level-prefix/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/loglevel-colored-level-prefix/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -6277,27 +7128,27 @@ }, "node_modules/loglevel-colored-level-prefix/node_modules/supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/lru-cache": { - "version": "6.0.0", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "ISC", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, "node_modules/make-coverage-badge": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-coverage-badge/-/make-coverage-badge-1.2.0.tgz", + "integrity": "sha512-nA1eQZJ9vcY2UoQLVIdzqyRoNtAZHWlXJfrHkaMB/pQgTYBPmbImkykfxWeAtUQuLJXzb6eAhbR7nEgrt+S7FA==", "dev": true, - "license": "MIT", "dependencies": { "mri": "1.1.4" }, @@ -6311,8 +7162,9 @@ }, "node_modules/make-dir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -6325,7 +7177,9 @@ }, "node_modules/make-error": { "version": "1.3.6", - "license": "ISC" + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "node_modules/makeerror": { "version": "1.0.12", @@ -6337,8 +7191,12 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "license": "MIT" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -6348,16 +7206,18 @@ }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -6376,20 +7236,24 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { "version": "1.2.8", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6408,25 +7272,29 @@ }, "node_modules/module-not-found-error": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", + "integrity": "sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g==" }, "node_modules/mri": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", + "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/ms": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/node-int64": { "version": "0.4.0", @@ -6442,8 +7310,9 @@ }, "node_modules/normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6461,28 +7330,31 @@ } }, "node_modules/object-inspect": { - "version": "1.13.0", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.4", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -6495,8 +7367,9 @@ }, "node_modules/object.entries": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6508,8 +7381,9 @@ }, "node_modules/object.fromentries": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6523,20 +7397,23 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", + "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "array.prototype.filter": "^1.0.3", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0" } }, "node_modules/object.values": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6551,7 +7428,8 @@ }, "node_modules/once": { "version": "1.4.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } @@ -6573,8 +7451,9 @@ }, "node_modules/optionator": { "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -6589,8 +7468,9 @@ }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -6603,8 +7483,9 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -6656,49 +7537,56 @@ }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/picocolors": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -6781,16 +7669,17 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -6839,8 +7728,9 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, - "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -6877,7 +7767,8 @@ }, "node_modules/proxyquire": { "version": "2.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", + "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==", "dependencies": { "fill-keys": "^1.0.2", "module-not-found-error": "^1.0.1", @@ -6911,6 +7802,8 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -6925,8 +7818,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/react-is": { "version": "18.2.0", @@ -6934,15 +7826,38 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", + "node_modules/reflect.getprototypeof": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", + "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", "dev": true, - "license": "MIT" + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "get-intrinsic": "^1.2.3", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6957,20 +7872,23 @@ }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-relative": { "version": "0.8.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==", + "dev": true }, "node_modules/resolve": { "version": "1.22.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -7015,8 +7933,8 @@ }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } @@ -7032,8 +7950,9 @@ }, "node_modules/reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -7041,8 +7960,9 @@ }, "node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -7055,6 +7975,8 @@ }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -7070,18 +7992,18 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/safe-array-concat": { - "version": "1.0.1", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -7093,22 +8015,27 @@ } }, "node_modules/safe-regex-test": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/semver": { - "version": "7.5.4", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -7119,10 +8046,46 @@ "node": ">=10" } }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-function-name": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", @@ -7134,8 +8097,9 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -7145,25 +8109,37 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { - "version": "1.0.4", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -7172,8 +8148,9 @@ }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7239,8 +8216,9 @@ }, "node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7252,13 +8230,15 @@ }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/string.prototype.trim": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7273,8 +8253,9 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7286,8 +8267,9 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7299,8 +8281,9 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7308,20 +8291,13 @@ "node": ">=8" } }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-bom": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/strip-final-newline": { @@ -7335,8 +8311,9 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -7346,8 +8323,9 @@ }, "node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7357,7 +8335,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "engines": { "node": ">= 0.4" }, @@ -7367,8 +8346,9 @@ }, "node_modules/svg-element-attributes": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz", + "integrity": "sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -7392,16 +8372,18 @@ }, "node_modules/tapable": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -7411,10 +8393,33 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/text-table": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/tmpl": { "version": "1.0.5", @@ -7433,8 +8438,9 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -7443,11 +8449,12 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.3", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", + "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" @@ -7505,22 +8512,13 @@ "jest-resolve": "^29.5.0" } }, - "node_modules/ts-jest/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "optional": true, + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -7559,22 +8557,25 @@ } } }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "dev": true, - "license": "MIT", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", + "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" } }, "node_modules/tslib": { @@ -7604,17 +8605,37 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/tsx": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.1.tgz", + "integrity": "sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g==", + "dependencies": { + "esbuild": "~0.19.10", + "get-tsconfig": "^4.7.2" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/tunnel": { "version": "0.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -7624,8 +8645,9 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -7643,13 +8665,14 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", + "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -7657,8 +8680,9 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -7674,8 +8698,9 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -7692,8 +8717,9 @@ }, "node_modules/typed-array-length": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -7717,8 +8743,9 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -7730,8 +8757,9 @@ } }, "node_modules/undici": { - "version": "5.26.3", - "license": "MIT", + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", + "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -7742,14 +8770,18 @@ "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true }, "node_modules/universal-user-agent": { - "version": "6.0.0", - "license": "ISC" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" }, "node_modules/update-browserslist-db": { "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -7765,7 +8797,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -7788,19 +8819,25 @@ }, "node_modules/uuid": { "version": "8.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "optional": true, + "peer": true }, "node_modules/v8-to-istanbul": { - "version": "9.1.3", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, - "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -7810,19 +8847,10 @@ "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/vue-eslint-parser": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", - "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz", + "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==", "dev": true, "dependencies": { "debug": "^4.3.4", @@ -7854,8 +8882,9 @@ }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -7868,8 +8897,9 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -7881,16 +8911,58 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-typed-array": { - "version": "1.1.11", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7901,8 +8973,9 @@ }, "node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7917,8 +8990,9 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7931,8 +9005,9 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7942,12 +9017,14 @@ }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/wrappy": { "version": "1.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -7962,12 +9039,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, "node_modules/xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", @@ -7976,16 +9047,18 @@ }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "2.3.4", @@ -7997,8 +9070,9 @@ }, "node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -8014,23 +9088,29 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yn": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "optional": true, + "peer": true, "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 15c00f8..0f67059 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@github/local-action", - "description": "Debug a local GitHub Action", - "version": "0.2.0", + "description": "Local Debugging for GitHub Actions", + "version": "1.0.0", "author": "Nick Alteen ", "private": false, "homepage": "https://github.com/github/local-action", @@ -14,7 +14,8 @@ }, "keywords": [ "actions", - "node" + "node", + "typescript" ], "engines": { "node": ">=20" @@ -23,7 +24,7 @@ ".": "./src/index.ts" }, "bin": { - "local-action": "src/index.ts" + "local-action": "./bin/local-action" }, "publishConfig": { "registry": "https://npm.pkg.github.com" @@ -46,12 +47,13 @@ "@actions/core": "^1.10.1", "@octokit/core": "^5.1.0", "chalk": "^5.3.0", - "commander": "^11.1.0", + "commander": "^12.0.0", "dotenv": "^16.4.1", "figlet": "^1.7.0", "js-yaml": "^4.1.0", "proxyquire": "^2.1.3", - "ts-node": "^10.9.2", + "tsconfig-paths": "^4.2.0", + "tsx": "^4.7.1", "typescript": "^5.3.3", "yaml": "^2.3.4" }, @@ -59,7 +61,7 @@ "@jest/globals": "^29.7.0", "@types/figlet": "^1.5.8", "@types/jest": "^29.5.12", - "@types/node": "^20.11.16", + "@types/node": "^20.11.18", "@types/proxyquire": "^1.3.31", "@typescript-eslint/eslint-plugin": "^6.20.0", "@typescript-eslint/parser": "^6.20.0", From 98a5b89b2edd973aa9aba213a9f2de6d1307cd08 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:06:38 -0500 Subject: [PATCH 23/32] Note v1.0.0 changes --- README.md | 60 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 9730758..09858ad 100644 --- a/README.md +++ b/README.md @@ -14,12 +14,18 @@ actions can be run directly on your workstation. > > This tool currently only supports JavaScript and TypeScript actions! +## v1.0.0 Changes + +With the release of `v1.0.0`, there was a need to switch from +[`ts-node`](https://www.npmjs.com/package/ts-node) to +[`tsx`](https://www.npmjs.com/package/tsx). However, the bundled version of +`tsx` is being used, so you should no longer need to install either :grinning: + ## Prerequisites ### Installed Tools - [Node.js and npm](https://nodejs.org/en) -- [`ts-node`](https://www.npmjs.com/package/ts-node) ### Action Structure @@ -72,11 +78,12 @@ the following when preparing for release: - Commit the `node_modules` directory to your repository - Transpile your code and dependencies using tools like + [`tsc`](https://www.typescriptlang.org/docs/handbook/compiler-options.html) or [`@vercel/ncc`](https://www.npmjs.com/package/@vercel/ncc) -Currently, this tool supports **non-transpiled action code only**. This is -because it uses [`proxyquire`](https://github.com/thlorenz/proxyquire) to -override GitHub Actions Toolkit dependencies (e.g +**This tool supports non-transpiled action code only.** This is because it uses +[`proxyquire`](https://github.com/thlorenz/proxyquire) to override GitHub +Actions Toolkit dependencies (e.g [`@actions/core`](https://www.npmjs.com/package/@actions/core)). In transpiled code, this simply doesn't work. @@ -84,11 +91,11 @@ For example, if you have a TypeScript action that follows the same format as the [template](https://github.com/actions/typescript-action), you would have both `src` and `dist` directories in your repository. The `dist` directory contains the transpiled code with any dependencies included. When running this utility, -you will want to target the code files in the `src` directory instead. This has -the added benefit of being able to hook into debugging utilities in your IDE -:tada: +you will want to target the code files in the `src` directory instead (including +the dependencies this tool wants to replace). This has the added benefit of +being able to hook into debugging utilities in your IDE :tada: -For additional information, see +For additional information about transpiled action code, see [Commit, tag, and push your action to GitHub](https://docs.github.com/en/actions/creating-actions/creating-a-javascript-action#commit-tag-and-push-your-action-to-github). ## Installation @@ -123,6 +130,12 @@ For additional information, see npm i -g . ``` + Alternatively, you can link the package if you want to make code changes + + ```bash + npm link . + ``` + ## Commands ### `local-action` @@ -132,17 +145,26 @@ For additional information, see | `-h`, `--help` | Display help information | | `-V`, `--version` | Display version information | -### `local-action run ` - -| Argument | Description | -| ------------ | ---------------------------------------------------- | -| `path` | Path to the local action directory | -| | Example: `/path/to/action.yml` | -| `entrypoint` | Action entrypoint (relative to the action directory) | -| | Example: `src/index.ts` | -| `env file` | Path to the local `.env` file for action inputs | -| | Example: `/path/to/.env` | -| | See the example [`.env.example`](.env.example) | +### `local-action run ` + +| Argument | Description | +| ------------- | ---------------------------------------------------- | +| `path` | Path to the local action directory | +| | Example: `/path/to/action.yml` | +| `entrypoint` | Action entrypoint (relative to the action directory) | +| | Example: `src/index.ts` | +| `dotenv file` | Path to the local `.env` file for action inputs | +| | Example: `/path/to/.env` | +| | See the example [`.env.example`](.env.example) | + +Examples: + +```bash +local-action run /path/to/typescript-action src/index.ts .env + +# The `run` action is invoked by default as well +local-action /path/to/typescript-action src/index.ts .env +``` #### Output From b4d6c5b97b2533746f4a2e817be46ef11ece9dac Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:08:04 -0500 Subject: [PATCH 24/32] Note actions step debug setting --- .env.example | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 652d4ef..124f68f 100644 --- a/.env.example +++ b/.env.example @@ -4,5 +4,6 @@ # GitHub Actions inputs should follow `INPUT_` format (case-insensitive). INPUT_milliseconds=2400 -# Enable/disable step debug logs +# Enable/disable step debug logging. Normally this is false by default, but for +# the purpose of debugging, it is set to true here. ACTIONS_STEP_DEBUG=true \ No newline at end of file From 8816b38c2717ff93cb3a7aa21bc627a1f1b9e744 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:08:10 -0500 Subject: [PATCH 25/32] Ignore extra dirs --- .eslintignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.eslintignore b/.eslintignore index 934e0e1..330c00d 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,9 @@ +.github/ +.vscode/ +badges/ +bin/ dist/ node_modules/ coverage/ +reports/ *.json From afc7fe0ff2895a17f323846d2073e7441e1473c7 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:22:24 -0500 Subject: [PATCH 26/32] Update ignored linting files --- .eslintignore | 2 +- .eslintrc.yml | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.eslintignore b/.eslintignore index 330c00d..05c92ed 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,8 +2,8 @@ .vscode/ badges/ bin/ +coverage/ dist/ node_modules/ -coverage/ reports/ *.json diff --git a/.eslintrc.yml b/.eslintrc.yml index 4a7c015..897635d 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -7,10 +7,6 @@ globals: Atomics: readonly SharedArrayBuffer: readonly -ignorePatterns: - - node_modules/.* - - coverage/.* - parser: '@typescript-eslint/parser' parserOptions: From b8b38488381d09e73373761141a0e0947e256721 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:23:55 -0500 Subject: [PATCH 27/32] Update prettier config --- .prettierignore | 3 ++- .prettierrc.yml | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.prettierignore b/.prettierignore index 64f046d..8b68a0f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,4 @@ +coverage/ dist/ node_modules/ -coverage/ \ No newline at end of file +reports/ \ No newline at end of file diff --git a/.prettierrc.yml b/.prettierrc.yml index 3c40180..924d124 100644 --- a/.prettierrc.yml +++ b/.prettierrc.yml @@ -1,14 +1,14 @@ +arrowParens: avoid +bracketSameLine: true +bracketSpacing: true +endOfLine: lf +htmlWhitespaceSensitivity: css +jsxSingleQuote: false printWidth: 80 -tabWidth: 2 -useTabs: false +proseWrap: always +quoteProps: as-needed semi: false singleQuote: true -quoteProps: as-needed -jsxSingleQuote: false +tabWidth: 2 trailingComma: none -bracketSpacing: true -bracketSameLine: true -arrowParens: avoid -proseWrap: always -htmlWhitespaceSensitivity: css -endOfLine: lf +useTabs: false From 9d88f09e5aa86b491a612c22dad3202d54729868 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:27:27 -0500 Subject: [PATCH 28/32] Update support info --- SUPPORT.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/SUPPORT.md b/SUPPORT.md index a37b96c..5ec8dff 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -1,6 +1,6 @@ # Support -## How to file issues and get help +## How to Get Help This project uses GitHub issues to track bugs and feature requests. Please search the existing issues before filing new issues to avoid duplicates. For new @@ -9,9 +9,10 @@ issues, file your bug or feature request as a new issue. For help or questions about using this project, please feel free to submit an issue as well. -This project is under active development and maintained by GitHub staff and the -community. We will do our best to respond to support, feature requests, and -community questions in a timely manner. +This project is under development and maintained by GitHub staff and the +community, however availability is limited . We will do our best to respond to +support, feature requests, and community questions in a timely manner, but there +is no "official" support for this project at this time. ## GitHub Support Policy From 408d05712091cac290ed2c4666fdbbe22ce0face Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:31:28 -0500 Subject: [PATCH 29/32] Add tests for variable types --- __tests__/stubs/core-stubs.test.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/__tests__/stubs/core-stubs.test.ts b/__tests__/stubs/core-stubs.test.ts index 6cda28d..0edd41d 100644 --- a/__tests__/stubs/core-stubs.test.ts +++ b/__tests__/stubs/core-stubs.test.ts @@ -123,6 +123,23 @@ describe('Core', () => { exportVariable('TEST', 'test') expect(EnvMeta.env).toMatchObject({ TEST: 'test' }) }) + + it('Exports undefined and null as empty strings', () => { + exportVariable('UNDEFINED_TEST', undefined) + exportVariable('NULL_TEST', undefined) + expect(EnvMeta.env).toMatchObject({ UNDEFINED_TEST: '', NULL_TEST: '' }) + }) + + it('Exports objects as stringified JSON', () => { + const testVariable = { + my_key: 'my_value' + } + + exportVariable('TEST', testVariable) + expect(EnvMeta.env).toMatchObject({ + TEST: JSON.stringify(testVariable) + }) + }) }) describe('setSecre()', () => { From 5cacaac9033f392d6b65c305c2500126c1d653fc Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:50:47 -0500 Subject: [PATCH 30/32] Remove extra test --- __mocks__/tsconfig-paths.ts | 4 ++-- __tests__/bootstrap.test.ts | 17 ----------------- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/__mocks__/tsconfig-paths.ts b/__mocks__/tsconfig-paths.ts index 1eee5f9..2f82618 100644 --- a/__mocks__/tsconfig-paths.ts +++ b/__mocks__/tsconfig-paths.ts @@ -1,2 +1,2 @@ -export const loadConfig = jest.fn() -export const register = jest.fn() +export const loadConfig = jest.fn().mockImplementation() +export const register = jest.fn().mockImplementation() diff --git a/__tests__/bootstrap.test.ts b/__tests__/bootstrap.test.ts index a20edf3..1c61b6d 100644 --- a/__tests__/bootstrap.test.ts +++ b/__tests__/bootstrap.test.ts @@ -80,23 +80,6 @@ describe('Bootstrap', () => { ) }) - it('Registers additional paths', async () => { - process.env.TARGET_ACTION_PATH = 'non-existent-path' - - fs_existsSyncSpy.mockReturnValueOnce(true) - fs_readFileSyncSpy.mockReturnValueOnce(JSON.stringify(tsConfigWithPaths)) - - await import('../src/bootstrap') - - expect(fs_existsSyncSpy).toHaveBeenCalledWith( - `${process.env.TARGET_ACTION_PATH}/tsconfig.json` - ) - expect(fs_readFileSyncSpy).toHaveBeenCalledWith( - `${process.env.TARGET_ACTION_PATH}/tsconfig.json`, - 'utf-8' - ) - }) - it('Defaults to an empty paths object', async () => { process.env.TARGET_ACTION_PATH = 'non-existent-path' From e1b429f1a7984f078e132778a2e4472bd9084d21 Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:51:41 -0500 Subject: [PATCH 31/32] Remove extra const --- __tests__/bootstrap.test.ts | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/__tests__/bootstrap.test.ts b/__tests__/bootstrap.test.ts index 1c61b6d..e225f37 100644 --- a/__tests__/bootstrap.test.ts +++ b/__tests__/bootstrap.test.ts @@ -7,20 +7,6 @@ let envBackup: { [key: string]: string | undefined } = process.env let fs_existsSyncSpy: jest.SpyInstance let fs_readFileSyncSpy: jest.SpyInstance -/** Example `tsconfig.json` with paths set. */ -const tsConfigWithPaths = { - compilerOptions: { - baseUrl: '.', - paths: { - 'fixtures/*': ['./__fixtures__/*'], - 'mocks/*': ['./__mocks__/*'], - 'tests/*': ['./__tests__/*'], - main: ['./src/main'], - types: ['./src/types'] - } - } -} - /** Example `tsconfig.json` without paths set. */ const tsConfigWithoutPaths = { compilerOptions: { From b7329a23f7eb8e38ec003094b7e53424079c528c Mon Sep 17 00:00:00 2001 From: Nick Alteen Date: Thu, 15 Feb 2024 13:55:03 -0500 Subject: [PATCH 32/32] Ignore .js for coverage --- __tests__/bootstrap.test.ts | 24 ------------------------ jest.config.ts | 2 +- 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/__tests__/bootstrap.test.ts b/__tests__/bootstrap.test.ts index e225f37..a5477fd 100644 --- a/__tests__/bootstrap.test.ts +++ b/__tests__/bootstrap.test.ts @@ -7,13 +7,6 @@ let envBackup: { [key: string]: string | undefined } = process.env let fs_existsSyncSpy: jest.SpyInstance let fs_readFileSyncSpy: jest.SpyInstance -/** Example `tsconfig.json` without paths set. */ -const tsConfigWithoutPaths = { - compilerOptions: { - baseUrl: '.' - } -} - describe('Bootstrap', () => { beforeAll(() => { fs_existsSyncSpy = jest.spyOn(fs, 'existsSync') @@ -65,21 +58,4 @@ describe('Bootstrap', () => { `${process.env.TARGET_ACTION_PATH}/tsconfig.json` ) }) - - it('Defaults to an empty paths object', async () => { - process.env.TARGET_ACTION_PATH = 'non-existent-path' - - fs_existsSyncSpy.mockReturnValueOnce(true) - fs_readFileSyncSpy.mockReturnValueOnce(JSON.stringify(tsConfigWithoutPaths)) - - await import('../src/bootstrap') - - expect(fs_existsSyncSpy).toHaveBeenCalledWith( - `${process.env.TARGET_ACTION_PATH}/tsconfig.json` - ) - expect(fs_readFileSyncSpy).toHaveBeenCalledWith( - `${process.env.TARGET_ACTION_PATH}/tsconfig.json`, - 'utf-8' - ) - }) }) diff --git a/jest.config.ts b/jest.config.ts index ae29adb..286f786 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -7,7 +7,7 @@ const config: Config = { // } clearMocks: true, collectCoverage: true, - collectCoverageFrom: ['src/**'], + collectCoverageFrom: ['src/**/*.ts'], coverageDirectory: 'coverage', coveragePathIgnorePatterns: ['node_modules'], coverageReporters: ['json-summary', 'lcov', 'text'],