From fba16d5d1c1ba0aa4b2259fd7059723cee0e1f32 Mon Sep 17 00:00:00 2001 From: skypesky <2565978507@qq.com> Date: Sun, 23 Jun 2024 23:00:10 +0800 Subject: [PATCH 01/16] fix: git helper --- package.json | 1 + pnpm-lock.yaml | 8 ++ src/cli/git/index.ts | 150 +++++++++++++++++++++++++- src/cli/list.ts | 19 ++-- src/cli/rm.ts | 26 ++--- tests/cli/git.spec.ts | 244 +++++++++++++++++++++--------------------- 6 files changed, 299 insertions(+), 149 deletions(-) diff --git a/package.json b/package.json index dc2979b..aec6d8f 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "open": "^8.4.0", "prompts": "^2.4.2", "shelljs.exec": "^1.1.8", + "ufo": "^1.5.3", "url-join": "4.0.1" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8ec300a..f73b064 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,6 +53,9 @@ importers: shelljs.exec: specifier: ^1.1.8 version: 1.1.8 + ufo: + specifier: ^1.5.3 + version: 1.5.3 url-join: specifier: 4.0.1 version: 4.0.1 @@ -2024,6 +2027,9 @@ packages: engines: {node: '>=4.2.0'} hasBin: true + ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -4335,6 +4341,8 @@ snapshots: typescript@4.9.5: {} + ufo@1.5.3: {} + undici-types@5.26.5: {} universalify@0.2.0: {} diff --git a/src/cli/git/index.ts b/src/cli/git/index.ts index ec43352..b872894 100644 --- a/src/cli/git/index.ts +++ b/src/cli/git/index.ts @@ -1,11 +1,151 @@ -import { Command } from "commander"; -import { gitOpenCommand } from "./open"; +import { Command } from 'commander'; +import type { ActionOptions } from '../../meta/actions-options'; +import { getGitRemoteUrl } from '../../utils/git'; +import { logger } from '../../utils/logger'; +import { joinURL } from 'ufo'; +import { isBoolean } from 'lodash'; +import getRepoInfo from 'git-repo-info'; +import exec from 'shelljs.exec'; +import { open } from '../../classes'; const gitCommand = new Command(); gitCommand - .name("git") - .description("Support to open project related issue list, pr list...") - .addCommand(gitOpenCommand, { isDefault: true }); + .name('git') + .description('Support to open project related issue list, pr list...') + .option('-a, --actions', 'Open actions page', false) + .option('--author', 'Open author profile page', false) + .option('-b, --branch [branch]', 'Open branch page(default current branch)') + .option('-c, --commit [hash]', 'Open commit page') + .option('--committer', 'Open committer profile page', false) + .option('-f, --file ', 'Open specific file page') + .option('--find', 'Open the search file page', false) + .option('--first-commit', 'Open first commit page', false) + .option('-i, --issue', 'Open issues list page', false) + .option('-m, --main', 'Open main branch page', false) + .option('-p, --pull-request', 'Open pull request list page', false) + .option( + '--pull [branch]', + 'Open the page for creating a pull request, the branch defaults to the current branch', + false + ) + .option('-r, --release', 'Open release page', false) + .option('-s, --settings', 'Open settings page', false) + .option('--star', 'Open star page', false) + .action(async (options: ActionOptions) => { + const actions = options.actions; + const author = options.author; + const branch = options.branch; + const commit = options.commit; + const committer = options.committer; + const file = options.file; + const find = options.find; + const firstCommit = options.firstCommit; + const issue = options.issue; + const pullRequest = options.pullRequest; + const pull = options.pull; + const release = options.release; + const main = options.main; + const settings = options.settings; + const star = options.star; + + const addresses: string[] = []; + const githubAddress: string = await getGitRemoteUrl(); + + if (!githubAddress) { + logger.error(`The current directory is not a valid git repository`); + return; + } + + if (actions) { + addresses.push(joinURL(githubAddress, 'actions')); + } + + if (issue) { + addresses.push(joinURL(githubAddress, 'issues')); + } + + if (pullRequest) { + addresses.push(joinURL(githubAddress, 'pulls')); + } + + if (pull) { + const info = getRepoInfo(); + const branchName: string = isBoolean(pull) ? info.branch : pull; + addresses.push(joinURL(githubAddress, 'pull/new', branchName)); + } + + if (author) { + const info = getRepoInfo(); + const [$author] = info.author.split(' '); + addresses.push(joinURL(new URL(githubAddress).origin, $author)); + } + + if (release) { + addresses.push(joinURL(githubAddress, 'releases')); + } + + if (branch) { + const info = getRepoInfo(); + const branchName = isBoolean(branch) ? info.branch : branch; + addresses.push(joinURL(githubAddress, 'tree', branchName)); + } + + if (commit) { + const info = getRepoInfo(); + const $commit: string = isBoolean(commit) ? info.sha : commit; + addresses.push(joinURL(githubAddress, 'commit', $commit)); + } + + if (committer) { + const info = getRepoInfo(); + const [$committer] = info.author.split(' '); + addresses.push(joinURL(new URL(githubAddress).origin, $committer)); + } + + if (file) { + const info = getRepoInfo(); + // FIXME: 需要默认跳转到主分支 + const branchName = info.branch ?? ''; + addresses.push(joinURL(githubAddress, 'tree', branchName, file)); + } + + if (find) { + const info = getRepoInfo(); + // FIXME: 需要默认跳转到主分支 + const branchName = info.branch ?? ''; + addresses.push(joinURL(githubAddress, 'find', branchName)); + } + + if (firstCommit) { + const info = exec('git rev-list --max-parents=0 head'); + const firstCommitHash = info.stdout.trim(); + addresses.push(joinURL(githubAddress, 'commit', firstCommitHash)); + } + + if (settings) { + addresses.push(joinURL(githubAddress, 'settings')); + } + + if (star) { + addresses.push(joinURL(githubAddress, 'stargazers')); + } + + if (main) { + // 什么都不用做 + addresses.push(githubAddress); + } + + if (!addresses.length) { + const info = getRepoInfo(); + // FIXME: 需要默认跳转到主分支 + const branchName = info.branch ?? ''; + addresses.push(joinURL(githubAddress, 'tree', branchName)); + } + + for (const address of addresses) { + await open(address); + } + }); export { gitCommand }; diff --git a/src/cli/list.ts b/src/cli/list.ts index a089523..3d7a984 100644 --- a/src/cli/list.ts +++ b/src/cli/list.ts @@ -1,17 +1,16 @@ -import { simpleWorker } from "../classes/simple-worker"; -import { Command } from "commander"; -import { ActionOptions } from "../meta/actions-options"; +import { simpleWorker } from '../classes/simple-worker'; +import { Command } from 'commander'; +import { ActionOptions } from '../meta/actions-options'; const listCommand = new Command(); listCommand - .name("ls") - .alias("list") - .description("List existing aliases and addresses") - .action(async (str: string, options: ActionOptions) => { - const [point] = options.args; - - await simpleWorker.list(point); + .name('ls') + .alias('list') + .description('List existing aliases and addresses') + .argument('[alias]', 'Give your address an alias') + .action(async (alias?: string) => { + await simpleWorker.list(alias); }); export { listCommand }; diff --git a/src/cli/rm.ts b/src/cli/rm.ts index c0422e9..09bd4ff 100644 --- a/src/cli/rm.ts +++ b/src/cli/rm.ts @@ -1,15 +1,15 @@ -import { simpleWorker } from "./../classes/simple-worker"; -import { Command } from "commander"; -import { isEmpty } from "lodash"; -import prompts from "prompts"; -import { Point } from "../meta"; -import { logger } from "../utils/logger"; +import { simpleWorker } from './../classes/simple-worker'; +import { Command } from 'commander'; +import { isEmpty } from 'lodash'; +import prompts from 'prompts'; +import { Point } from '../meta'; +import { logger } from '../utils/logger'; const removeCommand = new Command(); removeCommand - .name("rm") - .description("Remove an alias from your address") - .argument("[alias]", "Enter the point to be deleted") + .name('rm') + .description('Remove an alias from your address') + .argument('[alias]', 'Enter the point to be deleted') .action(async (alias: string) => { if (isEmpty(alias)) { const points = await simpleWorker.findAll(); @@ -27,14 +27,14 @@ removeCommand const response = await prompts([ { - type: "multiselect", - name: "removeAliases", - message: "Select the alias to be deleted233", + type: 'multiselect', + name: 'removeAliases', + message: 'Select the alias to be deleted', choices: choices, }, ]); - const aliases: string[] = response?.["removeAliases"] ?? []; + const aliases: string[] = response?.['removeAliases'] ?? []; for (const _alias of aliases) { // @FIXME: 请使用更加优雅的方法,目前的代码效率略低 @jianchao diff --git a/tests/cli/git.spec.ts b/tests/cli/git.spec.ts index 9c7369a..e1fbc91 100644 --- a/tests/cli/git.spec.ts +++ b/tests/cli/git.spec.ts @@ -1,43 +1,43 @@ -import { basename } from "path"; -import { createProgram } from "../../src"; -import { open } from "../../src/classes/open"; -import gitRemoteOriginUrl from "git-remote-origin-url"; -import getRepoInfo, { GitRepoInfo } from "git-repo-info"; -import urlJoin from "url-join"; - -jest.mock("../../src/classes/open"); +import { basename } from 'path'; +import { createProgram } from '../../src'; +import { open } from '../../src/classes/open'; +import gitRemoteOriginUrl from 'git-remote-origin-url'; +import getRepoInfo, { GitRepoInfo } from 'git-repo-info'; +import urlJoin from 'url-join'; + +jest.mock('../../src/classes/open'); const openMock = jest.mocked(open); -jest.mock("git-remote-origin-url"); +jest.mock('git-remote-origin-url'); const gitRemoteOriginUrlMock = jest.mocked(gitRemoteOriginUrl); -jest.mock("git-repo-info"); +jest.mock('git-repo-info'); const getRepoInfoMock = jest.mocked(getRepoInfo); describe(basename(__filename), () => { - const errorSpy = jest.spyOn(console, "error").mockReturnThis(); - const githubAddress = "https://github.com/skypesky/to-where-cli"; + const errorSpy = jest.spyOn(console, 'error').mockReturnThis(); + const githubAddress = 'https://github.com/skypesky/to-where-cli'; const gitRepoInfo: GitRepoInfo = { - branch: "master", - sha: "xxx", - abbreviatedSha: "", - tag: "", - lastTag: "", + branch: 'master', + sha: 'xxx', + abbreviatedSha: '', + tag: '', + lastTag: '', commitsSinceLastTag: 0, - committer: "skypesky", - committerDate: "", - author: "skypesky", - authorDate: "", - commitMessage: "", - root: "", - commonGitDir: "", - worktreeGitDir: "", + committer: 'skypesky', + committerDate: '', + author: 'skypesky', + authorDate: '', + commitMessage: '', + root: '', + commonGitDir: '', + worktreeGitDir: '', }; beforeEach(() => { openMock.mockReturnThis(); gitRemoteOriginUrlMock.mockResolvedValue( - "https://github.com/skypesky/to-where-cli.git" + 'https://github.com/skypesky/to-where-cli.git' ); getRepoInfoMock.mockReturnValue(gitRepoInfo); }); @@ -48,223 +48,225 @@ describe(basename(__filename), () => { jest.restoreAllMocks(); }); - it("should be throw an error when current directory is not a valid git repository", async () => { + it('should be throw an error when current directory is not a valid git repository', async () => { gitRemoteOriginUrlMock.mockImplementation(() => { - throw new Error("current directory is not a valid git repository"); + throw new Error('current directory is not a valid git repository'); }); const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "git", "open"]); + await program.parseAsync(['ts-node', 'index.ts', 'git', 'open']); expect(errorSpy).toHaveBeenCalledWith( `The current directory is not a valid git repository` ); }); - it("should be work when call tw git open", async () => { + it('should be work when call tw git open', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "git", "open"]); + await program.parseAsync(['ts-node', 'index.ts', 'git', 'open']); - expect(openMock).toBeCalledWith( - urlJoin(githubAddress, "tree", gitRepoInfo.branch) + expect(openMock).toHaveBeenCalledWith( + urlJoin(githubAddress, 'tree', gitRepoInfo.branch) ); }); - it("should be work when call tw git open -a", async () => { + it('should be work when call tw git open -a', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "git", "open", "-a"]); + await program.parseAsync(['ts-node', 'index.ts', 'git', 'open', '-a']); - expect(openMock).toBeCalledWith(urlJoin(githubAddress, "actions")); + expect(openMock).toHaveBeenCalledWith(urlJoin(githubAddress, 'actions')); }); - it("should be work when call tw git open -i", async () => { + it('should be work when call tw git open -i', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "git", "open", "-i"]); + await program.parseAsync(['ts-node', 'index.ts', 'git', 'open', '-i']); - expect(openMock).toBeCalledWith(urlJoin(githubAddress, "issues")); + expect(openMock).toHaveBeenCalledWith(urlJoin(githubAddress, 'issues')); }); - it("should be work when call tw git open -p", async () => { + it('should be work when call tw git open -p', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "git", "open", "-p"]); + await program.parseAsync(['ts-node', 'index.ts', 'git', 'open', '-p']); - expect(openMock).toBeCalledWith(urlJoin(githubAddress, "pulls")); + expect(openMock).toHaveBeenCalledWith(urlJoin(githubAddress, 'pulls')); }); - describe("#pull", () => { - it("should be work when call tw git open --pull", async () => { + describe('#pull', () => { + it('should be work when call tw git open --pull', async () => { const program = createProgram(); await program.parseAsync([ - "ts-node", - "index.ts", - "git", - "open", - "--pull", + 'ts-node', + 'index.ts', + 'git', + 'open', + '--pull', ]); - expect(openMock).toBeCalledWith( - urlJoin(githubAddress, "pull/new", gitRepoInfo.branch) + expect(openMock).toHaveBeenCalledWith( + urlJoin(githubAddress, 'pull/new', gitRepoInfo.branch) ); }); - it("should be work when call tw git open --pull $branchName", async () => { + it('should be work when call tw git open --pull $branchName', async () => { const program = createProgram(); await program.parseAsync([ - "ts-node", - "index.ts", - "git", - "open", - "--pull", - "test-branch", + 'ts-node', + 'index.ts', + 'git', + 'open', + '--pull', + 'test-branch', ]); - expect(openMock).toBeCalledWith( - urlJoin(githubAddress, "pull/new", "test-branch") + expect(openMock).toHaveBeenCalledWith( + urlJoin(githubAddress, 'pull/new', 'test-branch') ); }); }); - it("should be work when call tw git open --author", async () => { + it('should be work when call tw git open --author', async () => { const program = createProgram(); await program.parseAsync([ - "ts-node", - "index.ts", - "git", - "open", - "--author", + 'ts-node', + 'index.ts', + 'git', + 'open', + '--author', ]); - expect(openMock).toBeCalledWith( + expect(openMock).toHaveBeenCalledWith( urlJoin(new URL(githubAddress).origin, gitRepoInfo.author) ); }); - it("should be work when call tw git open -r", async () => { + it('should be work when call tw git open -r', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "git", "open", "-r"]); + await program.parseAsync(['ts-node', 'index.ts', 'git', 'open', '-r']); - expect(openMock).toBeCalledWith(urlJoin(githubAddress, "releases")); + expect(openMock).toHaveBeenCalledWith(urlJoin(githubAddress, 'releases')); }); - describe("#branch", () => { - it("should be work when call tw git open -b", async () => { + describe('#branch', () => { + it('should be work when call tw git open -b', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "git", "open", "-b"]); + await program.parseAsync(['ts-node', 'index.ts', 'git', 'open', '-b']); - expect(openMock).toBeCalledWith( - urlJoin(githubAddress, "tree", gitRepoInfo.branch) + expect(openMock).toHaveBeenCalledWith( + urlJoin(githubAddress, 'tree', gitRepoInfo.branch) ); }); - it("should be work when call tw git open -b hot-fix", async () => { + it('should be work when call tw git open -b hot-fix', async () => { const program = createProgram(); await program.parseAsync([ - "ts-node", - "index.ts", - "git", - "open", - "-b", - "hot-fix", + 'ts-node', + 'index.ts', + 'git', + 'open', + '-b', + 'hot-fix', ]); - expect(openMock).toBeCalledWith( - urlJoin(githubAddress, "tree", "hot-fix") + expect(openMock).toHaveBeenCalledWith( + urlJoin(githubAddress, 'tree', 'hot-fix') ); }); }); - it("should be work when call tw git open -c d7d60372b8e401cbaef264f675174d3127dee931", async () => { + it('should be work when call tw git open -c d7d60372b8e401cbaef264f675174d3127dee931', async () => { const program = createProgram(); - const commitId = "d7d60372b8e401cbaef264f675174d3127dee931"; + const commitId = 'd7d60372b8e401cbaef264f675174d3127dee931'; await program.parseAsync([ - "ts-node", - "index.ts", - "git", - "open", - "-c", + 'ts-node', + 'index.ts', + 'git', + 'open', + '-c', commitId, ]); - expect(openMock).toBeCalledWith(urlJoin(githubAddress, "commit", commitId)); + expect(openMock).toHaveBeenCalledWith( + urlJoin(githubAddress, 'commit', commitId) + ); }); - it("should be work when call tw git open --committer", async () => { + it('should be work when call tw git open --committer', async () => { const program = createProgram(); await program.parseAsync([ - "ts-node", - "index.ts", - "git", - "open", - "--committer", + 'ts-node', + 'index.ts', + 'git', + 'open', + '--committer', ]); - expect(openMock).toBeCalledWith( + expect(openMock).toHaveBeenCalledWith( urlJoin(new URL(githubAddress).origin, gitRepoInfo.committer) ); }); - it("should be work when call tw git open -f, --file README.md", async () => { + it('should be work when call tw git open -f, --file README.md', async () => { const program = createProgram(); await program.parseAsync([ - "ts-node", - "index.ts", - "git", - "open", - "-f", - "README.md", + 'ts-node', + 'index.ts', + 'git', + 'open', + '-f', + 'README.md', ]); - expect(openMock).toBeCalledWith( - urlJoin(urlJoin(githubAddress, "tree", gitRepoInfo.branch, "README.md")) + expect(openMock).toHaveBeenCalledWith( + urlJoin(urlJoin(githubAddress, 'tree', gitRepoInfo.branch, 'README.md')) ); }); - it("should be work when call tw git open --find", async () => { + it('should be work when call tw git open --find', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "git", "open", "--find"]); + await program.parseAsync(['ts-node', 'index.ts', 'git', 'open', '--find']); - expect(openMock).toBeCalledWith( - urlJoin(urlJoin(githubAddress, "find", gitRepoInfo.branch)) + expect(openMock).toHaveBeenCalledWith( + urlJoin(urlJoin(githubAddress, 'find', gitRepoInfo.branch)) ); }); - it("should be work when call tw git open -s", async () => { + it('should be work when call tw git open -s', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "git", "open", "-s"]); + await program.parseAsync(['ts-node', 'index.ts', 'git', 'open', '-s']); - expect(openMock).toBeCalledWith(urlJoin(githubAddress, "settings")); + expect(openMock).toHaveBeenCalledWith(urlJoin(githubAddress, 'settings')); }); - it("should be work when call tw git open --star", async () => { + it('should be work when call tw git open --star', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "git", "open", "--star"]); + await program.parseAsync(['ts-node', 'index.ts', 'git', 'open', '--star']); - expect(openMock).toBeCalledWith(urlJoin(githubAddress, "stargazers")); + expect(openMock).toHaveBeenCalledWith(urlJoin(githubAddress, 'stargazers')); }); - it("should be work when call tw git open --main", async () => { + it('should be work when call tw git open --main', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "git", "open", "--main"]); + await program.parseAsync(['ts-node', 'index.ts', 'git', 'open', '--main']); - expect(openMock).toBeCalledWith(urlJoin(githubAddress)); + expect(openMock).toHaveBeenCalledWith(urlJoin(githubAddress)); }); }); From f020287350a38455c88c7c0c86f763d606897696 Mon Sep 17 00:00:00 2001 From: skypesky <2565978507@qq.com> Date: Mon, 24 Jun 2024 23:11:07 +0800 Subject: [PATCH 02/16] feat: support npm -h --- src/cli/git/open.ts | 151 ---------------------------------------- src/cli/github/index.ts | 12 ++-- src/cli/npm/index.ts | 46 +++++++++--- src/cli/npm/search.ts | 48 ------------- 4 files changed, 44 insertions(+), 213 deletions(-) delete mode 100644 src/cli/git/open.ts delete mode 100644 src/cli/npm/search.ts diff --git a/src/cli/git/open.ts b/src/cli/git/open.ts deleted file mode 100644 index 21bff71..0000000 --- a/src/cli/git/open.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { Command } from "commander"; -import { ActionOptions } from "../../meta/actions-options"; -import urlJoin from "url-join"; -import getRepoInfo from "git-repo-info"; -import { logger } from "../../utils/logger"; -import { open } from "../../classes"; -import { isBoolean } from "lodash"; -import { getGitRemoteUrl } from "../../utils/git"; -import exec from "shelljs.exec"; - -const gitOpenCommand = new Command(); - -gitOpenCommand - .name("open") - .description("Open github repo page, issues page, pr page, ...etc") - .option("-a, --actions", "Open actions page", false) - .option("--author", "Open author profile page", false) - .option("-b, --branch [branch]", "Open branch page(default current branch)") - .option("-c, --commit [hash]", "Open commit page") - .option("--committer", "Open committer profile page", false) - .option("-f, --file ", "Open specific file page") - .option("--find", "Open the search file page", false) - .option("--first-commit", "Open first commit page", false) - .option("-i, --issue", "Open issues list page", false) - .option("-m, --main", "Open main branch page", false) - .option("-p, --pull-request", "Open pull request list page", false) - .option( - "--pull [branch]", - "Open the page for creating a pull request, the branch defaults to the current branch", - false - ) - .option("-r, --release", "Open release page", false) - .option("-s, --settings", "Open settings page", false) - .option("--star", "Open star page", false) - .action(async (options: ActionOptions) => { - const actions = options.actions; - const author = options.author; - const branch = options.branch; - const commit = options.commit; - const committer = options.committer; - const file = options.file; - const find = options.find; - const firstCommit = options.firstCommit; - const issue = options.issue; - const pullRequest = options.pullRequest; - const pull = options.pull; - const release = options.release; - const main = options.main; - const settings = options.settings; - const star = options.star; - - const addresses: string[] = []; - const githubAddress: string = await getGitRemoteUrl(); - - if (!githubAddress) { - logger.error(`The current directory is not a valid git repository`); - return; - } - - if (actions) { - addresses.push(urlJoin(githubAddress, "actions")); - } - - if (issue) { - addresses.push(urlJoin(githubAddress, "issues")); - } - - if (pullRequest) { - addresses.push(urlJoin(githubAddress, "pulls")); - } - - if (pull) { - const info = getRepoInfo(); - const branchName: string = isBoolean(pull) ? info.branch : pull; - addresses.push(urlJoin(githubAddress, "pull/new", branchName)); - } - - if (author) { - const info = getRepoInfo(); - const [$author] = info.author.split(" "); - addresses.push(urlJoin(new URL(githubAddress).origin, $author)); - } - - if (release) { - addresses.push(urlJoin(githubAddress, "releases")); - } - - if (branch) { - const info = getRepoInfo(); - const branchName = isBoolean(branch) ? info.branch : branch; - addresses.push(urlJoin(githubAddress, "tree", branchName)); - } - - if (commit) { - const info = getRepoInfo(); - const $commit: string = isBoolean(commit) ? info.sha : commit; - addresses.push(urlJoin(githubAddress, "commit", $commit)); - } - - if (committer) { - const info = getRepoInfo(); - const [$committer] = info.author.split(" "); - addresses.push(urlJoin(new URL(githubAddress).origin, $committer)); - } - - if (file) { - const info = getRepoInfo(); - // FIXME: 需要默认跳转到主分支 - const branchName = info.branch ?? ""; - addresses.push(urlJoin(githubAddress, "tree", branchName, file)); - } - - if (find) { - const info = getRepoInfo(); - // FIXME: 需要默认跳转到主分支 - const branchName = info.branch ?? ""; - addresses.push(urlJoin(githubAddress, "find", branchName)); - } - - if (firstCommit) { - const info = exec("git rev-list --max-parents=0 head"); - const firstCommitHash = info.stdout.trim(); - addresses.push(urlJoin(githubAddress, "commit", firstCommitHash)); - } - - if (settings) { - addresses.push(urlJoin(githubAddress, "settings")); - } - - if (star) { - addresses.push(urlJoin(githubAddress, "stargazers")); - } - - if (main) { - // 什么都不用做 - addresses.push(githubAddress); - } - - if (!addresses.length) { - const info = getRepoInfo(); - // FIXME: 需要默认跳转到主分支 - const branchName = info.branch ?? ""; - addresses.push(urlJoin(githubAddress, "tree", branchName)); - } - - for (const address of addresses) { - await open(address); - } - }); - -export { gitOpenCommand }; diff --git a/src/cli/github/index.ts b/src/cli/github/index.ts index 84b0fdf..fcc3726 100644 --- a/src/cli/github/index.ts +++ b/src/cli/github/index.ts @@ -1,14 +1,14 @@ -import { Command } from "commander"; -import { githubSearchCommand } from "./search"; +import { Command } from 'commander'; +import { githubSearchCommand } from './search'; const githubCommand = new Command(); githubCommand - .name("github") + .name('github') .description( - "Support using github search,etc.Under continuous development..." + 'Support using github search,etc.Under continuous development...' ) - .argument("[keyword]", "Search by keyword") - .addCommand(githubSearchCommand, { isDefault: true, hidden: true }); + .argument('[keyword]', 'Search by keyword') + .addCommand(githubSearchCommand, { isDefault: true, hidden: false }); export { githubCommand }; diff --git a/src/cli/npm/index.ts b/src/cli/npm/index.ts index 880ced3..009b736 100644 --- a/src/cli/npm/index.ts +++ b/src/cli/npm/index.ts @@ -1,18 +1,48 @@ -import { Command } from "commander"; -import { npmSearchCommand } from "./search"; +import { Command } from 'commander'; +import { open } from '../../classes'; function npmCommand() { const command = new Command(); command - .name("npm") - .description("Support using npm search,etc.Under continuous development...") - .argument("[keyword]", "Search by keyword") - .addCommand(npmSearchCommand(), { isDefault: true, hidden: true }); + .name('npm') + .description('Support using npm search,etc.Under continuous development...') + .argument('[packageName]', 'Search by package name') + .option('-c,--code', 'Open package code page') + .option('-d,--dependencies', 'Open package dependencies page') + .option('-v,--version', 'Open package versions page') + .option('-r,--run-kit', 'Open run kit page') + .action( + async ( + packageName: string, + options: { + version: boolean; + code: boolean; + dependencies: boolean; + runKit: boolean; + } + ) => { + let pageUrl: string = null; - return command; -} + if (packageName && options.version) { + pageUrl = `https://www.npmjs.com/package/${packageName}?activeTab=versions`; + } else if (packageName && options.code) { + pageUrl = `https://www.npmjs.com/package/${packageName}?activeTab=code`; + } else if (packageName && options.dependencies) { + pageUrl = `https://www.npmjs.com/package/${packageName}?activeTab=dependencies`; + } else if (packageName && options.runKit) { + pageUrl = `https://npm.runkit.com/${packageName}`; + } else if (packageName) { + pageUrl = `https://www.npmjs.com/search?q=${packageName}`; + } else { + pageUrl = `https://www.npmjs.com`; + } + await open(pageUrl); + } + ); + return command; +} export { npmCommand }; diff --git a/src/cli/npm/search.ts b/src/cli/npm/search.ts deleted file mode 100644 index 5e8a4b6..0000000 --- a/src/cli/npm/search.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Command } from 'commander'; -import { open } from '../../classes'; - -function npmSearchCommand(): Command { - const command = new Command(); - - command - .name('search') - .argument('[keyword]', 'Search by keyword') - .option('-c,--code', 'Open package code page') - .option('-d,--dependencies', 'Open package dependencies page') - .option('-v,--version', 'Open package versions page') - .option('-r,--run-kit', 'Open run kit page') - .description('Search by keyword') - .action( - async ( - keyword: string, - options: { - version: boolean; - code: boolean; - dependencies: boolean; - runKit: boolean; - } - ) => { - let pageUrl: string = null; - - if (keyword && options.version) { - pageUrl = `https://www.npmjs.com/package/${keyword}?activeTab=versions`; - } else if (keyword && options.code) { - pageUrl = `https://www.npmjs.com/package/${keyword}?activeTab=code`; - } else if (keyword && options.dependencies) { - pageUrl = `https://www.npmjs.com/package/${keyword}?activeTab=dependencies`; - } else if (keyword && options.runKit) { - pageUrl = `https://npm.runkit.com/${keyword}`; - } else if (keyword) { - pageUrl = `https://www.npmjs.com/search?q=${keyword}`; - } else { - pageUrl = `https://www.npmjs.com`; - } - - await open(pageUrl); - } - ); - - return command; -} - -export { npmSearchCommand }; From 865e21154ad91130eed93b082c485cce6d13ff46 Mon Sep 17 00:00:00 2001 From: skypesky <2565978507@qq.com> Date: Mon, 24 Jun 2024 23:27:49 +0800 Subject: [PATCH 03/16] feat: support github -h --- src/cli/github/index.ts | 8 ++++++-- src/cli/github/search.ts | 16 ---------------- 2 files changed, 6 insertions(+), 18 deletions(-) delete mode 100644 src/cli/github/search.ts diff --git a/src/cli/github/index.ts b/src/cli/github/index.ts index fcc3726..2261c96 100644 --- a/src/cli/github/index.ts +++ b/src/cli/github/index.ts @@ -1,5 +1,5 @@ import { Command } from 'commander'; -import { githubSearchCommand } from './search'; +import { open } from '../../classes'; const githubCommand = new Command(); @@ -9,6 +9,10 @@ githubCommand 'Support using github search,etc.Under continuous development...' ) .argument('[keyword]', 'Search by keyword') - .addCommand(githubSearchCommand, { isDefault: true, hidden: false }); + .action(async (keyword = '') => { + const searchUrl = `https://github.com/search?q=${keyword}`; + + await open(searchUrl); + }); export { githubCommand }; diff --git a/src/cli/github/search.ts b/src/cli/github/search.ts deleted file mode 100644 index 2aa5c9d..0000000 --- a/src/cli/github/search.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Command } from "commander"; -import { open } from "../../classes"; - -const githubSearchCommand = new Command(); - -githubSearchCommand - .name("search") - .argument("[keyword]", "Search by keyword") - .description("Search by keyword") - .action(async (keyword = "") => { - const searchUrl = `https://github.com/search?q=${keyword}`; - - await open(searchUrl); - }); - -export { githubSearchCommand }; From fefde87d11ac1a6e08e4b5dda98c00164254b985 Mon Sep 17 00:00:00 2001 From: skypesky <2565978507@qq.com> Date: Tue, 25 Jun 2024 22:47:08 +0800 Subject: [PATCH 04/16] feat: support github -h --- src/cli/google/index.ts | 16 ++++++++++------ src/cli/google/search.ts | 12 ++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/cli/google/index.ts b/src/cli/google/index.ts index 382d769..7267d8a 100644 --- a/src/cli/google/index.ts +++ b/src/cli/google/index.ts @@ -1,14 +1,18 @@ -import { Command } from "commander"; -import { googleSearchCommand } from "./search"; +import { Command } from 'commander'; +import { open } from '../../classes'; const googleCommand = new Command(); googleCommand - .name("google") + .name('google') .description( - "Support using google search,etc.Under continuous development..." + 'Support using google search,etc.Under continuous development...' ) - .argument("[keyword]", "Search by keyword") - .addCommand(googleSearchCommand, { isDefault: true, hidden: true }); + .argument('[keyword]', 'Search by keyword') + .action(async (keyword = '') => { + const searchUrl = `https://www.google.com/search?q=${keyword}`; + + await open(searchUrl); + }); export { googleCommand }; diff --git a/src/cli/google/search.ts b/src/cli/google/search.ts index 7910685..34baea3 100644 --- a/src/cli/google/search.ts +++ b/src/cli/google/search.ts @@ -1,13 +1,13 @@ -import { Command } from "commander"; -import { open } from "../../classes"; +import { Command } from 'commander'; +import { open } from '../../classes'; const googleSearchCommand = new Command(); googleSearchCommand - .name("search") - .argument("[keyword]", "Search by keyword") - .description("Search by keyword") - .action(async (keyword = "") => { + .name('search') + .description('Search by keyword') + .argument('[keyword]', 'Search by keyword') + .action(async (keyword = '') => { const searchUrl = `https://www.google.com/search?q=${keyword}`; await open(searchUrl); From 1f99fba0be1f81fca052659b60c0788aae252d8a Mon Sep 17 00:00:00 2001 From: skypesky <2565978507@qq.com> Date: Tue, 25 Jun 2024 22:50:09 +0800 Subject: [PATCH 05/16] feat: support baidu & bing -h --- src/cli/baidu/index.ts | 15 +++++++++------ src/cli/baidu/search.ts | 16 ---------------- src/cli/bing/index.ts | 15 +++++++++------ src/cli/bing/search.ts | 16 ---------------- src/cli/google/search.ts | 16 ---------------- 5 files changed, 18 insertions(+), 60 deletions(-) delete mode 100644 src/cli/baidu/search.ts delete mode 100644 src/cli/bing/search.ts delete mode 100644 src/cli/google/search.ts diff --git a/src/cli/baidu/index.ts b/src/cli/baidu/index.ts index 54a2b3f..079f2fe 100644 --- a/src/cli/baidu/index.ts +++ b/src/cli/baidu/index.ts @@ -1,12 +1,15 @@ -import { Command } from "commander"; -import { baiduSearchCommand } from "./search"; +import { Command } from 'commander'; const baiduCommand = new Command(); baiduCommand - .name("baidu") - .description("Support using baidu search,etc.Under continuous development...") - .argument("[keyword]", "Search by keyword") - .addCommand(baiduSearchCommand, { isDefault: true, hidden: true }); + .name('baidu') + .description('Support using baidu search,etc.Under continuous development...') + .argument('[keyword]', 'Search by keyword') + .action(async (keyword = '') => { + const searchUrl = `https://www.baidu.com/s?wd=${keyword}`; + + await open(searchUrl); + }); export { baiduCommand }; diff --git a/src/cli/baidu/search.ts b/src/cli/baidu/search.ts deleted file mode 100644 index 30a348f..0000000 --- a/src/cli/baidu/search.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Command } from "commander"; -import { open } from "../../classes"; - -const baiduSearchCommand = new Command(); - -baiduSearchCommand - .name("search") - .argument("[keyword]", "Search by keyword") - .description("Search by keyword") - .action(async (keyword = "") => { - const searchUrl = `https://www.baidu.com/s?wd=${keyword}`; - - await open(searchUrl); - }); - -export { baiduSearchCommand }; diff --git a/src/cli/bing/index.ts b/src/cli/bing/index.ts index e5de1ba..75be951 100644 --- a/src/cli/bing/index.ts +++ b/src/cli/bing/index.ts @@ -1,12 +1,15 @@ -import { Command } from "commander"; -import { bingSearchCommand } from "./search"; +import { Command } from 'commander'; const bingCommand = new Command(); bingCommand - .name("bing") - .description("Support using bing search,etc.Under continuous development...") - .argument("[keyword]", "Search by keyword") - .addCommand(bingSearchCommand, { isDefault: true, hidden: true }); + .name('bing') + .description('Support using bing search,etc.Under continuous development...') + .argument('[keyword]', 'Search by keyword') + .action(async (keyword = '') => { + const searchUrl = `https://www.bing.com/search?q=${keyword}`; + + await open(searchUrl); + }); export { bingCommand }; diff --git a/src/cli/bing/search.ts b/src/cli/bing/search.ts deleted file mode 100644 index 34cf3ca..0000000 --- a/src/cli/bing/search.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Command } from "commander"; -import { open } from "../../classes"; - -const bingSearchCommand = new Command(); - -bingSearchCommand - .name("search") - .argument("[keyword]", "Search by keyword") - .description("Search by keyword") - .action(async (keyword = "") => { - const searchUrl = `https://www.bing.com/search?q=${keyword}`; - - await open(searchUrl); - }); - -export { bingSearchCommand }; diff --git a/src/cli/google/search.ts b/src/cli/google/search.ts deleted file mode 100644 index 34baea3..0000000 --- a/src/cli/google/search.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Command } from 'commander'; -import { open } from '../../classes'; - -const googleSearchCommand = new Command(); - -googleSearchCommand - .name('search') - .description('Search by keyword') - .argument('[keyword]', 'Search by keyword') - .action(async (keyword = '') => { - const searchUrl = `https://www.google.com/search?q=${keyword}`; - - await open(searchUrl); - }); - -export { googleSearchCommand }; From 238c8ffab7f34cd84e7ee2ddc3e363af8a03889c Mon Sep 17 00:00:00 2001 From: skypesky <2565978507@qq.com> Date: Tue, 25 Jun 2024 22:51:31 +0800 Subject: [PATCH 06/16] fix: test error v3 --- src/cli/baidu/index.ts | 1 + src/cli/bing/index.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/cli/baidu/index.ts b/src/cli/baidu/index.ts index 079f2fe..911aa0b 100644 --- a/src/cli/baidu/index.ts +++ b/src/cli/baidu/index.ts @@ -1,4 +1,5 @@ import { Command } from 'commander'; +import { open } from '../../classes'; const baiduCommand = new Command(); diff --git a/src/cli/bing/index.ts b/src/cli/bing/index.ts index 75be951..e0acc14 100644 --- a/src/cli/bing/index.ts +++ b/src/cli/bing/index.ts @@ -1,4 +1,5 @@ import { Command } from 'commander'; +import { open } from '../../classes'; const bingCommand = new Command(); From a3f8f83f293430e9bcb9b7b6a52de8c049a3d197 Mon Sep 17 00:00:00 2001 From: JianChao Date: Wed, 4 Sep 2024 09:39:28 +0800 Subject: [PATCH 07/16] feat: use bun --- .github/workflows/unit-test.yml | 26 +- .vscode/settings.json | 1 - bun.lockb | Bin 0 -> 197776 bytes package.json | 21 +- pnpm-lock.yaml | 4443 ------------------------------- src/cli/git/index.ts | 18 +- 6 files changed, 37 insertions(+), 4472 deletions(-) create mode 100755 bun.lockb delete mode 100644 pnpm-lock.yaml diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 18becb8..45835a4 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -5,7 +5,7 @@ on: branches: - release - master - + jobs: integration: runs-on: ubuntu-latest @@ -13,24 +13,22 @@ jobs: if: "! contains(toJSON(github.event.commits.*.message), '[skip actions]')" steps: - - name: Checkout repo - uses: actions/checkout@v3 - - - uses: pnpm/action-setup@v2 - with: - version: 7 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - cache: "pnpm" - - name: Install deps - run: pnpm install + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Install bun + uses: oven-sh/setup-bun@v1 + + - name: Install dependencies + run: bun install - name: Lint package - run: pnpm run lint + run: bun run lint - name: Run unit test - run: pnpm run test + run: bun run test diff --git a/.vscode/settings.json b/.vscode/settings.json index abe1b92..48320e9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,7 +5,6 @@ "gitbook", "jianchao", "Metas", - "pnpm", "predebug", "skypesky" ] diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..4ab5f8a979878b4f48298d216ef078cb2c2d79ed GIT binary patch literal 197776 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Ğ{_O~Attbn%>U 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 OUqDKYtLFdd-~Rz)*O}A+ literal 0 HcmV?d00001 diff --git a/package.json b/package.json index aec6d8f..7f0fe65 100644 --- a/package.json +++ b/package.json @@ -29,20 +29,21 @@ "dist" ], "scripts": { - "reinstall": "rimraf node_modules && pnpm install", - "predebug": "npm run build", + "preinstall": "npx only-allow bun", + "reinstall": "rimraf node_modules && bun install", + "predebug": "bun run build", "debug": "node ./dist/index.js", "lint": "eslint src/**/*.ts", - "lint:fix": "npm run lint -- --fix", + "lint:fix": "bun run lint -- --fix", "test": "jest --forceExit --detectOpenHandles", - "coverage": "npm run test -- --coverage", + "coverage": "bun run test -- --coverage", "clean": "rimraf dist", - "prebuild": "npm run clean", + "prebuild": "bun run clean", "build": "node esbuild.config.cjs", - "build:watch": "npm run build -- -w", - "deploy": "npm run build && npm uninstall -g to-where-cli && npm install -g . -f", + "build:watch": "bun run build -- -w", + "deploy": "bun run build && npm uninstall -g to-where-cli && npm install -g . -f", "deploy:remote": "npm uninstall -g to-where-cli && npm install -g to-where-cli", - "verify": "npm run lint && npm run test", + "verify": "bun run lint && bun run test", "bump-version": "ver-bump -f package.json -n", "show:version": "npm show to-where-cli version" }, @@ -75,7 +76,7 @@ "@types/node": "^18.11.7", "@types/open": "^6.2.1", "@types/prompts": "^2.4.2", - "@types/shelljs.exec": "^1.1.0", + "@types/shelljs.exec": "^1.1.3", "@types/url-join": "^4.0.1", "@typescript-eslint/eslint-plugin": "^5.42.1", "@typescript-eslint/parser": "^5.42.1", @@ -89,4 +90,4 @@ "typescript": "^4.8.4", "ver-bump": "^1.1.8" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index f73b064..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,4443 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@types/hosted-git-info': - specifier: ^3.0.2 - version: 3.0.5 - chalk: - specifier: ~4 - version: 4.1.2 - commander: - specifier: ^9.4.1 - version: 9.5.0 - current-os: - specifier: ^1.1.0 - version: 1.1.0 - dayjs: - specifier: ^1.11.7 - version: 1.11.11 - fs-extra: - specifier: ^10.1.0 - version: 10.1.0 - git-remote-origin-url: - specifier: 3.1.0 - version: 3.1.0 - git-repo-info: - specifier: ^2.1.1 - version: 2.1.1 - hosted-git-info: - specifier: ^6.1.1 - version: 6.1.1 - joi: - specifier: ^17.9.1 - version: 17.13.1 - js-yaml: - specifier: ^4.1.0 - version: 4.1.0 - lodash: - specifier: ^4.17.21 - version: 4.17.21 - open: - specifier: ^8.4.0 - version: 8.4.2 - prompts: - specifier: ^2.4.2 - version: 2.4.2 - shelljs.exec: - specifier: ^1.1.8 - version: 1.1.8 - ufo: - specifier: ^1.5.3 - version: 1.5.3 - url-join: - specifier: 4.0.1 - version: 4.0.1 - devDependencies: - '@types/chalk': - specifier: ^2.2.0 - version: 2.2.0 - '@types/commander': - specifier: ^2.12.2 - version: 2.12.2 - '@types/fs-extra': - specifier: ^9.0.13 - version: 9.0.13 - '@types/jest': - specifier: ^29.2.2 - version: 29.5.12 - '@types/js-yaml': - specifier: ^4.0.5 - version: 4.0.9 - '@types/lodash': - specifier: ^4.14.187 - version: 4.17.4 - '@types/node': - specifier: ^18.11.7 - version: 18.19.34 - '@types/open': - specifier: ^6.2.1 - version: 6.2.1 - '@types/prompts': - specifier: ^2.4.2 - version: 2.4.9 - '@types/shelljs.exec': - specifier: ^1.1.0 - version: 1.1.3 - '@types/url-join': - specifier: ^4.0.1 - version: 4.0.3 - '@typescript-eslint/eslint-plugin': - specifier: ^5.42.1 - version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5) - '@typescript-eslint/parser': - specifier: ^5.42.1 - version: 5.62.0(eslint@8.57.0)(typescript@4.9.5) - esbuild: - specifier: ^0.16.4 - version: 0.16.17 - eslint: - specifier: '8' - version: 8.57.0 - jest: - specifier: ^29.3.1 - version: 29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)) - jest-environment-jsdom: - specifier: ^29.3.1 - version: 29.7.0 - rimraf: - specifier: ^3.0.2 - version: 3.0.2 - ts-jest: - specifier: ^29.0.3 - version: 29.1.4(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(esbuild@0.16.17)(jest@29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)))(typescript@4.9.5) - ts-node: - specifier: ^10.9.1 - version: 10.9.2(@types/node@18.19.34)(typescript@4.9.5) - typescript: - specifier: ^4.8.4 - version: 4.9.5 - ver-bump: - specifier: ^1.1.8 - version: 1.1.8 - -packages: - - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.24.7': - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.24.7': - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.24.7': - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.24.7': - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-plugin-utils@7.24.7': - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.24.7': - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} - engines: {node: '>=6.9.0'} - - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.24.7': - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.24.7': - resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@esbuild/android-arm64@0.16.17': - resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.16.17': - resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.16.17': - resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.16.17': - resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.16.17': - resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.16.17': - resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.16.17': - resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.16.17': - resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.16.17': - resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.16.17': - resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.16.17': - resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.16.17': - resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.16.17': - resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.16.17': - resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.16.17': - resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.16.17': - resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.16.17': - resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.16.17': - resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.16.17': - resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.16.17': - resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.16.17': - resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.16.17': - resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.10.1': - resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@hapi/hoek@9.3.0': - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - - '@hapi/topo@5.1.0': - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - - '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@sideway/address@4.1.5': - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} - - '@sideway/formula@3.0.1': - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - - '@sideway/pinpoint@2.0.0': - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - - '@types/chalk@2.2.0': - resolution: {integrity: sha512-1zzPV9FDe1I/WHhRkf9SNgqtRJWZqrBWgu7JGveuHmmyR9CnAPCie2N/x+iHrgnpYBIcCJWHBoMRv2TRWktsvw==} - deprecated: This is a stub types definition for chalk (https://github.com/chalk/chalk). chalk provides its own type definitions, so you don't need @types/chalk installed! - - '@types/commander@2.12.2': - resolution: {integrity: sha512-0QEFiR8ljcHp9bAbWxecjVRuAMr16ivPiGOw6KFQBVrVd0RQIcM3xKdRisH2EDWgVWujiYtHwhSkSUoAAGzH7Q==} - deprecated: This is a stub types definition for commander (https://github.com/tj/commander.js). commander provides its own type definitions, so you don't need @types/commander installed! - - '@types/fs-extra@9.0.13': - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} - - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - - '@types/hosted-git-info@3.0.5': - resolution: {integrity: sha512-Dmngh7U003cOHPhKGyA7LWqrnvcTyILNgNPmNCxlx7j8MIi54iBliiT8XqVLIQ3GchoOjVAyBzNJVyuaJjqokg==} - - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - - '@types/jest@29.5.12': - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} - - '@types/js-yaml@4.0.9': - resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} - - '@types/jsdom@20.0.1': - resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/lodash@4.17.4': - resolution: {integrity: sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==} - - '@types/node@18.19.34': - resolution: {integrity: sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==} - - '@types/open@6.2.1': - resolution: {integrity: sha512-CzV16LToFaKwm1FfplVTF08E3pznw4fQNCQ87N+A1RU00zu/se7npvb6IC9db3/emnSThQ6R8qFKgrei2M4EYQ==} - deprecated: This is a stub types definition. open provides its own type definitions, so you do not need this installed. - - '@types/prompts@2.4.9': - resolution: {integrity: sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA==} - - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - - '@types/shelljs.exec@1.1.3': - resolution: {integrity: sha512-nBivoW5LEDRZjyVVgJxhpRYbPs0tOr5oaBaCniclLG1QBxc4LNbyrMtvLvn+0NSNvg6w8bd4dzcTzADA3nbByg==} - - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - - '@types/url-join@4.0.3': - resolution: {integrity: sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww==} - - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.32': - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - - '@typescript-eslint/eslint-plugin@5.62.0': - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@5.62.0': - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@5.62.0': - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/type-utils@5.62.0': - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/typescript-estree@5.62.0': - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@5.62.0': - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - - '@typescript-eslint/visitor-keys@5.62.0': - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - deprecated: Use your platform's native atob() and btoa() methods instead - - acorn-globals@7.0.1: - resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - babel-preset-current-node-syntax@1.0.1: - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - - bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - caniuse-lite@1.0.30001629: - resolution: {integrity: sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - - cjs-module-lexer@1.3.1: - resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - - collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - - cssom@0.5.0: - resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} - - cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - - current-os@1.1.0: - resolution: {integrity: sha512-aNI+smFPOuGxhlPW63HiU082uJjWOQPelNCQpWPWAhHTYMELihHMiqG3UFixasCVGBEJKmEupCrv7PK8Py+IRg==} - engines: {node: '>= 0.10.0'} - - data-urls@3.0.2: - resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} - engines: {node: '>=12'} - - dayjs@1.11.11: - resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} - - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - - dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - - domexception@4.0.0: - resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} - engines: {node: '>=12'} - deprecated: Use your platform's native DOMException instead - - electron-to-chromium@1.4.792: - resolution: {integrity: sha512-rkg5/N3L+Y844JyfgPUyuKK0Hk0efo3JNxUDKvz3HgP6EmN4rNGhr2D8boLsfTV/hGo7ZGAL8djw+jlg99zQyA==} - - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - esbuild@0.16.17: - resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} - engines: {node: '>=12'} - hasBin: true - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - - form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - git-remote-origin-url@3.1.0: - resolution: {integrity: sha512-yVSfaTMO7Bqk6Xx3696ufNfjdrajX7Ig9GuAeO2V3Ji7stkDoBNFldnWIAsy0qviUd0Z+X2P6ziJENKztW7cBQ==} - engines: {node: '>=8'} - - git-repo-info@2.1.1: - resolution: {integrity: sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==} - engines: {node: '>= 4.0'} - - gitconfiglocal@2.1.0: - resolution: {integrity: sha512-qoerOEliJn3z+Zyn1HW2F6eoYJqKwS6MgC9cztTLUB/xLWX8gD/6T60pKn4+t/d6tP7JlybI7Z3z+I572CR/Vg==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hosted-git-info@6.1.1: - resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - html-encoding-sniffer@3.0.0: - resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} - engines: {node: '>=12'} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@6.0.2: - resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} - engines: {node: '>=10'} - - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} - - jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-environment-jsdom@29.7.0: - resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - joi@17.13.1: - resolution: {integrity: sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsdom@20.0.3: - resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} - engines: {node: '>=14'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - nwsapi@2.2.10: - resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - - psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - - resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} - engines: {node: '>=10'} - hasBin: true - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shelljs.exec@1.1.8: - resolution: {integrity: sha512-vFILCw+lzUtiwBAHV8/Ex8JsFjelFMdhONIsgKNLgTzeRckp2AOYRQtHJE/9LhNvdMmE27AGtzWx0+DHpwIwSw==} - engines: {node: '>= 4.0.0'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} - - tr46@3.0.0: - resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} - engines: {node: '>=12'} - - ts-jest@29.1.4: - resolution: {integrity: sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/transform': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - - typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - - ufo@1.5.3: - resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - url-join@4.0.1: - resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} - - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} - engines: {node: '>=10.12.0'} - - ver-bump@1.1.8: - resolution: {integrity: sha512-nvb9JnXRAEIHdL6td8/YkXfsxfTiUIcwdp9G/CIcHEQkAK3HL8D0a/PDLFiqNS8Ed/D0zOFpXN3KzXAgNySvog==} - hasBin: true - - w3c-xmlserializer@4.0.0: - resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} - engines: {node: '>=14'} - - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - - whatwg-encoding@2.0.0: - resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} - engines: {node: '>=12'} - - whatwg-mimetype@3.0.0: - resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} - engines: {node: '>=12'} - - whatwg-url@11.0.0: - resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} - engines: {node: '>=12'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - ws@8.17.0: - resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xml-name-validator@4.0.0: - resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} - engines: {node: '>=12'} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - -snapshots: - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - - '@babel/compat-data@7.24.7': {} - - '@babel/core@7.24.7': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - convert-source-map: 2.0.0 - debug: 4.3.5 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.24.7': - dependencies: - '@babel/types': 7.24.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-compilation-targets@7.24.7': - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.0 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-function-name@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.24.7': {} - - '@babel/helper-simple-access@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-string-parser@7.24.7': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/helper-validator-option@7.24.7': {} - - '@babel/helpers@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/template@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/traverse@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.24.7': - dependencies: - '@babel/helper-string-parser': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@bcoe/v8-coverage@0.2.3': {} - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@esbuild/android-arm64@0.16.17': - optional: true - - '@esbuild/android-arm@0.16.17': - optional: true - - '@esbuild/android-x64@0.16.17': - optional: true - - '@esbuild/darwin-arm64@0.16.17': - optional: true - - '@esbuild/darwin-x64@0.16.17': - optional: true - - '@esbuild/freebsd-arm64@0.16.17': - optional: true - - '@esbuild/freebsd-x64@0.16.17': - optional: true - - '@esbuild/linux-arm64@0.16.17': - optional: true - - '@esbuild/linux-arm@0.16.17': - optional: true - - '@esbuild/linux-ia32@0.16.17': - optional: true - - '@esbuild/linux-loong64@0.16.17': - optional: true - - '@esbuild/linux-mips64el@0.16.17': - optional: true - - '@esbuild/linux-ppc64@0.16.17': - optional: true - - '@esbuild/linux-riscv64@0.16.17': - optional: true - - '@esbuild/linux-s390x@0.16.17': - optional: true - - '@esbuild/linux-x64@0.16.17': - optional: true - - '@esbuild/netbsd-x64@0.16.17': - optional: true - - '@esbuild/openbsd-x64@0.16.17': - optional: true - - '@esbuild/sunos-x64@0.16.17': - optional: true - - '@esbuild/win32-arm64@0.16.17': - optional: true - - '@esbuild/win32-ia32@0.16.17': - optional: true - - '@esbuild/win32-x64@0.16.17': - optional: true - - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.10.1': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.5 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.57.0': {} - - '@hapi/hoek@9.3.0': {} - - '@hapi/topo@5.1.0': - dependencies: - '@hapi/hoek': 9.3.0 - - '@humanwhocodes/config-array@0.11.14': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.3': {} - - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - - '@istanbuljs/schema@0.1.3': {} - - '@jest/console@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@types/node': 18.19.34 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5))': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.34 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.7 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.34 - jest-mock: 29.7.0 - - '@jest/expect-utils@29.7.0': - dependencies: - jest-get-type: 29.6.3 - - '@jest/expect@29.7.0': - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 18.19.34 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - '@jest/globals@29.7.0': - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/reporters@29.7.0': - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 18.19.34 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.2.0 - transitivePeerDependencies: - - supports-color - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - - '@jest/source-map@29.6.3': - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/test-result@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - - '@jest/test-sequencer@29.7.0': - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - - '@jest/transform@29.7.0': - dependencies: - '@babel/core': 7.24.7 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.7 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 18.19.34 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - - '@sideway/address@4.1.5': - dependencies: - '@hapi/hoek': 9.3.0 - - '@sideway/formula@3.0.1': {} - - '@sideway/pinpoint@2.0.0': {} - - '@sinclair/typebox@0.27.8': {} - - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - - '@tootallnate/once@2.0.0': {} - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 - - '@types/babel__generator@7.6.8': - dependencies: - '@babel/types': 7.24.7 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - - '@types/babel__traverse@7.20.6': - dependencies: - '@babel/types': 7.24.7 - - '@types/chalk@2.2.0': - dependencies: - chalk: 4.1.2 - - '@types/commander@2.12.2': - dependencies: - commander: 9.5.0 - - '@types/fs-extra@9.0.13': - dependencies: - '@types/node': 18.19.34 - - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 18.19.34 - - '@types/hosted-git-info@3.0.5': {} - - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - - '@types/jest@29.5.12': - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - - '@types/js-yaml@4.0.9': {} - - '@types/jsdom@20.0.1': - dependencies: - '@types/node': 18.19.34 - '@types/tough-cookie': 4.0.5 - parse5: 7.1.2 - - '@types/json-schema@7.0.15': {} - - '@types/lodash@4.17.4': {} - - '@types/node@18.19.34': - dependencies: - undici-types: 5.26.5 - - '@types/open@6.2.1': - dependencies: - open: 8.4.2 - - '@types/prompts@2.4.9': - dependencies: - '@types/node': 18.19.34 - kleur: 3.0.3 - - '@types/semver@7.5.8': {} - - '@types/shelljs.exec@1.1.3': - dependencies: - '@types/node': 18.19.34 - - '@types/stack-utils@2.0.3': {} - - '@types/tough-cookie@4.0.5': {} - - '@types/url-join@4.0.3': {} - - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.32': - dependencies: - '@types/yargs-parser': 21.0.3 - - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5)': - dependencies: - '@eslint-community/regexpp': 4.10.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) - debug: 4.3.5 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare-lite: 1.4.0 - semver: 7.6.2 - tsutils: 3.21.0(typescript@4.9.5) - optionalDependencies: - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5)': - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - debug: 4.3.5 - eslint: 8.57.0 - optionalDependencies: - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@4.9.5)': - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) - debug: 4.3.5 - eslint: 8.57.0 - tsutils: 3.21.0(typescript@4.9.5) - optionalDependencies: - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@5.62.0': {} - - '@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.5 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.6.2 - tsutils: 3.21.0(typescript@4.9.5) - optionalDependencies: - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@4.9.5)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) - eslint: 8.57.0 - eslint-scope: 5.1.1 - semver: 7.6.2 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - - '@ungap/structured-clone@1.2.0': {} - - abab@2.0.6: {} - - acorn-globals@7.0.1: - dependencies: - acorn: 8.11.3 - acorn-walk: 8.3.2 - - acorn-jsx@5.3.2(acorn@8.11.3): - dependencies: - acorn: 8.11.3 - - acorn-walk@8.3.2: {} - - acorn@8.11.3: {} - - agent-base@6.0.2: - dependencies: - debug: 4.3.5 - transitivePeerDependencies: - - supports-color - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - - ansi-regex@5.0.1: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@5.2.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@4.1.3: {} - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - - argparse@2.0.1: {} - - array-union@2.1.0: {} - - asynckit@0.4.0: {} - - babel-jest@29.7.0(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.7) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.24.7 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.6 - - babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) - - babel-preset-jest@29.6.3(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) - - balanced-match@1.0.2: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.23.0: - dependencies: - caniuse-lite: 1.0.30001629 - electron-to-chromium: 1.4.792 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.0) - - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 - - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - - buffer-from@1.1.2: {} - - callsites@3.1.0: {} - - camelcase@5.3.1: {} - - camelcase@6.3.0: {} - - caniuse-lite@1.0.30001629: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - char-regex@1.0.2: {} - - ci-info@3.9.0: {} - - cjs-module-lexer@1.3.1: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - co@4.6.0: {} - - collect-v8-coverage@1.0.2: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.3: {} - - color-name@1.1.4: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@9.5.0: {} - - concat-map@0.0.1: {} - - convert-source-map@2.0.0: {} - - create-jest@29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - create-require@1.1.1: {} - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - cssom@0.3.8: {} - - cssom@0.5.0: {} - - cssstyle@2.3.0: - dependencies: - cssom: 0.3.8 - - current-os@1.1.0: {} - - data-urls@3.0.2: - dependencies: - abab: 2.0.6 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - - dayjs@1.11.11: {} - - debug@4.3.5: - dependencies: - ms: 2.1.2 - - decimal.js@10.4.3: {} - - dedent@1.5.3: {} - - deep-is@0.1.4: {} - - deepmerge@4.3.1: {} - - define-lazy-prop@2.0.0: {} - - delayed-stream@1.0.0: {} - - detect-newline@3.1.0: {} - - diff-sequences@29.6.3: {} - - diff@4.0.2: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - domexception@4.0.0: - dependencies: - webidl-conversions: 7.0.0 - - electron-to-chromium@1.4.792: {} - - emittery@0.13.1: {} - - emoji-regex@8.0.0: {} - - entities@4.5.0: {} - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - esbuild@0.16.17: - optionalDependencies: - '@esbuild/android-arm': 0.16.17 - '@esbuild/android-arm64': 0.16.17 - '@esbuild/android-x64': 0.16.17 - '@esbuild/darwin-arm64': 0.16.17 - '@esbuild/darwin-x64': 0.16.17 - '@esbuild/freebsd-arm64': 0.16.17 - '@esbuild/freebsd-x64': 0.16.17 - '@esbuild/linux-arm': 0.16.17 - '@esbuild/linux-arm64': 0.16.17 - '@esbuild/linux-ia32': 0.16.17 - '@esbuild/linux-loong64': 0.16.17 - '@esbuild/linux-mips64el': 0.16.17 - '@esbuild/linux-ppc64': 0.16.17 - '@esbuild/linux-riscv64': 0.16.17 - '@esbuild/linux-s390x': 0.16.17 - '@esbuild/linux-x64': 0.16.17 - '@esbuild/netbsd-x64': 0.16.17 - '@esbuild/openbsd-x64': 0.16.17 - '@esbuild/sunos-x64': 0.16.17 - '@esbuild/win32-arm64': 0.16.17 - '@esbuild/win32-ia32': 0.16.17 - '@esbuild/win32-x64': 0.16.17 - - escalade@3.1.2: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@2.0.0: {} - - escape-string-regexp@4.0.0: {} - - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint@8.57.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.5 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@9.6.1: - dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 - - esprima@4.0.1: {} - - esquery@1.5.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - execa@5.1.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - exit@0.1.2: {} - - expect@29.7.0: - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.2: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.7 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.17.1: - dependencies: - reusify: 1.0.4 - - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@3.2.0: - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - - flatted@3.3.1: {} - - form-data@4.0.0: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - - fs-extra@10.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-package-type@0.1.0: {} - - get-stream@6.0.1: {} - - git-remote-origin-url@3.1.0: - dependencies: - gitconfiglocal: 2.1.0 - - git-repo-info@2.1.1: {} - - gitconfiglocal@2.1.0: - dependencies: - ini: 1.3.8 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@11.12.0: {} - - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - - graceful-fs@4.2.11: {} - - graphemer@1.4.0: {} - - has-flag@3.0.0: {} - - has-flag@4.0.0: {} - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hosted-git-info@6.1.1: - dependencies: - lru-cache: 7.18.3 - - html-encoding-sniffer@3.0.0: - dependencies: - whatwg-encoding: 2.0.0 - - html-escaper@2.0.2: {} - - http-proxy-agent@5.0.0: - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.5 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.3.5 - transitivePeerDependencies: - - supports-color - - human-signals@2.1.0: {} - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - ignore@5.3.1: {} - - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - import-local@3.1.0: - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - ini@1.3.8: {} - - is-arrayish@0.2.1: {} - - is-core-module@2.13.1: - dependencies: - hasown: 2.0.2 - - is-docker@2.2.1: {} - - is-extglob@2.1.1: {} - - is-fullwidth-code-point@3.0.0: {} - - is-generator-fn@2.1.0: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - is-path-inside@3.0.3: {} - - is-potential-custom-element-name@1.0.1: {} - - is-stream@2.0.1: {} - - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - - isexe@2.0.0: {} - - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-instrument@5.2.1: - dependencies: - '@babel/core': 7.24.7 - '@babel/parser': 7.24.7 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-instrument@6.0.2: - dependencies: - '@babel/core': 7.24.7 - '@babel/parser': 7.24.7 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.6.2 - transitivePeerDependencies: - - supports-color - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-lib-source-maps@4.0.1: - dependencies: - debug: 4.3.5 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.1.7: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - - jest-changed-files@29.7.0: - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - - jest-circus@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.34 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.5.3 - is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.1.0 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-cli@29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)) - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)) - exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-config@29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)): - dependencies: - '@babel/core': 7.24.7 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.7) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.7 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 18.19.34 - ts-node: 10.9.2(@types/node@18.19.34)(typescript@4.9.5) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-docblock@29.7.0: - dependencies: - detect-newline: 3.1.0 - - jest-each@29.7.0: - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - - jest-environment-jsdom@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/jsdom': 20.0.1 - '@types/node': 18.19.34 - jest-mock: 29.7.0 - jest-util: 29.7.0 - jsdom: 20.0.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - jest-environment-node@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.34 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - jest-get-type@29.6.3: {} - - jest-haste-map@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 18.19.34 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.7 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-leak-detector@29.7.0: - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-matcher-utils@29.7.0: - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.24.7 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.7 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 18.19.34 - jest-util: 29.7.0 - - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - optionalDependencies: - jest-resolve: 29.7.0 - - jest-regex-util@29.6.3: {} - - jest-resolve-dependencies@29.7.0: - dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - jest-resolve@29.7.0: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.8 - resolve.exports: 2.0.2 - slash: 3.0.0 - - jest-runner@29.7.0: - dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.34 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - - jest-runtime@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.34 - chalk: 4.1.2 - cjs-module-lexer: 1.3.1 - collect-v8-coverage: 1.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - - jest-snapshot@29.7.0: - dependencies: - '@babel/core': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.24.7 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.6.2 - transitivePeerDependencies: - - supports-color - - jest-util@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 18.19.34 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - - jest-validate@29.7.0: - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - - jest-watcher@29.7.0: - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 18.19.34 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - - jest-worker@29.7.0: - dependencies: - '@types/node': 18.19.34 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest@29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)): - dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)) - '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - joi@17.13.1: - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.5 - '@sideway/formula': 3.0.1 - '@sideway/pinpoint': 2.0.0 - - js-tokens@4.0.0: {} - - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsdom@20.0.3: - dependencies: - abab: 2.0.6 - acorn: 8.11.3 - acorn-globals: 7.0.1 - cssom: 0.5.0 - cssstyle: 2.3.0 - data-urls: 3.0.2 - decimal.js: 10.4.3 - domexception: 4.0.0 - escodegen: 2.1.0 - form-data: 4.0.0 - html-encoding-sniffer: 3.0.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.10 - parse5: 7.1.2 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 4.1.4 - w3c-xmlserializer: 4.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 2.0.0 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - ws: 8.17.0 - xml-name-validator: 4.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - jsesc@2.5.2: {} - - json-buffer@3.0.1: {} - - json-parse-even-better-errors@2.3.1: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@2.2.3: {} - - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - kleur@3.0.3: {} - - leven@3.1.0: {} - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - lines-and-columns@1.2.4: {} - - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.memoize@4.1.2: {} - - lodash.merge@4.6.2: {} - - lodash@4.17.21: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lru-cache@7.18.3: {} - - make-dir@4.0.0: - dependencies: - semver: 7.6.2 - - make-error@1.3.6: {} - - makeerror@1.0.12: - dependencies: - tmpl: 1.0.5 - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - micromatch@4.0.7: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mimic-fn@2.1.0: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - ms@2.1.2: {} - - natural-compare-lite@1.4.0: {} - - natural-compare@1.4.0: {} - - node-int64@0.4.0: {} - - node-releases@2.0.14: {} - - normalize-path@3.0.0: {} - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - - nwsapi@2.2.10: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - p-try@2.2.0: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.24.7 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse5@7.1.2: - dependencies: - entities: 4.5.0 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-type@4.0.0: {} - - picocolors@1.0.1: {} - - picomatch@2.3.1: {} - - pirates@4.0.6: {} - - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - - prelude-ls@1.2.1: {} - - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - - psl@1.9.0: {} - - punycode@2.3.1: {} - - pure-rand@6.1.0: {} - - querystringify@2.2.0: {} - - queue-microtask@1.2.3: {} - - react-is@18.3.1: {} - - require-directory@2.1.1: {} - - requires-port@1.0.0: {} - - resolve-cwd@3.0.0: - dependencies: - resolve-from: 5.0.0 - - resolve-from@4.0.0: {} - - resolve-from@5.0.0: {} - - resolve.exports@2.0.2: {} - - resolve@1.22.8: - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safer-buffer@2.1.2: {} - - saxes@6.0.0: - dependencies: - xmlchars: 2.2.0 - - semver@6.3.1: {} - - semver@7.6.2: {} - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - shelljs.exec@1.1.8: {} - - signal-exit@3.0.7: {} - - sisteransi@1.0.5: {} - - slash@3.0.0: {} - - source-map-support@0.5.13: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - sprintf-js@1.0.3: {} - - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - - string-length@4.0.2: - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-bom@4.0.0: {} - - strip-final-newline@2.0.0: {} - - strip-json-comments@3.1.1: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - symbol-tree@3.2.4: {} - - test-exclude@6.0.0: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - - text-table@0.2.0: {} - - tmpl@1.0.5: {} - - to-fast-properties@2.0.0: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - tough-cookie@4.1.4: - dependencies: - psl: 1.9.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - - tr46@3.0.0: - dependencies: - punycode: 2.3.1 - - ts-jest@29.1.4(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(esbuild@0.16.17)(jest@29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)))(typescript@4.9.5): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.19.34)(ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5)) - jest-util: 29.7.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.6.2 - typescript: 4.9.5 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.24.7 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.7) - esbuild: 0.16.17 - - ts-node@10.9.2(@types/node@18.19.34)(typescript@4.9.5): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 18.19.34 - acorn: 8.11.3 - acorn-walk: 8.3.2 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 4.9.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - - tslib@1.14.1: {} - - tsutils@3.21.0(typescript@4.9.5): - dependencies: - tslib: 1.14.1 - typescript: 4.9.5 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-detect@4.0.8: {} - - type-fest@0.20.2: {} - - type-fest@0.21.3: {} - - typescript@4.9.5: {} - - ufo@1.5.3: {} - - undici-types@5.26.5: {} - - universalify@0.2.0: {} - - universalify@2.0.1: {} - - update-browserslist-db@1.0.16(browserslist@4.23.0): - dependencies: - browserslist: 4.23.0 - escalade: 3.1.2 - picocolors: 1.0.1 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - url-join@4.0.1: {} - - url-parse@1.5.10: - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - - v8-compile-cache-lib@3.0.1: {} - - v8-to-istanbul@9.2.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - - ver-bump@1.1.8: {} - - w3c-xmlserializer@4.0.0: - dependencies: - xml-name-validator: 4.0.0 - - walker@1.0.8: - dependencies: - makeerror: 1.0.12 - - webidl-conversions@7.0.0: {} - - whatwg-encoding@2.0.0: - dependencies: - iconv-lite: 0.6.3 - - whatwg-mimetype@3.0.0: {} - - whatwg-url@11.0.0: - dependencies: - tr46: 3.0.0 - webidl-conversions: 7.0.0 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - word-wrap@1.2.5: {} - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrappy@1.0.2: {} - - write-file-atomic@4.0.2: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - - ws@8.17.0: {} - - xml-name-validator@4.0.0: {} - - xmlchars@2.2.0: {} - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.1.2 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yn@3.1.1: {} - - yocto-queue@0.1.0: {} diff --git a/src/cli/git/index.ts b/src/cli/git/index.ts index b872894..471d34c 100644 --- a/src/cli/git/index.ts +++ b/src/cli/git/index.ts @@ -3,7 +3,7 @@ import type { ActionOptions } from '../../meta/actions-options'; import { getGitRemoteUrl } from '../../utils/git'; import { logger } from '../../utils/logger'; import { joinURL } from 'ufo'; -import { isBoolean } from 'lodash'; +import { isBoolean, isNumber } from 'lodash'; import getRepoInfo from 'git-repo-info'; import exec from 'shelljs.exec'; import { open } from '../../classes'; @@ -23,7 +23,11 @@ gitCommand .option('--first-commit', 'Open first commit page', false) .option('-i, --issue', 'Open issues list page', false) .option('-m, --main', 'Open main branch page', false) - .option('-p, --pull-request', 'Open pull request list page', false) + .option( + '-p, --pull-request [pullRequest]', + 'Open pull request list page', + false + ) .option( '--pull [branch]', 'Open the page for creating a pull request, the branch defaults to the current branch', @@ -42,7 +46,7 @@ gitCommand const find = options.find; const firstCommit = options.firstCommit; const issue = options.issue; - const pullRequest = options.pullRequest; + const pullRequest = options.pullRequest; const pull = options.pull; const release = options.release; const main = options.main; @@ -65,8 +69,14 @@ gitCommand addresses.push(joinURL(githubAddress, 'issues')); } + console.log({ pullRequest }); + if (pullRequest) { - addresses.push(joinURL(githubAddress, 'pulls')); + if (isNumber(pullRequest)) { + addresses.push(joinURL(githubAddress, 'pull', pullRequest)); + } else { + addresses.push(joinURL(githubAddress, 'pulls')); + } } if (pull) { From ac89a6ef5ee314fc0bb31597db1d173fd5949c6f Mon Sep 17 00:00:00 2001 From: JianChao Date: Wed, 4 Sep 2024 09:44:23 +0800 Subject: [PATCH 08/16] feat: use bun --- .github/workflows/{unit-test.yml => integration.yml} | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) rename .github/workflows/{unit-test.yml => integration.yml} (82%) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/integration.yml similarity index 82% rename from .github/workflows/unit-test.yml rename to .github/workflows/integration.yml index 45835a4..6e69546 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/integration.yml @@ -1,4 +1,4 @@ -name: unit-test +name: integration on: pull_request: @@ -18,6 +18,11 @@ jobs: with: node-version: ${{ matrix.node-version }} + - name: Checkout repo + run: | + echo $matrix.node-version + echo ${matrix.node-version} + - name: Checkout repo uses: actions/checkout@v4 From 6c84918b59acf9e8953bb3b84e5662b0e31c46f6 Mon Sep 17 00:00:00 2001 From: JianChao Date: Wed, 4 Sep 2024 09:46:37 +0800 Subject: [PATCH 09/16] fix: ci error --- .github/workflows/integration.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 6e69546..72c50b6 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -18,10 +18,8 @@ jobs: with: node-version: ${{ matrix.node-version }} - - name: Checkout repo - run: | - echo $matrix.node-version - echo ${matrix.node-version} + - name: Echo Node.js version + run: echo "Running on Node.js version ${{ matrix.node-version }}" - name: Checkout repo uses: actions/checkout@v4 From 011cddc217d04624231ec66e2456f3297e0d920e Mon Sep 17 00:00:00 2001 From: JianChao Date: Wed, 4 Sep 2024 09:48:40 +0800 Subject: [PATCH 10/16] fix: ci error --- .github/workflows/integration.yml | 2 +- .github/workflows/publish-beta-to-npm.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index 72c50b6..cd84a60 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -19,7 +19,7 @@ jobs: node-version: ${{ matrix.node-version }} - name: Echo Node.js version - run: echo "Running on Node.js version ${{ matrix.node-version }}" + run: echo "Running on Node.js version ${{ matrix.node-version }} ${matrix.node-version}" - name: Checkout repo uses: actions/checkout@v4 diff --git a/.github/workflows/publish-beta-to-npm.yaml b/.github/workflows/publish-beta-to-npm.yaml index 1ce90e7..867c150 100644 --- a/.github/workflows/publish-beta-to-npm.yaml +++ b/.github/workflows/publish-beta-to-npm.yaml @@ -22,8 +22,8 @@ jobs: uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - cache: "pnpm" - registry-url: "https://registry.npmjs.org" + cache: 'pnpm' + registry-url: 'https://registry.npmjs.org' - name: Install deps run: pnpm install From 6e9fb7c8971ba6c98e8ead358d7f119545f0c3cb Mon Sep 17 00:00:00 2001 From: JianChao Date: Wed, 4 Sep 2024 10:04:57 +0800 Subject: [PATCH 11/16] fix: ci error --- .github/workflows/integration.yml | 3 --- .github/workflows/publish-beta-to-npm.yaml | 22 ++++++++------------ .github/workflows/publish-to-npm.yaml | 24 +++++++++------------- 3 files changed, 19 insertions(+), 30 deletions(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index cd84a60..7c8c20d 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -18,9 +18,6 @@ jobs: with: node-version: ${{ matrix.node-version }} - - name: Echo Node.js version - run: echo "Running on Node.js version ${{ matrix.node-version }} ${matrix.node-version}" - - name: Checkout repo uses: actions/checkout@v4 diff --git a/.github/workflows/publish-beta-to-npm.yaml b/.github/workflows/publish-beta-to-npm.yaml index 867c150..214328a 100644 --- a/.github/workflows/publish-beta-to-npm.yaml +++ b/.github/workflows/publish-beta-to-npm.yaml @@ -9,27 +9,23 @@ jobs: runs-on: ubuntu-latest if: "! contains(toJSON(github.event.commits.*.message), '[skip ci]')" steps: - - name: Checkout release branch code - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - - uses: pnpm/action-setup@v2 - with: - version: 7 - - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - cache: 'pnpm' registry-url: 'https://registry.npmjs.org' - - name: Install deps - run: pnpm install + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Install bun + uses: oven-sh/setup-bun@v1 + + - name: Install dependencies + run: bun install - name: Build - run: pnpm build + run: bun run build - name: Publish to NPM run: | diff --git a/.github/workflows/publish-to-npm.yaml b/.github/workflows/publish-to-npm.yaml index a223384..3e18b3e 100644 --- a/.github/workflows/publish-to-npm.yaml +++ b/.github/workflows/publish-to-npm.yaml @@ -8,27 +8,23 @@ jobs: publish-to-npm: runs-on: ubuntu-latest steps: - - name: Checkout release branch code - uses: actions/checkout@v3 - with: - fetch-depth: 1 - - - uses: pnpm/action-setup@v2 - with: - version: 7 - - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - cache: "pnpm" - registry-url: "https://registry.npmjs.org" + registry-url: 'https://registry.npmjs.org' + + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Install bun + uses: oven-sh/setup-bun@v1 - - name: Install deps - run: pnpm install + - name: Install dependencies + run: bun install - name: Build - run: pnpm build + run: bun run build - name: Publish to NPM run: npm publish From 12eff9f382a2a110b31e7064dbeb1c5a2c5d4e42 Mon Sep 17 00:00:00 2001 From: JianChao Date: Wed, 4 Sep 2024 10:06:14 +0800 Subject: [PATCH 12/16] fix: ci error --- src/cli/git/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/cli/git/index.ts b/src/cli/git/index.ts index 471d34c..2b9caf4 100644 --- a/src/cli/git/index.ts +++ b/src/cli/git/index.ts @@ -69,8 +69,6 @@ gitCommand addresses.push(joinURL(githubAddress, 'issues')); } - console.log({ pullRequest }); - if (pullRequest) { if (isNumber(pullRequest)) { addresses.push(joinURL(githubAddress, 'pull', pullRequest)); From c690c1d4e31dae823c1b980b956f963f0e1ac96c Mon Sep 17 00:00:00 2001 From: JianChao Date: Wed, 4 Sep 2024 10:07:16 +0800 Subject: [PATCH 13/16] fix: ci error --- src/cli/list.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cli/list.ts b/src/cli/list.ts index 3d7a984..f67d9ca 100644 --- a/src/cli/list.ts +++ b/src/cli/list.ts @@ -1,6 +1,5 @@ import { simpleWorker } from '../classes/simple-worker'; import { Command } from 'commander'; -import { ActionOptions } from '../meta/actions-options'; const listCommand = new Command(); From 0992e8885758c86c929fefbe241c1dc0f97c6848 Mon Sep 17 00:00:00 2001 From: JianChao Date: Wed, 4 Sep 2024 22:31:33 +0800 Subject: [PATCH 14/16] chore: remove useless codes --- src/classes/create-program.ts | 42 ++--- src/cli/add.ts | 52 +++--- src/cli/baidu/index.ts | 16 -- src/cli/bing/index.ts | 16 -- src/cli/clean.ts | 28 +-- src/cli/git/index.ts | 300 ++++++++++++++++---------------- src/cli/github/index.ts | 37 ++-- src/cli/google/index.ts | 18 -- src/cli/list.ts | 22 +-- src/cli/npm/index.ts | 2 +- src/cli/rm.ts | 86 ++++----- tests/cli/baidu/search.spec.ts | 26 --- tests/cli/bing/search.spec.ts | 26 --- tests/cli/github/search.spec.ts | 51 ++++-- tests/cli/google/search.spec.ts | 26 --- tests/cli/npm/search.spec.ts | 82 ++++++--- 16 files changed, 396 insertions(+), 434 deletions(-) delete mode 100644 src/cli/baidu/index.ts delete mode 100644 src/cli/bing/index.ts delete mode 100644 src/cli/google/index.ts delete mode 100644 tests/cli/baidu/search.spec.ts delete mode 100644 tests/cli/bing/search.spec.ts delete mode 100644 tests/cli/google/search.spec.ts diff --git a/src/classes/create-program.ts b/src/classes/create-program.ts index 0132dba..af85afb 100644 --- a/src/classes/create-program.ts +++ b/src/classes/create-program.ts @@ -1,26 +1,23 @@ -import { Command } from "commander"; +import { Command } from 'commander'; // eslint-disable-next-line @typescript-eslint/no-var-requires -const { version } = require("../../package.json"); -import { simpleWorker } from "."; -import { addCommand } from "../cli/add"; -import { cleanCommand } from "../cli/clean"; -import { listCommand } from "../cli/list"; -import { removeCommand } from "../cli/rm"; -import { gitCommand } from "../cli/git"; -import { npmCommand } from "../cli/npm"; -import { googleCommand } from "../cli/google"; -import { baiduCommand } from "../cli/baidu"; -import { bingCommand } from "../cli/bing"; -import { githubCommand } from "../cli/github"; +const { version } = require('../../package.json'); +import { simpleWorker } from '.'; +import { addCommand } from '../cli/add'; +import { cleanCommand } from '../cli/clean'; +import { listCommand } from '../cli/list'; +import { removeCommand } from '../cli/rm'; +import { gitCommand } from '../cli/git'; +import { npmCommand } from '../cli/npm'; +import { githubCommand } from '../cli/github'; export function createProgram() { // @see: https://www.npmjs.com/package/commander const program = new Command(); program - .name("tw") + .name('tw') .version(version) - .argument("[alias]", "Give your address an alias") + .argument('[alias]', 'Give your address an alias') .action(async (alias: string) => { if (alias) { await simpleWorker.open(alias); @@ -30,16 +27,13 @@ export function createProgram() { program.help(); }); - program.addCommand(addCommand); - program.addCommand(removeCommand); - program.addCommand(listCommand); - program.addCommand(cleanCommand); - program.addCommand(gitCommand); + program.addCommand(addCommand()); + program.addCommand(removeCommand()); + program.addCommand(listCommand()); + program.addCommand(cleanCommand()); + program.addCommand(gitCommand()); program.addCommand(npmCommand()); - program.addCommand(googleCommand); - program.addCommand(baiduCommand); - program.addCommand(bingCommand); - program.addCommand(githubCommand); + program.addCommand(githubCommand()); return program; } diff --git a/src/cli/add.ts b/src/cli/add.ts index f2d3820..c85fbf1 100644 --- a/src/cli/add.ts +++ b/src/cli/add.ts @@ -1,31 +1,33 @@ -import { simpleWorker } from "../classes/simple-worker"; -import { basename } from "path"; -import { Command } from "commander"; -import { ActionOptions } from "../meta/actions-options"; +import { simpleWorker } from '../classes/simple-worker'; +import { basename } from 'path'; +import { Command } from 'commander'; +import { ActionOptions } from '../meta/actions-options'; -const addCommand = new Command(); +export function addCommand() { + const command = new Command(); -addCommand - .name("add") - .description("Add an alias to your address") - .argument("[alias]", "Give your address an alias") - .argument("[address]", "your address") - .option("-f, --force", "Overwrite existing alias", false) - .action((point: string, address: string, options: ActionOptions) => { - if (!point) { - address = process.cwd(); - point = basename(address); - } else if (!address) { - address = process.cwd(); - } + command + .name('add') + .description('Add an alias to your address') + .argument('[alias]', 'Give your address an alias') + .argument('[address]', 'your address') + .option('-f, --force', 'Overwrite existing alias', false) + .action((point: string, address: string, options: ActionOptions) => { + if (!point) { + address = process.cwd(); + point = basename(address); + } else if (!address) { + address = process.cwd(); + } - const force = options.force; + const force = options.force; - simpleWorker.add({ - alias: point, - address: address, - force, + simpleWorker.add({ + alias: point, + address: address, + force, + }); }); - }); -export { addCommand }; + return command; +} diff --git a/src/cli/baidu/index.ts b/src/cli/baidu/index.ts deleted file mode 100644 index 911aa0b..0000000 --- a/src/cli/baidu/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Command } from 'commander'; -import { open } from '../../classes'; - -const baiduCommand = new Command(); - -baiduCommand - .name('baidu') - .description('Support using baidu search,etc.Under continuous development...') - .argument('[keyword]', 'Search by keyword') - .action(async (keyword = '') => { - const searchUrl = `https://www.baidu.com/s?wd=${keyword}`; - - await open(searchUrl); - }); - -export { baiduCommand }; diff --git a/src/cli/bing/index.ts b/src/cli/bing/index.ts deleted file mode 100644 index e0acc14..0000000 --- a/src/cli/bing/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Command } from 'commander'; -import { open } from '../../classes'; - -const bingCommand = new Command(); - -bingCommand - .name('bing') - .description('Support using bing search,etc.Under continuous development...') - .argument('[keyword]', 'Search by keyword') - .action(async (keyword = '') => { - const searchUrl = `https://www.bing.com/search?q=${keyword}`; - - await open(searchUrl); - }); - -export { bingCommand }; diff --git a/src/cli/clean.ts b/src/cli/clean.ts index 5bfbab2..81dae69 100644 --- a/src/cli/clean.ts +++ b/src/cli/clean.ts @@ -1,16 +1,18 @@ -import { simpleWorker } from "../classes/simple-worker"; -import { Command } from "commander"; -import { ActionOptions } from "../meta/actions-options"; +import { simpleWorker } from '../classes/simple-worker'; +import { Command } from 'commander'; +import { ActionOptions } from '../meta/actions-options'; -const cleanCommand = new Command(); +export function cleanCommand() { + const command = new Command(); -cleanCommand - .name("clean") - .description("Clear existing aliases") - .option("-f, --force", "force empty", false) - .action(async (str, options: ActionOptions) => { - const force = options.opts().force; - await simpleWorker.clean(force); - }); + command + .name('clean') + .description('Clear existing aliases') + .option('-f, --force', 'force empty', false) + .action(async (str, options: ActionOptions) => { + const force = options.opts().force; + await simpleWorker.clean(force); + }); -export { cleanCommand }; + return command; +} diff --git a/src/cli/git/index.ts b/src/cli/git/index.ts index 2b9caf4..3b1a230 100644 --- a/src/cli/git/index.ts +++ b/src/cli/git/index.ts @@ -8,152 +8,154 @@ import getRepoInfo from 'git-repo-info'; import exec from 'shelljs.exec'; import { open } from '../../classes'; -const gitCommand = new Command(); - -gitCommand - .name('git') - .description('Support to open project related issue list, pr list...') - .option('-a, --actions', 'Open actions page', false) - .option('--author', 'Open author profile page', false) - .option('-b, --branch [branch]', 'Open branch page(default current branch)') - .option('-c, --commit [hash]', 'Open commit page') - .option('--committer', 'Open committer profile page', false) - .option('-f, --file ', 'Open specific file page') - .option('--find', 'Open the search file page', false) - .option('--first-commit', 'Open first commit page', false) - .option('-i, --issue', 'Open issues list page', false) - .option('-m, --main', 'Open main branch page', false) - .option( - '-p, --pull-request [pullRequest]', - 'Open pull request list page', - false - ) - .option( - '--pull [branch]', - 'Open the page for creating a pull request, the branch defaults to the current branch', - false - ) - .option('-r, --release', 'Open release page', false) - .option('-s, --settings', 'Open settings page', false) - .option('--star', 'Open star page', false) - .action(async (options: ActionOptions) => { - const actions = options.actions; - const author = options.author; - const branch = options.branch; - const commit = options.commit; - const committer = options.committer; - const file = options.file; - const find = options.find; - const firstCommit = options.firstCommit; - const issue = options.issue; - const pullRequest = options.pullRequest; - const pull = options.pull; - const release = options.release; - const main = options.main; - const settings = options.settings; - const star = options.star; - - const addresses: string[] = []; - const githubAddress: string = await getGitRemoteUrl(); - - if (!githubAddress) { - logger.error(`The current directory is not a valid git repository`); - return; - } - - if (actions) { - addresses.push(joinURL(githubAddress, 'actions')); - } - - if (issue) { - addresses.push(joinURL(githubAddress, 'issues')); - } - - if (pullRequest) { - if (isNumber(pullRequest)) { - addresses.push(joinURL(githubAddress, 'pull', pullRequest)); - } else { - addresses.push(joinURL(githubAddress, 'pulls')); - } - } - - if (pull) { - const info = getRepoInfo(); - const branchName: string = isBoolean(pull) ? info.branch : pull; - addresses.push(joinURL(githubAddress, 'pull/new', branchName)); - } - - if (author) { - const info = getRepoInfo(); - const [$author] = info.author.split(' '); - addresses.push(joinURL(new URL(githubAddress).origin, $author)); - } - - if (release) { - addresses.push(joinURL(githubAddress, 'releases')); - } - - if (branch) { - const info = getRepoInfo(); - const branchName = isBoolean(branch) ? info.branch : branch; - addresses.push(joinURL(githubAddress, 'tree', branchName)); - } - - if (commit) { - const info = getRepoInfo(); - const $commit: string = isBoolean(commit) ? info.sha : commit; - addresses.push(joinURL(githubAddress, 'commit', $commit)); - } - - if (committer) { - const info = getRepoInfo(); - const [$committer] = info.author.split(' '); - addresses.push(joinURL(new URL(githubAddress).origin, $committer)); - } - - if (file) { - const info = getRepoInfo(); - // FIXME: 需要默认跳转到主分支 - const branchName = info.branch ?? ''; - addresses.push(joinURL(githubAddress, 'tree', branchName, file)); - } - - if (find) { - const info = getRepoInfo(); - // FIXME: 需要默认跳转到主分支 - const branchName = info.branch ?? ''; - addresses.push(joinURL(githubAddress, 'find', branchName)); - } - - if (firstCommit) { - const info = exec('git rev-list --max-parents=0 head'); - const firstCommitHash = info.stdout.trim(); - addresses.push(joinURL(githubAddress, 'commit', firstCommitHash)); - } - - if (settings) { - addresses.push(joinURL(githubAddress, 'settings')); - } - - if (star) { - addresses.push(joinURL(githubAddress, 'stargazers')); - } - - if (main) { - // 什么都不用做 - addresses.push(githubAddress); - } - - if (!addresses.length) { - const info = getRepoInfo(); - // FIXME: 需要默认跳转到主分支 - const branchName = info.branch ?? ''; - addresses.push(joinURL(githubAddress, 'tree', branchName)); - } - - for (const address of addresses) { - await open(address); - } - }); - -export { gitCommand }; +export function gitCommand() { + const command = new Command(); + + command + .name('git') + .description('Support to open project related issue list, pr list...') + .option('-a, --actions', 'Open actions page', false) + .option('--author', 'Open author profile page', false) + .option('-b, --branch [branch]', 'Open branch page(default current branch)') + .option('-c, --commit [hash]', 'Open commit page') + .option('--committer', 'Open committer profile page', false) + .option('-f, --file ', 'Open specific file page') + .option('--find', 'Open the search file page', false) + .option('--first-commit', 'Open first commit page', false) + .option('-i, --issue', 'Open issues list page', false) + .option('-m, --main', 'Open main branch page', false) + .option( + '-p, --pull-request [pullRequest]', + 'Open pull request list page', + false + ) + .option( + '--pull [branch]', + 'Open the page for creating a pull request, the branch defaults to the current branch', + false + ) + .option('-r, --release', 'Open release page', false) + .option('-s, --settings', 'Open settings page', false) + .option('--star', 'Open star page', false) + .action(async (options: ActionOptions) => { + const actions = options.actions; + const author = options.author; + const branch = options.branch; + const commit = options.commit; + const committer = options.committer; + const file = options.file; + const find = options.find; + const firstCommit = options.firstCommit; + const issue = options.issue; + const pullRequest = options.pullRequest; + const pull = options.pull; + const release = options.release; + const main = options.main; + const settings = options.settings; + const star = options.star; + + const addresses: string[] = []; + const githubAddress: string = await getGitRemoteUrl(); + + if (!githubAddress) { + logger.error(`The current directory is not a valid git repository`); + return; + } + + if (actions) { + addresses.push(joinURL(githubAddress, 'actions')); + } + + if (issue) { + addresses.push(joinURL(githubAddress, 'issues')); + } + + if (pullRequest) { + if (isNumber(pullRequest)) { + addresses.push(joinURL(githubAddress, 'pull', pullRequest)); + } else { + addresses.push(joinURL(githubAddress, 'pulls')); + } + } + + if (pull) { + const info = getRepoInfo(); + const branchName: string = isBoolean(pull) ? info.branch : pull; + addresses.push(joinURL(githubAddress, 'pull/new', branchName)); + } + + if (author) { + const info = getRepoInfo(); + const [$author] = info.author.split(' '); + addresses.push(joinURL(new URL(githubAddress).origin, $author)); + } + + if (release) { + addresses.push(joinURL(githubAddress, 'releases')); + } + + if (branch) { + const info = getRepoInfo(); + const branchName = isBoolean(branch) ? info.branch : branch; + addresses.push(joinURL(githubAddress, 'tree', branchName)); + } + + if (commit) { + const info = getRepoInfo(); + const $commit: string = isBoolean(commit) ? info.sha : commit; + addresses.push(joinURL(githubAddress, 'commit', $commit)); + } + + if (committer) { + const info = getRepoInfo(); + const [$committer] = info.author.split(' '); + addresses.push(joinURL(new URL(githubAddress).origin, $committer)); + } + + if (file) { + const info = getRepoInfo(); + // FIXME: 需要默认跳转到主分支 + const branchName = info.branch ?? ''; + addresses.push(joinURL(githubAddress, 'tree', branchName, file)); + } + + if (find) { + const info = getRepoInfo(); + // FIXME: 需要默认跳转到主分支 + const branchName = info.branch ?? ''; + addresses.push(joinURL(githubAddress, 'find', branchName)); + } + + if (firstCommit) { + const info = exec('git rev-list --max-parents=0 head'); + const firstCommitHash = info.stdout.trim(); + addresses.push(joinURL(githubAddress, 'commit', firstCommitHash)); + } + + if (settings) { + addresses.push(joinURL(githubAddress, 'settings')); + } + + if (star) { + addresses.push(joinURL(githubAddress, 'stargazers')); + } + + if (main) { + // 什么都不用做 + addresses.push(githubAddress); + } + + if (!addresses.length) { + const info = getRepoInfo(); + // FIXME: 需要默认跳转到主分支 + const branchName = info.branch ?? ''; + addresses.push(joinURL(githubAddress, 'tree', branchName)); + } + + for (const address of addresses) { + await open(address); + } + }); + + return command; +} diff --git a/src/cli/github/index.ts b/src/cli/github/index.ts index 2261c96..3b21fe8 100644 --- a/src/cli/github/index.ts +++ b/src/cli/github/index.ts @@ -1,18 +1,31 @@ import { Command } from 'commander'; import { open } from '../../classes'; -const githubCommand = new Command(); +export function githubCommand() { + const command = new Command(); -githubCommand - .name('github') - .description( - 'Support using github search,etc.Under continuous development...' - ) - .argument('[keyword]', 'Search by keyword') - .action(async (keyword = '') => { - const searchUrl = `https://github.com/search?q=${keyword}`; + command + .name('github') + .description( + 'Support using github search,etc.Under continuous development...' + ) + .argument('[keyword]', 'Search by keyword') + .option('-o,--org [org]', 'Open run kit page') + .action(async (keyword = '', options: { org: string }) => { + let url = ''; - await open(searchUrl); - }); + if (keyword && options.org) { + url = `https://github.com/search?q=org:${options.org}+${keyword}`; + } else if (keyword) { + url = `https://github.com/search?q=${keyword}`; + } else if (options.org) { + url = `https://github.com/${options.org}`; + } else { + url = `https://github.com/search?q=${keyword}`; + } -export { githubCommand }; + await open(url); + }); + + return command; +} diff --git a/src/cli/google/index.ts b/src/cli/google/index.ts deleted file mode 100644 index 7267d8a..0000000 --- a/src/cli/google/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Command } from 'commander'; -import { open } from '../../classes'; - -const googleCommand = new Command(); - -googleCommand - .name('google') - .description( - 'Support using google search,etc.Under continuous development...' - ) - .argument('[keyword]', 'Search by keyword') - .action(async (keyword = '') => { - const searchUrl = `https://www.google.com/search?q=${keyword}`; - - await open(searchUrl); - }); - -export { googleCommand }; diff --git a/src/cli/list.ts b/src/cli/list.ts index f67d9ca..d2799f4 100644 --- a/src/cli/list.ts +++ b/src/cli/list.ts @@ -1,15 +1,17 @@ import { simpleWorker } from '../classes/simple-worker'; import { Command } from 'commander'; -const listCommand = new Command(); +export function listCommand() { + const command = new Command(); -listCommand - .name('ls') - .alias('list') - .description('List existing aliases and addresses') - .argument('[alias]', 'Give your address an alias') - .action(async (alias?: string) => { - await simpleWorker.list(alias); - }); + command + .name('ls') + .alias('list') + .description('List existing aliases and addresses') + .argument('[alias]', 'Give your address an alias') + .action(async (alias?: string) => { + await simpleWorker.list(alias); + }); -export { listCommand }; + return command; +} diff --git a/src/cli/npm/index.ts b/src/cli/npm/index.ts index 009b736..b3db862 100644 --- a/src/cli/npm/index.ts +++ b/src/cli/npm/index.ts @@ -6,7 +6,7 @@ function npmCommand() { command .name('npm') - .description('Support using npm search,etc.Under continuous development...') + .description('Support using npm search, etc') .argument('[packageName]', 'Search by package name') .option('-c,--code', 'Open package code page') .option('-d,--dependencies', 'Open package dependencies page') diff --git a/src/cli/rm.ts b/src/cli/rm.ts index 09bd4ff..9cbbf22 100644 --- a/src/cli/rm.ts +++ b/src/cli/rm.ts @@ -5,48 +5,50 @@ import prompts from 'prompts'; import { Point } from '../meta'; import { logger } from '../utils/logger'; -const removeCommand = new Command(); -removeCommand - .name('rm') - .description('Remove an alias from your address') - .argument('[alias]', 'Enter the point to be deleted') - .action(async (alias: string) => { - if (isEmpty(alias)) { - const points = await simpleWorker.findAll(); - const sorted = (a: Point, b: Point): number => { - const aVisits = a?.visits ?? 0; - const bVisits = b?.visits ?? 0; - return aVisits - bVisits; - }; - - const choices = points.sort(sorted).map((point) => ({ - value: point.alias, - // @FIXME:point?.visits 需要修改一下,解决脏数据的问题 @jianchao - title: `${point.alias} => ${point.address} => ${point?.visits ?? 0}`, - })); - - const response = await prompts([ - { - type: 'multiselect', - name: 'removeAliases', - message: 'Select the alias to be deleted', - choices: choices, - }, - ]); - - const aliases: string[] = response?.['removeAliases'] ?? []; - - for (const _alias of aliases) { - // @FIXME: 请使用更加优雅的方法,目前的代码效率略低 @jianchao - await simpleWorker.delete(_alias); +export function removeCommand() { + const command = new Command(); + command + .name('rm') + .description('Remove an alias from your address') + .argument('[alias]', 'Enter the point to be deleted') + .action(async (alias: string) => { + if (isEmpty(alias)) { + const points = await simpleWorker.findAll(); + const sorted = (a: Point, b: Point): number => { + const aVisits = a?.visits ?? 0; + const bVisits = b?.visits ?? 0; + return aVisits - bVisits; + }; + + const choices = points.sort(sorted).map((point) => ({ + value: point.alias, + // @FIXME:point?.visits 需要修改一下,解决脏数据的问题 @jianchao + title: `${point.alias} => ${point.address} => ${point?.visits ?? 0}`, + })); + + const response = await prompts([ + { + type: 'multiselect', + name: 'removeAliases', + message: 'Select the alias to be deleted', + choices: choices, + }, + ]); + + const aliases: string[] = response?.['removeAliases'] ?? []; + + for (const _alias of aliases) { + // @FIXME: 请使用更加优雅的方法,目前的代码效率略低 @jianchao + await simpleWorker.delete(_alias); + } + + logger.info(`Deleted successfully!`); + + return; } - logger.info(`Deleted successfully!`); + return simpleWorker.delete(alias); + }); - return; - } - - return simpleWorker.delete(alias); - }); - -export { removeCommand }; + return command; +} diff --git a/tests/cli/baidu/search.spec.ts b/tests/cli/baidu/search.spec.ts deleted file mode 100644 index a7658c3..0000000 --- a/tests/cli/baidu/search.spec.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { basename } from "path"; -import { open } from "../../../src/classes/open"; -import { createProgram } from "../../../src"; - -jest.mock("../../../src/classes/open"); -const openMock = jest.mocked(open); - -describe(basename(__filename), () => { - const baiduWebsite = `https://www.baidu.com/s?wd=`; - - it("the baidu page should be opened when key is not set", async () => { - const program = createProgram(); - - await program.parseAsync(["ts-node", "index.ts", "baidu"]); - - expect(openMock).toHaveBeenCalledWith(baiduWebsite); - }); - - it("the baidu page should be opened when keyword was set", async () => { - const program = createProgram(); - - await program.parseAsync(["ts-node", "index.ts", "baidu", "to-where-cli"]); - - expect(openMock).toHaveBeenCalledWith(`${baiduWebsite}to-where-cli`); - }); -}); diff --git a/tests/cli/bing/search.spec.ts b/tests/cli/bing/search.spec.ts deleted file mode 100644 index 7d20aef..0000000 --- a/tests/cli/bing/search.spec.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { basename } from "path"; -import { open } from "../../../src/classes/open"; -import { createProgram } from "../../../src"; - -jest.mock("../../../src/classes/open"); -const openMock = jest.mocked(open); - -describe(basename(__filename), () => { - const bingWebsite = `https://www.bing.com/search?q=`; - - it("the bing page should be opened when key is not set", async () => { - const program = createProgram(); - - await program.parseAsync(["ts-node", "index.ts", "bing"]); - - expect(openMock).toHaveBeenCalledWith(bingWebsite); - }); - - it("the bing page should be opened when keyword was set", async () => { - const program = createProgram(); - - await program.parseAsync(["ts-node", "index.ts", "bing", "to-where-cli"]); - - expect(openMock).toHaveBeenCalledWith(`${bingWebsite}to-where-cli`); - }); -}); diff --git a/tests/cli/github/search.spec.ts b/tests/cli/github/search.spec.ts index 61c96aa..bfb632b 100644 --- a/tests/cli/github/search.spec.ts +++ b/tests/cli/github/search.spec.ts @@ -1,26 +1,57 @@ -import { basename } from "path"; -import { open } from "../../../src/classes/open"; -import { createProgram } from "../../../src"; +import { basename } from 'path'; +import { open } from '../../../src/classes/open'; +import { createProgram } from '../../../src'; -jest.mock("../../../src/classes/open"); +jest.mock('../../../src/classes/open'); const openMock = jest.mocked(open); describe(basename(__filename), () => { const githubWebsite = `https://github.com/search?q=`; - it("the github page should be opened when key is not set", async () => { + it('the github page should be opened when key and org was set', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "github"]); - - expect(openMock).toHaveBeenCalledWith(githubWebsite); + await program.parseAsync([ + 'ts-node', + 'index.ts', + 'github', + 'to-where-cli', + '-o', + 'skypesky', + ]); + + expect(openMock).toHaveBeenCalledWith( + `${githubWebsite}org:skypesky+to-where-cli` + ); }); - it("the github page should be opened when keyword was set", async () => { + it('the github page should be opened when keyword was set', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "github", "to-where-cli"]); + await program.parseAsync(['ts-node', 'index.ts', 'github', 'to-where-cli']); expect(openMock).toHaveBeenCalledWith(`${githubWebsite}to-where-cli`); }); + + it('the github page should be opened when keyword was set', async () => { + const program = createProgram(); + + await program.parseAsync([ + 'ts-node', + 'index.ts', + 'github', + '-o', + 'skypesky', + ]); + + expect(openMock).toHaveBeenCalledWith(`https://github.com/skypesky`); + }); + + it('the github page should be opened when key is not set', async () => { + const program = createProgram(); + + await program.parseAsync(['ts-node', 'index.ts', 'github']); + + expect(openMock).toHaveBeenCalledWith(githubWebsite); + }); }); diff --git a/tests/cli/google/search.spec.ts b/tests/cli/google/search.spec.ts deleted file mode 100644 index eada205..0000000 --- a/tests/cli/google/search.spec.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { basename } from "path"; -import { open } from "../../../src/classes/open"; -import { createProgram } from "../../../src"; - -jest.mock("../../../src/classes/open"); -const openMock = jest.mocked(open); - -describe(basename(__filename), () => { - const googleWebsite = `https://www.google.com/search?q=`; - - it("the google page should be opened when key is not set", async () => { - const program = createProgram(); - - await program.parseAsync(["ts-node", "index.ts", "google"]); - - expect(openMock).toHaveBeenCalledWith(googleWebsite); - }); - - it("the google page should be opened when keyword was set", async () => { - const program = createProgram(); - - await program.parseAsync(["ts-node", "index.ts", "google", "to-where-cli"]); - - expect(openMock).toHaveBeenCalledWith(`${googleWebsite}to-where-cli`); - }); -}); diff --git a/tests/cli/npm/search.spec.ts b/tests/cli/npm/search.spec.ts index 136f272..c30cd03 100644 --- a/tests/cli/npm/search.spec.ts +++ b/tests/cli/npm/search.spec.ts @@ -1,50 +1,92 @@ -import { basename } from "path"; -import { open } from "../../../src/classes/open"; -import { createProgram } from "../../../src"; +import { basename } from 'path'; +import { open } from '../../../src/classes/open'; +import { createProgram } from '../../../src'; -jest.mock("../../../src/classes/open"); +jest.mock('../../../src/classes/open'); const openMock = jest.mocked(open); describe(basename(__filename), () => { const npmWebsite = `https://www.npmjs.com`; - it("the npm page should be opened when key is not set", async () => { + it('the npm page should be opened when key is not set', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "npm"]); + await program.parseAsync(['ts-node', 'index.ts', 'npm']); expect(openMock).toHaveBeenCalledWith(npmWebsite); }); - it("the npm page should be opened when keyword was set", async () => { + it('the npm page should be opened when keyword was set', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "npm", "to-where-cli"]); + await program.parseAsync(['ts-node', 'index.ts', 'npm', 'to-where-cli']); - expect(openMock).toHaveBeenCalledWith(`${npmWebsite}/search?q=to-where-cli`); + expect(openMock).toHaveBeenCalledWith( + `${npmWebsite}/search?q=to-where-cli` + ); }); - it("the npm page should be opened when keyword was set && -c", async () => { + it('the npm page should be opened when keyword was set && -c', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "npm", "to-where-cli", "-c"]); - - expect(openMock).toHaveBeenCalledWith(`${npmWebsite}/package/to-where-cli?activeTab=code`); + await program.parseAsync([ + 'ts-node', + 'index.ts', + 'npm', + 'to-where-cli', + '-c', + ]); + + expect(openMock).toHaveBeenCalledWith( + `${npmWebsite}/package/to-where-cli?activeTab=code` + ); }); - it("the npm page should be opened when keyword was set && -d", async () => { + it('the npm page should be opened when keyword was set && -d', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "npm", "to-where-cli", "-d"]); - - expect(openMock).toHaveBeenCalledWith(`${npmWebsite}/package/to-where-cli?activeTab=dependencies`); + await program.parseAsync([ + 'ts-node', + 'index.ts', + 'npm', + 'to-where-cli', + '-d', + ]); + + expect(openMock).toHaveBeenCalledWith( + `${npmWebsite}/package/to-where-cli?activeTab=dependencies` + ); }); - it("the npm page should be opened when keyword was set && -v", async () => { + it('the npm page should be opened when keyword was set && -r', async () => { const program = createProgram(); - await program.parseAsync(["ts-node", "index.ts", "npm", "to-where-cli", "-v"]); + await program.parseAsync([ + 'ts-node', + 'index.ts', + 'npm', + 'to-where-cli', + '-r', + ]); + + expect(openMock).toHaveBeenCalledWith( + `https://npm.runkit.com/to-where-cli` + ); + }); + + it('the npm page should be opened when keyword was set && -v', async () => { + const program = createProgram(); - expect(openMock).toHaveBeenCalledWith(`${npmWebsite}/package/to-where-cli?activeTab=versions`); + await program.parseAsync([ + 'ts-node', + 'index.ts', + 'npm', + 'to-where-cli', + '-v', + ]); + + expect(openMock).toHaveBeenCalledWith( + `${npmWebsite}/package/to-where-cli?activeTab=versions` + ); }); }); From f6552649ca051c6281c7d745acdc16bf3361d505 Mon Sep 17 00:00:00 2001 From: JianChao Date: Wed, 4 Sep 2024 22:44:44 +0800 Subject: [PATCH 15/16] feat: support bump version --- bun.lockb | Bin 197776 -> 248831 bytes package.json | 6 ++- scripts/bump-version.mjs | 90 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 scripts/bump-version.mjs diff --git a/bun.lockb b/bun.lockb index 4ab5f8a979878b4f48298d216ef078cb2c2d79ed..59b88562916a8fdd9880379813a49f88331b5c7f 100755 GIT binary patch delta 69625 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
F(xTW;Z1AiQoO_ny+?UDMq@t!^n@ z%Pk^g%$4WI_wKOb^0D%mqmrbTE5e;uElYA1F>Lav6@T)CnJYTCJ#vdM%@nw>9 z#PAGw`rG2Pl?#8v1lATfjJwUb;>c|jK29!h@3dQeIdHgBUpcz5jA7yZ z`k(}B*RwO0{URdnD$NzwEHML}<&v^ozRfcAut(xK3!j$q1m3~hl(SsyW_QX8x;%Sn zexl>MYrfd ({ title: pkg.manifest.name, value: pkg })); + +const { picked } = await prompts({ + type: 'multiselect', + name: 'picked', + message: 'Pick packages to bump version: ', + choices: packageOpts, +}); + +if (picked) { + for (const pkg of picked) await updatePackageVersion(pkg); +} + +async function getBumpPrepareData() { + let gitLog; + let currentDate; + + const getGitLog = async () => { + try { + const gitRes = await $`git log --pretty=format:"- %s" "master"...HEAD`; + gitLog = gitRes.stdout.trim(); + return gitLog; + } catch { + console.error(chalk.redBright('Could not get git log, please write changelog manually.')); + return ''; + } + }; + + const getCurrentDate = () => { + const now = new Date(); + currentDate = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`; + return currentDate; + }; + + return { + gitLog: gitLog ?? (await getGitLog()), + currentDate: currentDate ?? getCurrentDate(), + }; +} + +async function updatePackageVersion(pkg) { + const relativePath = relative(rootDir, pkg.rootDir); + const packageJsonPath = join(relativePath, 'package.json'); + const versionPath = join(relativePath, 'version'); + const blockletYmlPath = join(relativePath, 'blocklet.yml'); + const changelogPath = join(relativePath, 'CHANGELOG.md'); + + console.log(chalk.greenBright(`[info]: start to bump version for: ${pkg.manifest.name}`)); + + // prepare bump & bump version + async function bump() { + const { gitLog, currentDate } = await getBumpPrepareData(); + const { changelog = '' } = await prompts({ + type: 'text', + name: 'changelog', + message: 'Please write changelog:', + initial: '\n' + gitLog, + }); + execSync(`bumpp --no-tag --no-commit --no-push ${packageJsonPath}`, { stdio: 'inherit' }); + return { newChangelog: changelog.trim(), currentDate }; + } + + try { + const { newChangelog, currentDate } = await bump(); + // update version file + const { version } = await fs.readJSON(packageJsonPath); + await fs.writeFileSync(versionPath, version); + + // update blocklet.yml + if (fs.existsSync(blockletYmlPath)) { + await $`cd ${relativePath} && blocklet version ${version}`; + } + + const title = `## ${version} (${currentDate})`; + await fs.ensureFile(changelogPath); + const oldChangelog = await fs.readFile(changelogPath, 'utf8'); + const changelog = [title, newChangelog, oldChangelog].filter((item) => !!item).join('\n\n'); + await fs.writeFile(changelogPath, changelog); + } catch (error) { + console.error(chalk.redBright(`[error]: failed to bump version for: ${pkg.manifest.name}`)); + } +} From 2cf39cdf92aa09f7ea63fbd25b2650b9c1f1efb9 Mon Sep 17 00:00:00 2001 From: JianChao Date: Wed, 4 Sep 2024 23:17:12 +0800 Subject: [PATCH 16/16] feat: add knip --- bun.lockb | Bin 248831 -> 186307 bytes knip.config.ts | 3 ++ package.json | 18 ++++--- scripts/bump-version.mjs | 90 ----------------------------------- src/classes/simple-config.ts | 22 ++++----- src/cli/index.ts | 2 +- tests/utils/git.ts | 18 +++---- 7 files changed, 32 insertions(+), 121 deletions(-) create mode 100644 knip.config.ts delete mode 100644 scripts/bump-version.mjs diff --git a/bun.lockb b/bun.lockb index 59b88562916a8fdd9880379813a49f88331b5c7f..9c7811c1a0d764dd085b6a28f70441040ba4d9ec 100755 GIT binary patch delta 40013 zcmeFacUV-{+CDt9agskF-W$)R;{#)1|+E8Sw zSB?1Pr+(>azsGQ6(%209^%If?PnguW;Regtb5Z+`cQQ2Y>i45$;OC4nH@duy!*|Bq z%nHThjRr$egCQp+H90XQJ(D1ICSd^h6;O&nkBdq3?3)nNZ!UDEOM)>=*$2sV_DEM6GHVFiYA_4~Xm}a_6r@Q;>FlY3NW=_VLn=Ktpr2=K ze5#>ud{V4uMv9>X`iSv`G@0U=klZIG-3l3>7@wVPNbyWh%|wP5QEeJ7LFc+cPJk=} z*|&tj-~u@UI$Ktvq}u1^%NE%>L{Uu0zJG@Nra(4%a`;n$`y$7K&Q2Vb391v1^d*u&SDT zQAu^Qg-B0V$$>=KId)Z4`^S~lj_wKG-H`pkQ!`@{65=uBNmbRJuvSxj2*t)E#Kc;o zp|e7bAlZ^2NcLD8*rU-o7D)D7U1Us8zlvI-temhK>PW7KUK{#2NSNkyhpd^6KmY>B zE5|{LxaMRqcthU+=>s_#(j77h(hag1Br|Y_WV$zKJ{p&E9g;n=SJNFK+48sOL73*; zhhzmkHCN!|$)@k6T4Va8d&Z}&g8^GO3lecT?|juRyrd-@jD#HPM}BHXHzAo`AKSI) z7G?JNtLb~E#`LkK84P2flRpW`At@iA#-}C3R7;D)nC?aabgttlow6?^dNHSFpxTv{ zf@GJ1<+F#?Rr8r0q`JgZNY=9`B-)xYr=Dv53dz{eN01z$k-@6nw~)-%YJ7THd{W9S**!==o{wMH_bZ8 znv|Y4IZUm?7m&zLrTb$CTd?bY^tWa3pfCBw{`5?cj}IW z%rG@RF*T;I!SEU!TbzvKh{_p|6raM3tcYWmXC=o{HKb)ECdS}EpbtSe#513EnoNmF zO|yC?rrGAhE2=y^+ zgw6`!9Eo`!Yq+o3C1tvq+I^MSn!tK`(G zIojG=b|^i|A-8syNmaLn)-@-G9Jv=YXU~>Zr5%j&EJueeJImx0w2f~uz_IqU@i}r( z`DSs0ey&^S&+lj7c<}d3mp_+V>gJ{U4O&sERqGjD&d+Swu=ichfSdQ5HpBU-tdgt96Ed;rZ7ue_80JpFGYj$SLmkt-rUelV1JU z%Q{7-d!GAt)$znD6{{^;AlI+v6f|U7XuGJYrP}xfdaPNq-Funo#}>x)CH^@(JZ+ZS zpFZ@&c6`G^zbsu6davz~;}@+f`d=tkH>reUiwN1lZHRop%}u`J=4N~8`IOk*i*7xZ zZQb31s#|)G4=iTtUTVVS8y!v_UY_)_?u*F&ZOhJ`U3q_`yz55UV=V39Hl`}oUj9ukj_+Q8`J;Kb# zCG~)BE06RDG?tJvtA`nz$h)eCnR9T>jq_8EBpcfW8js0!YlIn#%9%C7%nb?{3_(gv zUbR4Dmi!Xj@8H69YqPh>UWqxL$r)Gt7JoF#(7%$s=n78eQbfT4Ba` zc~`A4^Rj~QekF&IwF1q*LTjt!06TM&LIwj4d#DRjeI@Vm3^VTp2cOI-OwMd;YcSMT zEKs7k88p_gpkkjR@A3*Wej~s13Nt@N435+}MkS`UoLO5bzjl~;t643hkUX+_p!o$f z=1_pGH+y3#v#1*CHWZp#Q?~A?{L(wjY=h-H5*BE&N1(YIv|7+?<-D4K#&Pm4pD^iU z5&4ym#b_tj^$jz3!y?NLDkvL$0!=HR1<9cv!RC7iv3e%i=n*JYwUb{3T8t0nm%d?A zonmsmAdC43CMz3i!)ls}V=7zZw{3&XT@fOWl&J7rXzb$_LM-OZSZ?T0jKFA5#Z}8j>@&$8H*jJe1*+;6L>&7O6m4ISZmeS$Q`^ zdRh6E#bVx6R;@UCARy3u6B-9ZlJjZ@n(bW;hL(zkzLL7S%CEvK=3DRY6l z<>cM)TIYG^Tc za@R8-85n3LrI-f=wP(42Ec>l{pA?Q9_pyie;=htE$>U)F1w` z6&k$r@+-PB?pTFqc+uhs%n^&&J*EyaT+2M;-`nMG>nA@7D*<{`goW-;CO zFc^Bs`|1Zv5!L0a2#a}2b+wX;Q%dKn%da9Vrp`5R=%AHp1423S+lXMPc1?MAbBk$S zO@m>uysvq%sU(IynIUOZEjg=&#qE7prqtJtF~M((qb}s8w{P~eJw(a-tunfN1^wUhergPs`;S5l@7{8C{pp`BM7P9 zYxY%#6kUZSrYSToU?t>{7R(=L4Ha)cgix@OvZ$ZI&{*N35NfJ$vk+>b%mqUo#3DWV z1OwL?nnex`4mN**P#cwpcb}^xXGK}ePX6jBVFg8DZK2iSWHnDkh~A1-Z)H#cC~)W1 zA+{JodTk*tCQ?j*{Hm=*k^|&=?JTBChznOLP(RRM=%y5e71%Tn8k$}!*lfY*wgqpL z!$$`hgXFCC7Ly%X8X)hh7A!TaE5B-QF^>VEP7~DLd=MJf27|Jg7e?7E9{pqqG&e%9 zqoTn0h9N|A^HAPfXsnA-v1}Zwj+s%(`U`0EU5RU+d5@+cm*7D2Q)uXVHBVDD z%w2Cev|X^N6GF}9(7<46hedwX*!u* z(8@3+Iu0S$8Cx|b+FEGr0A+hNJwQk*gVO5(qV*znO0$^r2DJaXz7jW}s14O;cyUVrX;_6o5_WEHrh+Duo)cBTz+j zb1P`L$3DqcxY;VcAfS0KN=y`VK8k>E1;?CM8Ph4>o~buLSwy@ zqp)cVG^K0Jc?hZVJI^Ojvh6CrO0}5lbk$vCB$nC*UFEDai}?=7-pE1OI?T`uAR>ME1xH-y6EeW4-7Uh=C!7W3#{>M)`z@SoGr)M4bA+c5@%jXWHc zxQ@^`ISO#VO*^4=RF<`3XbCH9t1Ra&q4_Err^Hxjtc9}cne(7=N?=vO0{FPMoE2a( zdG_Hf+gCeS8rnzRooO+x0pTNu`URV>AjEY66UsMGDj6$hWm(LTvG1!`El`qUgs3TRtY&M@gwtXo zaZ*|Wiyw!E;|ed{c<0GrD-WzzP4*sWwnYRNF=Zh&d-YR&$0Ub)1=&JjeK4fx)$N*Q zR#xgips`h|TYJR8l1q!JH$ph4P6)PJju2~QL}@tMr>V8NKufSTiksAo*PShVYM{9% zG>(C~p3aBHieaS22iZd5v{MFHa_%p`nqZLz^q1>Rw3rw4R}Ga8HvbD+W5p7eSmr7N z)ZxZC7u}W)jgFzt_TA9JR7<$YOK1_$(DI3arUnVfQ{GoS*gOOwmaOKmmAsk*9OE9e z_d{#0n5a69T8|WH?0)5n#C$-DQ2SQtQ2z3k?e%vgLOE4q7W{DDsOysb#91HQr+0 zg|ty1m6M`WI8A;9vR#^b`KC5_2{blCt@smY&7i5fVWV`lYmg^8HwT)xYKiXL1C3*; z?piOQvD=_^2(r!4_a|KAnulr{90E>uOw-ijYzOIXj%g@0A0)q;Y>`F{lIu;enD-&B z4ze`Md9i`!SJ3EIN?%Ex2FtGkEYepHQ!LW=gXMZtag{sdeWznS^?}CZ=pA^TfX0DT zmNL_6XxK76f~As~a=l!1Nv2xkLUMS=K=TS{^azxN8sC7%l2K!5u32ic3o4Vg3p85d z^onJ3W|sVFn#J@tNbFd_!KS7|d1?xs8f+enkZQ=W+M;Q2Q}pZa&{zOwVNjsC`Y^R8 zl{2E$a~R#gG#w7mT`p@Z*3 zMZVBu+bf}cb3+Qer+$4Os{JJ|cvzD`??e0EhYF0=V_P89Sh1V>K6L(l$YqQk+Y_N? z^6+^f1;+ByGIUWr{PO`dTcdQ4amKObm$z0Mj-CXw?|thmt%xP~oxWDWCk(9t=)p%7>Dz=ms!d z55Oqf9WIkitvA3AB}?g}$yiNVA^D*!2w*2tK9sai&}5<}u`eheO2%VnP(GB@u_-7Y z$ZUScX~3u})taL62Fg;vQosS&0@wow0e(Iuneibd_TMFk;)uror^Fx?Lge?F0VNZh z0VLoDpa5_I;3vPdk;@&akj-MR0F*xg{7_QA3NZC`fFDZcdXox1`6WyJRbf?0yE_0! z?IA$@cTGNqB>xw_R8qKF-;#Zodj4F9oz zb2NPe+)df|6Z4Ow%dZRl_x%Qb_>Gm1P1X z3z!N?ADRuxPku@Jxf=f|iTryQ=D~o53m{qGLM=glNq&(QzgUx?l=b+y;7G@tC^PJ3G;#0Q6w7xB&EH&`l=jp(4rzeaPQ-VjJ}^ zVJv9uG{eJaC#(gbhl@?rFG6=L1ihh%DP-&<#u@S0`8L$Av21+ZNd!rVKg{^1qPQ*M z?~ur_1rZ_gNX)VUQN;|Rg&1fC(X0T7^CTjLdtneSNQ^EFqO~|nVwDMme-RK-Vq_5z z(FH-=Cecp#6a`^h2*iw{AUcTaBzBT$YzLx~$hE_Nake0yk?1VKi-B-5gIHb+L|5^c z#4!>b>_K!Fi|s)SDGb8o0HUXeasc5`#8^yhcQ7_L#t36^5EqNU!de^_eZ(db6w#7GfU z7Q{so+emyNjIJQYl|g^?bwz)T7Mn-}Il;oQ94y9)m~tTQkT^_YyeM8C#4KkJ8RbDt z5P2k;xqzrr0mLLRumXq|B+iqVBHZ0TtSSp)v>S+Aah621D+qsg5V9EQ4#Kt^h}$G) z2%m}|c9NJ;5rh!eNyL>0(YO+b*&??R2&W1lo{^X4#Hy+wM%M(fNt`7ST@8eP zEf8D8$XXz5IjL`x*d}~DLF^xYh@B*61cCTbTqhA%2Snq#ATEjAx*(kV zK|CXIMTFM_ag4S20_eCCwX2Bq;)CciU46G00 z1&Q+{ei!cHAXbHd7#$Acu{cX2IuwL|17i#6sX>ftVC*Pt@mnHso6IwV@NEcYCz%-y z!8|vJ8)V|bz%*_I=A}VQYXrurKA2}@UK>P%#$b+-S>71TTZ4E)W=J@g4o$%PZ4gVE zfbnPm#?%zmF^Z_BsLn+a+ep|5V>1xr8iKGk17Q-INCY(k;TQp;kcf!@afifV5@u1n zIfz+}L1Z)sQAFgCXx0Qo73?_>1Gy=@AaS0Ay>M>{VpUTRqg#R~F3ysOZU(|X5=2Qc zG7^Ms1c=)t9EDFS5IafCXa%B-xK1LjIf%xsK{$)t)*zf%-ZK(qMR*$!$4D%11EQRG zOkzk&5FMgGR1k}!KzKxgFtr8YE~46kxJY6fiAuuQ4#c=tAgt{`R1up<1hod?*d9bR z5z`*T9TJC0R2RiNfSA<=L`DY?HANnYW>FxjbOhlk26hDTg2Z_ewS{{p5UbjP7~Khk zk2p&rx*Z7rXb^s4WHbod_8@MP@E1OvLF^Xq#E?!P-jWCt5#2y|M1xq@4MezjN#Y`j?%hE&6sx;~7}wco zm+iN4eA0l|ZE93ci}<!%B`-uaGQjd@Q;`xIE%@qXcZqePj*BQ~5(ZXkVev0}uW zQ7!JZ*mksB|6-#q4qHFW<@(h>S~*Xs-7k5STchtT)Qx)SvLj-1vzOyyF9ntv+Dv$M zF*;@YKN;LUWX2=o@0G@PnDb5R`ZW*U=z4#CV3$V6*SU@kk1jW+bMK{3zm^Xjsjy&v zu-|WIvX-vwnNlz$*?rQ$)6*kcmdsbZrunP4v)jRbmctEd2K=_N|DhcBP+Ob3Z||P` z(dF%|tV<;ud47F+cdYT}lw;0qIv&0?y+WxSMH3z-oQng%(!Aib6GW*3pDiqtg%`UB5 zfBW=um2y$;Cnr6x{=(U2-LcIRp3WVV*x-8QT8_PZ&OKUrxO}Y-_id0^TvJA6W$ zU75XY%-!z~?VoVAcg=j&YmvWt+xqvu6kM$6pY!H;g(N?n8XLELrm1QH_a}F&4j5DW z@Sx12<0G5o{d&dO{Ceu1veM53FV`*-JtTL^+JJ`c_sSLhEohkt?S|?t?b5qz#PjXa zIFDMDFTZN}?&*vlhuy3eeEOHo9^XG2(!2f9lC4(UxcF^yP-vHf%k~9t?%nyXqC@Wd zIx}d^_9m5@d#=n^y~zC4iyVCaM2#zR*1h=dTjRmPquTG>|0E}Hal)V><{uWW8`s+1 zz4(}!O*(XTz8HMc@5k8*--R`P(|XU-6K@x_I2QM!;_itR#6wiCrQgQ-ot9bCypmoe zt+F`SmzLU{v|ZKn-N-W`se9|j{ngXbI`g~gyMH=mH`BA_mcf%-Ja$>w=H!^Lz-0;F z{djRl?7@81Yb}n?!i-zh-DubHO66;ru@_DrURM6m_?73HkGy#(e&m$}7dP&ku)gy4 zD}h&TKk(jH?AeK+awCfj>ioRd^VDbA@h_YHFu^9faMP^mb$`j1ZIl=|3E4*Xz|1~B z2{XH$aGwmqwkH>ZVIVq)h~Xf1lCY+O=p;6!@A9466K6dwfQ z7>SHQ#uky?^Y?A7yxUjLUynTc`xBd>sV$F1-8%Dn$K7w}*8YZuh*e7(1Uz2`n07_;D3!OiV*w~r}0ceCA%RmJA7Yh9}UnAAcSzjONbzVqo{ z=4?*A`=<5oRWF7;b+^4xVF*=FJ{n%$?jAG7y?6Vj9pd;RbiR_cV zsOd31&zCa9!fIzmpgqi;j4^^VFKS0xe4$Z@Cm0V(l^DXy3hq{+fGs!go=j zT_-&mTJ7}R0#a;Dv?bns+&Cno033GPhJe(K5^@Uq@K;*Y4WnbAu!M z?@B(qVr&KfwWHHJ#9mmoeo46k59VBHG(T(JaR2fpMmIcd>m0D5?clpte^0pAwDR%| zXZjYk_nF=xYp-0hm+-Wrdd1Hi>ifuW@xi#7oA3XfaO8EdKC|~M`8kG;_-#kJC5IZs7IGQzn_2hx7Wb@Q=nh|>RrD$>d!%P$s4(b z!;6c#90{twsPnwItf#KG>&DjIQp3NdW4m=z`uJaRep{*Jl#nrosEpqC-M;NtqO(t# zf-dQ{Zyf$5uA+Lva|lL-&Y*t^)VZDE9wpfafihG zp&-VKyCh}}1o8a<5EDfBFc8gBnS^W0B(a!l%L@{w5g?|Bs1YDmrGeN+B3Br*K}4s6 zux5jh#U>KA86X^UK+F&^IUshDI7~u_;v+%C4FZwDVrPqZ5>A6bd_NMzT;V(l#4!@X zM}e3xj)O2R5bj?YwOpQ#WB#dwNC;yT5*qHZq4VUbI5MBJq~D#E8h922uCj*G_> zCq#q{@ts&qaZ4jW4u@pGDtlH$chV^Qbo#nf1S zOS}|eJp7ik1JZtn@xJl7QORcNS);AQhw9};*50x4sBx8% z|2O+kv`HzNtvYR&-9-IMI^!W7SaMg1*6mg6S{KjU>W;miE4?GcOx$OAqX$mZ7v%`}XqsB!Q3B$0i>=xpMXQbonU zQ^rFq%TE8xPjlk5iVRR{XV*Sa`&(F$McAC7in;!Gl_HbT!L0Wl)m;CpMXd&-Gs#y_ z2l~woG_w4N_l;!xry6(s`G@gLbdl)q)J3`IS);JTNftiV`0j7@gP>t8qG`c)@RMKX zQ$_r&(`+y>$}@}P)@vM_$_Fm_*`RT}L(XS=m@gl2rR0N0^TF}4M#CnJWC46?h#7Cz zI6f3Pngl*uG>%UnmC(4Y8ix)yMAHbLZ5ju!Hgr}PgJHYI@kyrdwASt5v)$nNCwvU2 zG;*hA2%j^w0QlJjj?sMlIu`}AQhPKz{#0P8mUgek6$h6A@Uu_j_-rG7LPgIo?AN%G ze1>o+2!6iNNIqUVOkwbFrN*&KF`~*RPviKM8i$V`bw5{s#F(Qn_&tJV$LCnT(710k zj?Wl>NsbvD)<{fX!)TKD9ML#TVE)dR3xwgQ#N&`z-F)}kd6Sm{G!IyLO7F=?Egy|=?N7c$-keeJhshvFF?QkyrS9F z2It2}eDuevdh`M z_{U#`DL)Bd7v0ggV1!#C%-*=GaUlq|VFG-3wa$en6gW!)pGTUV1>s%*dx+!DBw+v_ zS4IzI8~)J9`XJjP%#0svTsXq*HSUSVH2}w7=&&&Qjtyi(pf|w6{?hCkA>0e74?Nen z#t2^kn8yo+i%@=kY4}ki)i2A`pI9+NX7Wl)+zjE%05f^5aY1x%d^|20Mc81;U3e!- z^Rk(W4_We2(;Q$VFbenr_!8iHItCaEj05@s@c^HFjRM*N?SS?`2cRR+35W(d16_cw zKsTT}&;#fR^a5gR(5Jl-=mW$8R)EhszW`nXZ-IBf-+%#eM!*Iz0R@3VfGxnMmJ0(# zfTDmMPzEaK$+Y@TuKtfDDWP5&%AYT@Te+4Qc><;jE1q*;B0Jpd0zzQH0 zmBJBC+1|Kw4FiS)BLFr$hhiiGUjSbMqk%ENSYSNx6)*wl2gCvKK!2bcz#Zf%3V8%P z0QgYDyWxOH)-iUzs^+@ZL(axGm21OYX8rl|>V zTk;3E6$Jw!fGgk*R0Oyjai!sk!3q5a;LgJ(ZYo+b4G_RQU;(fYSOhEvmH<^@mke;n z$pE;cWC7VchU^D;qTnguTi`IjO`V%~7|;}G25@)bZsHFF0MmdZWS$5N0Qj?o-+=`1 z2Oznlgo7W39`gnGJBg~0{QbxdU?+bUF%E(8Kn^ex7zJ!WB5pl9fStfDU^l>>=NrHZ zn>e69kN~6r=>UHxHv<>}G=ts$Oa`U^Q-Lpl$4L7GcnaJB?gGI`R}FEtz)k2Ap^pRF z0q3AEhkOqC0(c2zzrufi0U?O+Kq52H3E^lU7CaB*Jbd%4-2i%WKJa*38yEtvFTkI# zTm!y9+R?xq#C3yS7h$IJLij$y+zNjK*7HnV4FR5cc$}e8PoM|Da2}9^L_A4Q=jkCE zu!qhQ0y&c=8U9MkW2h!uK?VZ75XVjYPsnG$Nr3jrbX_&@@3J!zMFHI8xv6&men5iW zz+q(63$i0PZqPph7lA$i<1Yi3H2n%>^d%VLbL}^E-)&CiG&nj1kExBIebeIM`w-%=m(q)rxErO#!RVXHj{E2 z@dC|-kcSsvfERS!YWx5m<+$|(0fB(N9r0A<4m1K90QCV2z=KVgCc_~c0*wK>B<&Xg zoLi_?wqXtee*i3)8I=Q^P?_QY{jm__Ye@R%Eg%Bmh)n_Z1Gj-CKr`S5FcUZnGzHiQ z+B1#?p8?o*89?ESt3!7Q{bFb!bF%y2Pa1(@LsU@|ZXmjm@%`T$H!^auI@oYC<> z9Kh9`9K)+mNU`xsCjiJl}GJ!O9%0L9zqEuiAFc=sFqyrfMD+t5)6&Q{% zGyT6K(f|M3jOb8wq-g+sCKs3r)CU-+^V793xkUgSUiZ0K9DgR}*a%=YFb|ju%m)?# z3jsaxDTKcTm^1mr1yBcA1*`;C z0~`_-K*wR?b--3&qo!|y+yZO{b^|+s9RTCE1KR-dyEN>B+zWgM90#;UWWS&HM?jVX z@&LBv0Pqda2%s_LA>bfT31E*L2G~>V1;#V|QQ#PG0$|)p;Cq01a7bnX`gHymC*==X z3C34{Xru(5ExlB~c}fW7IC z@)f6`!5@Hbr1u0f`yF@$ECC(>_kkM#Gh#t^0S?a{;8%d-&Xun<5xt)MfYSP^$%5l|RBGo$^V04rz)XA7{q?I4Q+MSx;}J>U)-`q#(3!#whULOi#; zM&LPc3n&d;Z#i45x6~2gl0XUI;}+|^QVMY#Z+%$GK+oUpoGqT<*odl-b0D+b5ukIh zTUe{I(7E+;D3}pj$}#3JxPWs8SP8b6pGDxAj+JI*-4N#vxd^C$Fk4?9Qt3HJz58c@ zM^9%ft!Fp05LX!FZ}ntw?f?@rq24kU+!=ah*jEB70#yKaaEky|h`v)3Ts2@B!fa$) zAQq?rt~%hs@h7Q+k+l%f98ymZjW9D|0?u1^z#Cy!stLe~)rQVPi!Z|LG4=#2soNKT zPJ6wVY0L9(Ajdxg5p^JW5#44uc)K0r^PJHTTsFEz4@!k{$*T_JfeZV9vingbC4uke}z)e-LnP>%$<0nC(_ z5Ihglnc740Ow4n#ezicmE<8$1mb}>AQrF!{eZr}C}1k!js&d% z_7?5t0keSF08jrcm<Xb21j*Z{ratSBp=1+cPA=fV~Z19)vx z02l#`1abft!tiK-mHYzWn2v#*0DPr^t)B)=2V@`@V6RO9$Wy0ekIexBk;h!fA0V@t z$rfNUunE`*Yyj2+>wvYu*T5QJHLwa;39JB?1IvJ=z!G3Fun1TPECAT@9gzEhZGhfm zyAeK(I8;2_uoDW6wgYT2!@B@)7%T$VWo?1IKoqbC*azroSO{&HA@kz+9|7`!fxrQP z6=3080ov1!@!O18MHs=v-$EV&4g$=a?P!jqJhe=ZH!p0s! zUOry_sDg-?B>5Suh~bkYXQP)8lcdP9K}hL{l#zYPg|6zAdr>m_!J1AIDgLHi7vVfv znrn;~+a^o>@S})wQ_!N9DBc07vc4&GtyFQxmlB7-o5{=~Y6=QbL@6<=7G-CYK()WvpD92xaHDY?n`x(CXql>`+3E6Y{ z%M;k-eII_dU^(`>a-cZy7Z*5yC8Ea@G ztQtt&?ZlkvlCRX)PMn&KTIbk_jq9XR;>~oayfofUxXu76>_or}7%jFFJVO_&he)Z##Q}lTBZ`aq zU!$V>TO5a%2=U#%BjKFp3h<&O#f95G$+0eieM>0c(&fCJADCUMUG175dT|LF?TW%@ zt*G(v`LBKNe~2kjQgoXoIr-_Ye_V4nCoSlg+J`<^d}8o0Ed#vjh)J`gcx@z{q_w4l z!&=mMdnr->7s-)-U0>@gy-lk7IY|dfiT&)$?@EdFvmq~(5(oC9jWv{!ZFdku`Y5A&@=y3$Hpri1fBRK`=@1R_F;wPs&2O{l0q;SKm=C}mCUcIbq zW>WTt7*9tr0%@gsj-uBAl&Zf@?qqHO^N)3}4gX*XCpk&WPO#hp+1GLAT!_IaJP!%= z7v)_Ud(L?L(DM2p63%fHtza4ODd$k%sQCGcYlVr+UrR3H)Lf~KG^@1OzXs*1F8`li zjdBCMd^l5e=hQoTacQyW3{tLxoCm2lU2oX#(&7<#SN)Bc_xleWW3CslP{}cnOSsln z=~8KNW*c(2Ut09~9`bEzkuo1C^*2Hec)q=kavmf9ZdEq?A!qUZt+krOU0Fqr*qL*tj;Gxb+2 zeCv1x8j_queOLtOZ?uf=@^dW>t9_aXg7q+2gJiL6CZE!%r8>MWW$1I~DC5u9;`t9Z8vou z?@%+~km&Dw4KMX|yvv4;LlL8Gj{j5h0t{-Uog}@=aNw9_VDq-wt*w0NL(s82Yjx+0iW&o07KP^V((JaGqj?(fIq#+O#s_#U}qvEbN$zHc?> zD@fuZf`eTF1vrgNO7}rub7*8WRp0BkrcK!VLgw+t{ zk~Nac``z%PJxvtGe(9>ey}MQIgG-!G9O7b&Rg)7_JxBR|ycN3YZzTR#=(Bac($lLP z*t%W;*q5{dxDnTRf4KR0hrQ`1dhpPr?X0f)%d4Aj`}^9@-L7>|T+WAk*&{!(mX=sU zj;zJ>*5A9SzwA!&C`@o%h~r{~S2Lkc4{SQ&;2)>v!I+c&!fPG!C?6o2t&{rdCjz~8 z|8d?`Q-11XfWuG9w>Y1xCmUD&9mIB3z6oh`wzd@sd5MMtfVLgD>Mu^7GSBVmn;ieC zu)qnPmBM;e{tzmqoy=Vy;YI+@`tvuu_*3+{azL?E#^6<;_+uk1iv|hT4VYB=d#s1= zZI=_AHm!yZSgQjll^3u$VQ=)VDzYj%)WK#8;T4;!SG(y+S1Z6nUqA0P0Q9MIhu zJr|M0vh*_N)DugPLK+z?HeSc+6qhJklh)>oZyuTE{ru1aneZY8&2R}3Ezctp zj}T$mB=vP22}@4n3et@pQI8&_z>-TcI^jl$IIszp4@1OdSW1g6!uuKYwHDEBGb*f| z-Sm;tFC(;*v8(>B<_(9IM6|EwhRaZW&(x1{UxWz2_)Hw|0wNlyPc;uK*nMv3#N|m!6O}Rf zq{H$Yg%?MQR@>0GdL#9z`I*C`khWt+>BiPZqV0AJ;K&fecP{*d$zSGVeQGGerj2+&_rJ*bm!xkxg&1NTI&3@NfT;mF5 z-$tA{2>BVm`nWA0wLzO8uGTi{Pdb*KKj!gt^AELI4vN8+l-Fh^vUk;An%?Ze)}`I< zt;E$gCv*_*8tJ|CQOmO>bBmcr1j>OHmJQQdKi;uV+T?HaK0LU z)GK-~XbaDOajDPTnsL=%4L{1h)2#SNrTW^(Psu;&tDs9SN$dSU;e#q!D}Z+ZgH9mt4ot|>*}M~ zD+NZ2oMTdstN!BnMi&mvzV(gM1|-J4ZjOppy6a8ccH;4^dhqh-s@KR|zpy#D59l%^egUZNhjZI|=3V|d7+!M&nB)I%K|o=|>2@&4ZP``d2X z@*q;alSaAT#`h)M`@7wKdp~Pp(VstLqIc>e&7#WaqszZ>JG~zk+V1m_W=~)-?hWE^HgQD~) zocvR|D&JY=1b?;UCtvrMy!V2Qn8QB_F~w1ZtSc29PWJKS9?O#`Zo!Z0CPtjX8AP9# z`toesedcMb1kT;@^*IubiLkU-`scW}NQhg4yd&`Wb33juTOsXduCTdSsCQ#Z6=Zl| zcQKFFV^I<=+H*pW*m|_HJ-Y3~ZQ}Xe#Ti&gxMx!yH~#)hzM4hAI_>U~eZwYK>_Z>& zHVSKvj=0-Hz4sAS&8yP3IbEIEMe0?Vep~Uw%`@#LXTWac#_?;=xHgFSWrN;=ewBvgCe#eME=F)nhth=tsA% zMjefRSgwZ>qa41}lZ=z=%oug~co5sA!_|-jjbIU^I{V@nagE=djOeY-$qwfpRL)9v z=nM<(;!Mj!uM%#(;TxhN1#O&NJEL4)`n^psZcM4zh_|fx6%q`z6O_pPmo$LaVDJ6~ zul>a36tC8CIrWK4GByn{`Xw2zHv68Je6y3S>Wv!x-Sa4tQwBwv@uj8%D)UXPxtD`G zI5n4yK3HUVKyXG(8N}!>hG&eD#Ndq>uHE|kubF#eZd#1rUsJZVJ2ov{$yNCV?myRTt#b`&8HtH8shNhrAmhF+KM%sZ z!wm{AZ#=YM$V!gI|9GG$;O70Njk38m;kKbKuJWuXhztFUF6U>qY}os*5~Eywef*`d zgV7R-8)Nu<{Jkt=Scy9SQH}%3sfgQY7`T*})HJJSV%j3t1}?*`r5~dp_5udMAztji z57+$9k;RxR*D`ML;>mrSZnT|NSRUY}(7AYZPz%q$e)-EnH~o+y+Y4uk?l1b@z+v72 z7Ic*fvC}v0y?p!^c8D^O49)|@sT(NLIzXLk!4;bI$ePx?1@d5#*!I=g>WHP*kRFo~ z(>uXxIQFtmk?Ef2zEuiBPIzP~QmsN4J4OGCg~&7#Al>orSM zXu+>^c(sXgKXVa}j>OnaM(+Bp6W8s?gNw=B*_HQ4$}9gw9=OZQEH)&95OZ{R^)9uylZ>b;RAlshzLm>t)3SFlOeyq6aJkUTYS< z30t0?I33py7Cd0UNs6Q>KkUr;ZGC2LryB#GE2Y$7DY%ul7HM6}!-DI{X6Fhm@=8`J z1PeL`TI-)8t}*vkuqX?Q&{ip#3~q$yr0wnS^?J!(^>!ug*c9P) z9l0-uMHN_dbZK_B!s9K+mE5(OiQdy0+-ir+Py6&*ZHaHm%Wy8QA=L-Oc;g~ z9Ch?uy>xNwI`+Gb>7pgvdge`Ol$4wyzPyP!qm8obf36$)S#M8_*&}_oU7D4oLq0if-W62({sA}p%Uoi5m=@; zgs_;(JU;RDy>jc9Tw@!$swbGGolgWStu6QIRG!=t8E?@IMQ zSoml$SH9@m#AoK^ybm#rv&9Ie<*yEyws+|_X8Q`I{`z2%sKv;^4=VMaG-uq0n337y zB+|OhfCav>&sk8`d-u7!eY$+GSd%^TE;2s=1D-qW$~3yWVEv$@9}F&NF<&={@17b~ zZQh5N2ic+((n?Z}h`S4iSvf|`qyEhp@$M1iFJr`+yHX8PoxwO)h}`S=j??)b&L_HE z%viDL9xC_A6+k(#YnI}{J;|lif9`fs5l+!5CQwC90)S}ms0CfP^T6DuCzUZS>E2WP$p)6) zubXx~a1EO_SDj;DZGLm8P1K4%pmUA6nLaAsAvWU5E9jib%LjCw(6?#0>&K73?Z?rU zm-v6>&Ayh{v*%*Qd-l#q`g=!`@0z3&uGfyk084R>vu)jSU$$)#ulx)V^{)A&By0-X zv=eECZG6SX!ZvdYCnqIjdd4IqBoE#ZQ^dxpDE^LM?V>i7#G7(99SbMoZ-sbTQ&W>u zMceW=Eyc3cHf2Rj85{Q<3(DI(G|en+Q$mC|+r*2U1~#T0Q!Cr7v=i5yZJb4*ugzDY zsf*2BG0E4asHo*@Q)I_eUz=KCV!x|R$c_rBHU%Zm4@KAZto=dpNQlEK6XNff)MlsPZ?ot@_K&FTWK%wy5lE_Z8a56* zYsMt?lagbt3Guya_f7K}9Fs7hep*uIfZF}y)8jIFd-g$G^57&Z&Yv-9nV#u9%vqEE zpE|52w22@JlYVWnR7FW^rAeR(O_7!nQcJ1Dn?E34QV`=!rrGT_xZSmzAy_E14JfJA zC_;UDuo4j4gBQK*(dxl~7tea?#gjoi_2R`hn^@CWPxIz`GqaEHdvAENv(m|$hVab1 zYZuHJnODNH-RWDNsni1ZsrfnA7RsHoxpx)?Y3B^7a&D&+FiNRSL`U{{>JE=%I|!zM z5|T&R)9~{>afap(BYwQmwKLwZs8U6e?#^PE;#(N(+Y3Z5`4f~#(ar=5eYMKX=2=?F zuwAaAhvEwuq)QhV9i!AoM&E5Bc1ZK6-!TD)$F#+V=|RhtqDSWur_WpHpc@|u!K3V1bm@455O|IhCsa96`Bdw6o&npU5kqFn@YF^W5 zu*K+UO2?4s`zw<^U{5ppvCYH`e8QdHf0Q-&1x9arkr@7u^n6n5CRz?-C>iwM>`e$F$Tfh|qt}f*j7;rgQ|8m%W*D3{9N)fJC%zGw$Uai}yFr zX{854k*1C8Z<>iw`nk<|rq?h=ufjOd6)_s<4B0EFJgk$AK-15$x+AxR|UPl%$n9JI7ySsoITTJ-1e_M#OpSyEn(bm adyMbhwEG-}-}wTyb{ct!XPl*>r@sM{T=P`` delta 78445 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

AmR%Wd7lkw(OJg$Q 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%0Dg!Kzn`v=1jr*e~O(tn3&ts{Qs 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 diff --git a/knip.config.ts b/knip.config.ts new file mode 100644 index 0000000..b686e6b --- /dev/null +++ b/knip.config.ts @@ -0,0 +1,3 @@ +export default { + entry: ['src/cli/index.{js,ts}'], +}; diff --git a/package.json b/package.json index 36615cb..bfef8b4 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "deploy": "bun run build && npm uninstall -g to-where-cli && npm install -g . -f", "deploy:remote": "npm uninstall -g to-where-cli && npm install -g to-where-cli", "verify": "bun run lint && bun run test", - "bump-version": "zx scripts/bump-version.mjs", + "depcheck": "knip --fix", + "bump-version": "ver-bump -f -n -b package.json", "show:version": "npm show to-where-cli version" }, "dependencies": { @@ -67,14 +68,12 @@ "url-join": "4.0.1" }, "devDependencies": { - "@pnpm/workspace.find-packages": "^4.0.9", "@types/chalk": "^2.2.0", "@types/commander": "^2.12.2", "@types/fs-extra": "^9.0.13", - "@types/jest": "^29.2.2", "@types/js-yaml": "^4.0.5", "@types/lodash": "^4.14.187", - "@types/node": "^18.11.7", + "@types/node": "^22.5.3", "@types/open": "^6.2.1", "@types/prompts": "^2.4.2", "@types/shelljs.exec": "^1.1.3", @@ -84,12 +83,11 @@ "esbuild": "^0.16.4", "eslint": "8", "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", + "knip": "^5.29.2", + "only-allow": "^1.2.1", "rimraf": "^3.0.2", "ts-jest": "^29.0.3", - "ts-node": "^10.9.1", - "typescript": "^4.8.4", - "ver-bump": "^1.1.8", - "zx": "^8.1.5" + "typescript": "^5.5.4", + "ver-bump": "^1.1.8" } -} \ No newline at end of file +} diff --git a/scripts/bump-version.mjs b/scripts/bump-version.mjs deleted file mode 100644 index 3f3c515..0000000 --- a/scripts/bump-version.mjs +++ /dev/null @@ -1,90 +0,0 @@ -import { execSync } from 'child_process'; -import { findWorkspacePackages } from '@pnpm/workspace.find-packages'; -import { $, chalk, fs } from 'zx'; -import { join, relative } from 'path'; -import prompts from 'prompts'; - -const rootDir = join(__dirname, '..'); -const packages = (await findWorkspacePackages(rootDir)).slice(1); -const packageOpts = packages.map((pkg) => ({ title: pkg.manifest.name, value: pkg })); - -const { picked } = await prompts({ - type: 'multiselect', - name: 'picked', - message: 'Pick packages to bump version: ', - choices: packageOpts, -}); - -if (picked) { - for (const pkg of picked) await updatePackageVersion(pkg); -} - -async function getBumpPrepareData() { - let gitLog; - let currentDate; - - const getGitLog = async () => { - try { - const gitRes = await $`git log --pretty=format:"- %s" "master"...HEAD`; - gitLog = gitRes.stdout.trim(); - return gitLog; - } catch { - console.error(chalk.redBright('Could not get git log, please write changelog manually.')); - return ''; - } - }; - - const getCurrentDate = () => { - const now = new Date(); - currentDate = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`; - return currentDate; - }; - - return { - gitLog: gitLog ?? (await getGitLog()), - currentDate: currentDate ?? getCurrentDate(), - }; -} - -async function updatePackageVersion(pkg) { - const relativePath = relative(rootDir, pkg.rootDir); - const packageJsonPath = join(relativePath, 'package.json'); - const versionPath = join(relativePath, 'version'); - const blockletYmlPath = join(relativePath, 'blocklet.yml'); - const changelogPath = join(relativePath, 'CHANGELOG.md'); - - console.log(chalk.greenBright(`[info]: start to bump version for: ${pkg.manifest.name}`)); - - // prepare bump & bump version - async function bump() { - const { gitLog, currentDate } = await getBumpPrepareData(); - const { changelog = '' } = await prompts({ - type: 'text', - name: 'changelog', - message: 'Please write changelog:', - initial: '\n' + gitLog, - }); - execSync(`bumpp --no-tag --no-commit --no-push ${packageJsonPath}`, { stdio: 'inherit' }); - return { newChangelog: changelog.trim(), currentDate }; - } - - try { - const { newChangelog, currentDate } = await bump(); - // update version file - const { version } = await fs.readJSON(packageJsonPath); - await fs.writeFileSync(versionPath, version); - - // update blocklet.yml - if (fs.existsSync(blockletYmlPath)) { - await $`cd ${relativePath} && blocklet version ${version}`; - } - - const title = `## ${version} (${currentDate})`; - await fs.ensureFile(changelogPath); - const oldChangelog = await fs.readFile(changelogPath, 'utf8'); - const changelog = [title, newChangelog, oldChangelog].filter((item) => !!item).join('\n\n'); - await fs.writeFile(changelogPath, changelog); - } catch (error) { - console.error(chalk.redBright(`[error]: failed to bump version for: ${pkg.manifest.name}`)); - } -} diff --git a/src/classes/simple-config.ts b/src/classes/simple-config.ts index d0410af..95d2f08 100644 --- a/src/classes/simple-config.ts +++ b/src/classes/simple-config.ts @@ -1,12 +1,12 @@ -import { Config, Point } from "../meta"; -import { ConfigProtocol } from "./../protocol/config.protocol"; -import yaml from "js-yaml"; -import { ensureFileSync, outputFile, readFile, removeSync } from "fs-extra"; -import { isUndefined } from "lodash"; -import { join } from "path"; -import { homedir } from "os"; - -export interface SimpleConfigOptions { +import { Config, Point } from '../meta'; +import { ConfigProtocol } from './../protocol/config.protocol'; +import yaml from 'js-yaml'; +import { ensureFileSync, outputFile, readFile, removeSync } from 'fs-extra'; +import { isUndefined } from 'lodash'; +import { join } from 'path'; +import { homedir } from 'os'; + +interface SimpleConfigOptions { configPath: string; } @@ -14,7 +14,7 @@ export class SimpleConfig implements ConfigProtocol { public readonly options: SimpleConfigOptions = {} as SimpleConfigOptions; public static readonly DEFAULT_CONFIG_PATH: string = join( homedir(), - ".tw.config.yml" + '.tw.config.yml' ); constructor(options: SimpleConfigOptions = {} as SimpleConfigOptions) { @@ -28,7 +28,7 @@ export class SimpleConfig implements ConfigProtocol { } async get(): Promise { - const yamlStr = await readFile(this.options.configPath, "utf-8"); + const yamlStr = await readFile(this.options.configPath, 'utf-8'); const config: Config = yaml.load(yamlStr) ?? {}; diff --git a/src/cli/index.ts b/src/cli/index.ts index b19f8e7..4bc2c86 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -1,6 +1,6 @@ #! /usr/bin/env node -import { createProgram } from "../classes/create-program"; +import { createProgram } from '../classes/create-program'; (async () => { const program = createProgram(); diff --git a/tests/utils/git.ts b/tests/utils/git.ts index 9d1958f..7cf9f5f 100644 --- a/tests/utils/git.ts +++ b/tests/utils/git.ts @@ -1,22 +1,22 @@ -import gitRemoteOriginUrl from "git-remote-origin-url"; -import { basename } from "path"; -import { getGitRemoteUrl } from "../../src/utils/git"; +import gitRemoteOriginUrl from 'git-remote-origin-url'; +import { basename } from 'path'; +import { getGitRemoteUrl } from '../../src/utils/git'; -jest.mock("git-remote-origin-url"); +jest.mock('git-remote-origin-url'); const gitRemoteOriginUrlMock = jest.mocked(gitRemoteOriginUrl); describe(basename(__filename), () => { - const httpsUrl = "https://github.com/skypesky/to-where-cli.git"; - const sshUrl = "https://github.com/skypesky/to-where-cli.git"; - const targetUrl = "https://github.com/skypesky/to-where-cli"; + const httpsUrl = 'https://github.com/skypesky/to-where-cli.git'; + const sshUrl = 'https://github.com/skypesky/to-where-cli.git'; + const targetUrl = 'https://github.com/skypesky/to-where-cli'; - it("should work with https-url", async () => { + it('should work with https-url', async () => { gitRemoteOriginUrlMock.mockResolvedValue(httpsUrl); const url = await getGitRemoteUrl(); expect(url).toEqual(targetUrl); }); - it("should work with ssh-url", async () => { + it('should work with ssh-url', async () => { gitRemoteOriginUrlMock.mockResolvedValue(sshUrl); const url = await getGitRemoteUrl(); expect(url).toEqual(targetUrl);