├── .eslintrc.json
├── .github
└── workflows
│ └── ci.yaml
├── .gitignore
├── .husky
└── prepare-commit-msg
├── .prettierrc.json
├── LICENSE
├── README.md
├── bin
└── git-scribe.js
├── hero.webp
├── jest.config.json
├── lib
├── assistant
│ ├── examples.js
│ ├── examples.test.js
│ ├── index.js
│ └── index.test.js
├── clients
│ ├── openai-api.js
│ └── openai-api.test.js
├── constants
│ └── index.js
├── index.js
├── index.test.js
└── utils
│ ├── commit-message.js
│ ├── commit-message.test.js
│ ├── git.js
│ ├── git.test.js
│ ├── openai-api-key.js
│ ├── openai-api-key.test.js
│ ├── spinner.js
│ └── spinner.test.js
├── package.json
└── pnpm-lock.yaml
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "es2022": true,
4 | "jest": true,
5 | "node": true
6 | },
7 | "extends": ["eslint:recommended", "prettier"],
8 | "parserOptions": {
9 | "sourceType": "module"
10 | },
11 | "rules": {
12 | "no-console": "off"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yaml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | branches: ['main']
6 | pull_request:
7 | branches: ['main']
8 |
9 | jobs:
10 | build:
11 | runs-on: ubuntu-latest
12 |
13 | strategy:
14 | matrix:
15 | node-version: [16.x, 18.x, 20.x]
16 |
17 | steps:
18 | - uses: actions/checkout@v3
19 | - name: Install pnpm
20 | uses: pnpm/action-setup@v2
21 | with:
22 | version: 8
23 | - name: Use Node.js ${{ matrix.node-version }}
24 | uses: actions/setup-node@v3
25 | with:
26 | node-version: ${{ matrix.node-version }}
27 | cache: 'pnpm'
28 | - name: Install dependencies
29 | run: pnpm install
30 | - name: Run tests
31 | run: pnpm run test:cov
32 | - name: Upload coverage reports to Codecov
33 | uses: codecov/codecov-action@v3
34 | env:
35 | CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
36 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 | .pnpm-debug.log*
9 |
10 | # Diagnostic reports (https://nodejs.org/api/report.html)
11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12 |
13 | # Runtime data
14 | pids
15 | *.pid
16 | *.seed
17 | *.pid.lock
18 |
19 | # Directory for instrumented libs generated by jscoverage/JSCover
20 | lib-cov
21 |
22 | # Coverage directory used by tools like istanbul
23 | coverage
24 | *.lcov
25 |
26 | # nyc test coverage
27 | .nyc_output
28 |
29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30 | .grunt
31 |
32 | # Bower dependency directory (https://bower.io/)
33 | bower_components
34 |
35 | # node-waf configuration
36 | .lock-wscript
37 |
38 | # Compiled binary addons (https://nodejs.org/api/addons.html)
39 | build/Release
40 |
41 | # Dependency directories
42 | node_modules/
43 | jspm_packages/
44 |
45 | # Snowpack dependency directory (https://snowpack.dev/)
46 | web_modules/
47 |
48 | # TypeScript cache
49 | *.tsbuildinfo
50 |
51 | # Optional npm cache directory
52 | .npm
53 |
54 | # Optional eslint cache
55 | .eslintcache
56 |
57 | # Optional stylelint cache
58 | .stylelintcache
59 |
60 | # Microbundle cache
61 | .rpt2_cache/
62 | .rts2_cache_cjs/
63 | .rts2_cache_es/
64 | .rts2_cache_umd/
65 |
66 | # Optional REPL history
67 | .node_repl_history
68 |
69 | # Output of 'npm pack'
70 | *.tgz
71 |
72 | # Yarn Integrity file
73 | .yarn-integrity
74 |
75 | # dotenv environment variable files
76 | .env
77 | .env.development.local
78 | .env.test.local
79 | .env.production.local
80 | .env.local
81 |
82 | # parcel-bundler cache (https://parceljs.org/)
83 | .cache
84 | .parcel-cache
85 |
86 | # Next.js build output
87 | .next
88 | out
89 |
90 | # Nuxt.js build / generate output
91 | .nuxt
92 | dist
93 |
94 | # Gatsby files
95 | .cache/
96 | # Comment in the public line in if your project uses Gatsby and not Next.js
97 | # https://nextjs.org/blog/next-9-1#public-directory-support
98 | # public
99 |
100 | # vuepress build output
101 | .vuepress/dist
102 |
103 | # vuepress v2.x temp and cache directory
104 | .temp
105 | .cache
106 |
107 | # Docusaurus cache and generated files
108 | .docusaurus
109 |
110 | # Serverless directories
111 | .serverless/
112 |
113 | # FuseBox cache
114 | .fusebox/
115 |
116 | # DynamoDB Local files
117 | .dynamodb/
118 |
119 | # TernJS port file
120 | .tern-port
121 |
122 | # Stores VSCode versions used for testing VSCode extensions
123 | .vscode-test
124 |
125 | # yarn v2
126 | .yarn/cache
127 | .yarn/unplugged
128 | .yarn/build-state.yml
129 | .yarn/install-state.gz
130 | .pnp.*
131 |
--------------------------------------------------------------------------------
/.husky/prepare-commit-msg:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | . "$(dirname -- "$0")/_/husky.sh"
3 |
4 | ./bin/git-scribe.js "$1" "$2"
5 |
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true
3 | }
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Matías Olivera
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Git Scribe
2 |
3 |
4 |

5 |
6 |
7 |
8 |
9 |
10 | Your AI copilot for crafting insightful Git commit messages
11 |
12 |
13 |
14 |
15 |
26 |
27 |
28 |
29 | Git Scribe streamlines your development process by translating code diffs into concise narratives ✍️
30 |
31 | Whenever you need inspiration, execute `git commit` and Git Scribe will suggest a message for you ✨
32 |
33 | ## Getting Started
34 |
35 | Follow these steps to add Git Scribe to your repository:
36 |
37 | 1. Install `git-scribe` and [`husky`](https://typicode.github.io/husky):
38 |
39 | ```sh
40 | $ npm install --save-dev git-scribe husky
41 | ```
42 |
43 | 2. Enable Git hooks:
44 |
45 | ```sh
46 | $ npx husky install
47 | ```
48 |
49 | 3. Add the [`prepare-commit-msg`](https://git-scm.com/docs/githooks#_prepare_commit_msg) hook:
50 |
51 | ```sh
52 | $ npx husky add .husky/prepare-commit-msg 'git-scribe "$1" "$2"'
53 | ```
54 |
55 | Profit!
56 |
57 | ## Data Privacy
58 |
59 | Git Scribe uses OpenAI API behind the scenes. If you have any concerns, you can review OpenAI's API data privacy policies [here](https://openai.com/api-data-privacy).
60 |
--------------------------------------------------------------------------------
/bin/git-scribe.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | import { prepareCommitMessage } from '../lib/index.js';
4 |
5 | prepareCommitMessage(process.argv[2], process.argv[3]);
6 |
--------------------------------------------------------------------------------
/hero.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/olistic/git-scribe/21fdae0405481afa6646d0ccfdee52cccfa7fe30/hero.webp
--------------------------------------------------------------------------------
/jest.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "clearMocks": true,
3 | "transform": {}
4 | }
5 |
--------------------------------------------------------------------------------
/lib/assistant/examples.js:
--------------------------------------------------------------------------------
1 | import { getCommitMessage, getGitDiff } from '../utils/git.js';
2 |
3 | const exampleCount = 3;
4 |
5 | export async function getExamples() {
6 | const commitsAndDiffs = [];
7 |
8 | for (let i = 0; i < exampleCount; i++) {
9 | const reference = `HEAD~${i}`;
10 | const commitMessage = await getCommitMessage(reference);
11 | const commitDiff = await getGitDiff(reference);
12 | commitsAndDiffs.push({ message: commitMessage, diff: commitDiff });
13 | }
14 |
15 | return commitsAndDiffs;
16 | }
17 |
--------------------------------------------------------------------------------
/lib/assistant/examples.test.js:
--------------------------------------------------------------------------------
1 | import { jest } from '@jest/globals';
2 |
3 | jest.unstable_mockModule('../utils/git.js', () => ({
4 | getCommitMessage: jest.fn(),
5 | getGitDiff: jest.fn(),
6 | }));
7 | const { getCommitMessage, getGitDiff } = await import('../utils/git.js');
8 |
9 | const { getExamples } = await import('./examples.js');
10 |
11 | describe('getExamples', () => {
12 | it('returns the commit messages and diffs', async () => {
13 | getCommitMessage
14 | .mockResolvedValueOnce('first commit')
15 | .mockResolvedValueOnce('second commit')
16 | .mockResolvedValueOnce('third commit');
17 | getGitDiff
18 | .mockResolvedValueOnce('first diff')
19 | .mockResolvedValueOnce('second diff')
20 | .mockResolvedValueOnce('third diff');
21 |
22 | const examples = await getExamples();
23 |
24 | expect(getCommitMessage).toHaveBeenNthCalledWith(1, 'HEAD~0');
25 | expect(getCommitMessage).toHaveBeenNthCalledWith(2, 'HEAD~1');
26 | expect(getCommitMessage).toHaveBeenNthCalledWith(3, 'HEAD~2');
27 | expect(getGitDiff).toHaveBeenNthCalledWith(1, 'HEAD~0');
28 | expect(getGitDiff).toHaveBeenNthCalledWith(2, 'HEAD~1');
29 | expect(getGitDiff).toHaveBeenNthCalledWith(3, 'HEAD~2');
30 | expect(examples).toEqual([
31 | { message: 'first commit', diff: 'first diff' },
32 | { message: 'second commit', diff: 'second diff' },
33 | { message: 'third commit', diff: 'third diff' },
34 | ]);
35 | });
36 | });
37 |
--------------------------------------------------------------------------------
/lib/assistant/index.js:
--------------------------------------------------------------------------------
1 | import { createChatCompletion } from '../clients/openai-api.js';
2 | import {
3 | sanitizeCommitMessage,
4 | validateCommitMessage,
5 | } from '../utils/commit-message.js';
6 | import { getGitDiffStaged } from '../utils/git.js';
7 | import { getExamples } from './examples.js';
8 |
9 | const maxAttempts = 3;
10 | const systemMessage =
11 | 'You are an assistant that helps developers write commit messages. You will be provided with a git diff of the changes that are about to be committed. Write a commit message that describes the changes. Be extremely concise. Use imperative mood.';
12 |
13 | export async function generateCommitMessage() {
14 | const examples = await getExamples();
15 |
16 | const prompt = await getGitDiffStaged();
17 |
18 | let attempts = 0;
19 | while (attempts < maxAttempts) {
20 | const conversation = [
21 | { role: 'system', content: systemMessage },
22 | ...examples.flatMap(({ diff, message }) => [
23 | { role: 'user', content: diff },
24 | { role: 'assistant', content: message },
25 | ]),
26 | { role: 'user', content: prompt },
27 | ];
28 | const unsanitizedMessage = await createChatCompletion(conversation);
29 | const message = sanitizeCommitMessage(unsanitizedMessage);
30 | if (validateCommitMessage(message)) {
31 | return message;
32 | }
33 |
34 | attempts += 1;
35 | }
36 |
37 | return null;
38 | }
39 |
--------------------------------------------------------------------------------
/lib/assistant/index.test.js:
--------------------------------------------------------------------------------
1 | import { jest } from '@jest/globals';
2 |
3 | jest.unstable_mockModule('../clients/openai-api.js', () => ({
4 | createChatCompletion: jest.fn(),
5 | }));
6 | const { createChatCompletion } = await import('../clients/openai-api.js');
7 | jest.unstable_mockModule('../utils/commit-message.js', () => ({
8 | sanitizeCommitMessage: jest.fn(),
9 | validateCommitMessage: jest.fn(),
10 | }));
11 | const { sanitizeCommitMessage, validateCommitMessage } = await import(
12 | '../utils/commit-message.js'
13 | );
14 | jest.unstable_mockModule('../utils/git.js', () => ({
15 | getGitDiffStaged: jest.fn(),
16 | }));
17 | const { getGitDiffStaged } = await import('../utils/git.js');
18 | jest.unstable_mockModule('./examples.js', () => ({
19 | getExamples: jest.fn(),
20 | }));
21 | const { getExamples } = await import('./examples.js');
22 |
23 | const { generateCommitMessage } = await import('./index.js');
24 |
25 | describe('generateCommitMessage', () => {
26 | it('returns the commit message', async () => {
27 | getExamples.mockResolvedValueOnce([
28 | { message: 'first commit', diff: 'first diff' },
29 | { message: 'second commit', diff: 'second diff' },
30 | ]);
31 | getGitDiffStaged.mockResolvedValueOnce('staged diff');
32 | createChatCompletion.mockResolvedValueOnce('some unsanitized message');
33 | sanitizeCommitMessage.mockReturnValueOnce('some message');
34 | validateCommitMessage.mockReturnValueOnce(true);
35 |
36 | const message = await generateCommitMessage();
37 |
38 | expect(createChatCompletion).toHaveBeenCalledWith([
39 | {
40 | role: 'system',
41 | content:
42 | 'You are an assistant that helps developers write commit messages. You will be provided with a git diff of the changes that are about to be committed. Write a commit message that describes the changes. Be extremely concise. Use imperative mood.',
43 | },
44 | { role: 'user', content: 'first diff' },
45 | { role: 'assistant', content: 'first commit' },
46 | { role: 'user', content: 'second diff' },
47 | { role: 'assistant', content: 'second commit' },
48 | { role: 'user', content: 'staged diff' },
49 | ]);
50 | expect(sanitizeCommitMessage).toHaveBeenCalledWith(
51 | 'some unsanitized message',
52 | );
53 | expect(validateCommitMessage).toHaveBeenCalledWith('some message');
54 | expect(message).toBe('some message');
55 | });
56 |
57 | it('returns null if the commit message is invalid after three attempts', async () => {
58 | getExamples.mockResolvedValueOnce([
59 | { message: 'first commit', diff: 'first diff' },
60 | { message: 'second commit', diff: 'second diff' },
61 | ]);
62 | getGitDiffStaged.mockResolvedValueOnce('staged diff');
63 | createChatCompletion.mockResolvedValue('some unsanitized message');
64 | sanitizeCommitMessage.mockReturnValue('some invalid message');
65 | validateCommitMessage.mockReturnValue(false);
66 |
67 | const message = await generateCommitMessage();
68 |
69 | expect(createChatCompletion).toHaveBeenCalledTimes(3);
70 | expect(sanitizeCommitMessage).toHaveBeenCalledTimes(3);
71 | expect(validateCommitMessage).toHaveBeenCalledTimes(3);
72 | expect(message).toBe(null);
73 | });
74 | });
75 |
--------------------------------------------------------------------------------
/lib/clients/openai-api.js:
--------------------------------------------------------------------------------
1 | import fetch from 'node-fetch';
2 |
3 | import { OPENAI_API_BASE_URL } from '../constants/index.js';
4 | import { getOpenAIAPIKey } from '../utils/openai-api-key.js';
5 |
6 | const model = 'gpt-3.5-turbo';
7 | const temperature = 0.5;
8 |
9 | async function makeRequest(
10 | endpoint,
11 | method = 'GET',
12 | body = null,
13 | apiKey = null,
14 | ) {
15 | apiKey = apiKey ?? (await getOpenAIAPIKey());
16 |
17 | const response = await fetch(`${OPENAI_API_BASE_URL}${endpoint}`, {
18 | method,
19 | headers: {
20 | 'Content-Type': 'application/json',
21 | Authorization: `Bearer ${apiKey}`,
22 | },
23 | ...(body && { body: JSON.stringify(body) }),
24 | });
25 |
26 | if (!response.ok) {
27 | throw new Error(`Request failed with status: ${response.status}`);
28 | }
29 |
30 | const data = await response.json();
31 | return data;
32 | }
33 |
34 | export async function validateAPIKey(apiKey) {
35 | try {
36 | await makeRequest('/v1/models', 'GET', null, apiKey);
37 | } catch {
38 | return false;
39 | }
40 |
41 | return true;
42 | }
43 |
44 | export async function createChatCompletion(messages) {
45 | const data = await makeRequest('/v1/chat/completions', 'POST', {
46 | model,
47 | messages,
48 | temperature,
49 | });
50 | return data.choices[0]?.message.content ?? null;
51 | }
52 |
--------------------------------------------------------------------------------
/lib/clients/openai-api.test.js:
--------------------------------------------------------------------------------
1 | import { jest } from '@jest/globals';
2 |
3 | jest.unstable_mockModule('node-fetch', () => ({
4 | __esModule: true,
5 | default: jest.fn(),
6 | }));
7 | const { default: fetch } = await import('node-fetch');
8 | jest.unstable_mockModule('../utils/openai-api-key', () => ({
9 | getOpenAIAPIKey: jest.fn(),
10 | }));
11 | const { getOpenAIAPIKey } = await import('../utils/openai-api-key');
12 |
13 | const { validateAPIKey, createChatCompletion } = await import(
14 | './openai-api.js'
15 | );
16 |
17 | describe('validateAPIKey', () => {
18 | it('returns true if the API key is valid', async () => {
19 | fetch.mockResolvedValueOnce({ ok: true, json: jest.fn() });
20 |
21 | const isValid = await validateAPIKey('foo');
22 |
23 | expect(getOpenAIAPIKey).not.toHaveBeenCalled();
24 | expect(fetch).toHaveBeenCalledWith('https://api.openai.com/v1/models', {
25 | method: 'GET',
26 | headers: {
27 | 'Content-Type': 'application/json',
28 | Authorization: 'Bearer foo',
29 | },
30 | });
31 | expect(isValid).toBe(true);
32 | });
33 |
34 | it('returns false if the API key is invalid', async () => {
35 | fetch.mockResolvedValueOnce({ ok: false, json: jest.fn() });
36 |
37 | const isValid = await validateAPIKey('foo');
38 |
39 | expect(getOpenAIAPIKey).not.toHaveBeenCalled();
40 | expect(fetch).toHaveBeenCalledWith('https://api.openai.com/v1/models', {
41 | method: 'GET',
42 | headers: {
43 | 'Content-Type': 'application/json',
44 | Authorization: 'Bearer foo',
45 | },
46 | });
47 | expect(isValid).toBe(false);
48 | });
49 | });
50 |
51 | describe('createChatCompletion', () => {
52 | it('returns the completion from the API', async () => {
53 | getOpenAIAPIKey.mockResolvedValueOnce('foo');
54 | fetch.mockResolvedValueOnce({
55 | ok: true,
56 | json: jest.fn().mockResolvedValueOnce({
57 | choices: [{ message: { content: 'some completion' } }],
58 | }),
59 | });
60 |
61 | const completion = await createChatCompletion(['some message']);
62 |
63 | expect(getOpenAIAPIKey).toHaveBeenCalled();
64 | expect(fetch).toHaveBeenCalledWith(
65 | 'https://api.openai.com/v1/chat/completions',
66 | {
67 | method: 'POST',
68 | headers: {
69 | 'Content-Type': 'application/json',
70 | Authorization: 'Bearer foo',
71 | },
72 | body: JSON.stringify({
73 | model: 'gpt-3.5-turbo',
74 | messages: ['some message'],
75 | temperature: 0.5,
76 | }),
77 | },
78 | );
79 | expect(completion).toBe('some completion');
80 | });
81 | });
82 |
--------------------------------------------------------------------------------
/lib/constants/index.js:
--------------------------------------------------------------------------------
1 | export const OPENAI_API_BASE_URL = 'https://api.openai.com';
2 |
--------------------------------------------------------------------------------
/lib/index.js:
--------------------------------------------------------------------------------
1 | import { generateCommitMessage } from './assistant/index.js';
2 | import { writeCommitMessage } from './utils/commit-message.js';
3 | import { withSpinner } from './utils/spinner.js';
4 |
5 | export async function prepareCommitMessage(filePath, source) {
6 | if (source !== '') {
7 | // A message has been provided, nothing to do.
8 | return;
9 | }
10 |
11 | const message = await withSpinner(
12 | generateCommitMessage(),
13 | 'Generating commit message',
14 | );
15 | if (message === null) {
16 | // The assistant failed to generate a message, nothing to do.
17 | return;
18 | }
19 |
20 | await writeCommitMessage(filePath, message);
21 | }
22 |
--------------------------------------------------------------------------------
/lib/index.test.js:
--------------------------------------------------------------------------------
1 | import { jest } from '@jest/globals';
2 |
3 | jest.unstable_mockModule('./assistant/index.js', () => ({
4 | generateCommitMessage: jest.fn(),
5 | }));
6 | const { generateCommitMessage } = await import('./assistant/index.js');
7 | jest.unstable_mockModule('./utils/commit-message.js', () => ({
8 | writeCommitMessage: jest.fn(),
9 | }));
10 | const { writeCommitMessage } = await import('./utils/commit-message.js');
11 | jest.unstable_mockModule('./utils/spinner.js', () => ({
12 | withSpinner: jest.fn(),
13 | }));
14 | const { withSpinner } = await import('./utils/spinner.js');
15 |
16 | const { prepareCommitMessage } = await import('./index.js');
17 |
18 | describe('prepareCommitMessage', () => {
19 | it('generates and writes the commit message', async () => {
20 | generateCommitMessage.mockResolvedValueOnce('some message');
21 | withSpinner.mockResolvedValueOnce('some message');
22 |
23 | await prepareCommitMessage('some file path', '');
24 |
25 | expect(generateCommitMessage).toHaveBeenCalled();
26 | expect(writeCommitMessage).toHaveBeenCalledWith(
27 | 'some file path',
28 | 'some message',
29 | );
30 | });
31 |
32 | it('does nothing if a commit message has been provided', async () => {
33 | await prepareCommitMessage('some file path', 'message');
34 |
35 | expect(generateCommitMessage).not.toHaveBeenCalled();
36 | expect(writeCommitMessage).not.toHaveBeenCalled();
37 | });
38 |
39 | it('does nothing if the assistant fails to generate a commit message', async () => {
40 | generateCommitMessage.mockResolvedValueOnce(null);
41 | withSpinner.mockResolvedValueOnce(null);
42 |
43 | await prepareCommitMessage('some file path', '');
44 |
45 | expect(generateCommitMessage).toHaveBeenCalled();
46 | expect(writeCommitMessage).not.toHaveBeenCalled();
47 | });
48 | });
49 |
--------------------------------------------------------------------------------
/lib/utils/commit-message.js:
--------------------------------------------------------------------------------
1 | import { readFile, writeFile } from 'node:fs/promises';
2 |
3 | export function sanitizeCommitMessage(message) {
4 | return (
5 | message
6 | // Remove period at the end.
7 | .replace(/\.$/, '')
8 | );
9 | }
10 |
11 | export function validateCommitMessage(message) {
12 | return message.length < 55;
13 | }
14 |
15 | export async function writeCommitMessage(filePath, message) {
16 | const template = await readFile(filePath, 'utf8');
17 | const messageWithTemplate = `${message}\n${template}`;
18 | return writeFile(filePath, messageWithTemplate);
19 | }
20 |
--------------------------------------------------------------------------------
/lib/utils/commit-message.test.js:
--------------------------------------------------------------------------------
1 | import { jest } from '@jest/globals';
2 |
3 | jest.unstable_mockModule('node:fs/promises', () => ({
4 | readFile: jest.fn(),
5 | writeFile: jest.fn(),
6 | }));
7 | const { readFile, writeFile } = await import('node:fs/promises');
8 |
9 | const { sanitizeCommitMessage, validateCommitMessage, writeCommitMessage } =
10 | await import('./commit-message.js');
11 |
12 | describe('sanitizeCommitMessage', () => {
13 | it('should remove a period from the end of the message', () => {
14 | const message = 'This is the way.';
15 | const sanitizedMessage = sanitizeCommitMessage(message);
16 | expect(sanitizedMessage).toBe('This is the way');
17 | });
18 |
19 | it('should return the same message if there is no period at the end', () => {
20 | const message = 'A long time ago in a galaxy far, far away';
21 | const sanitizedMessage = sanitizeCommitMessage(message);
22 | expect(sanitizedMessage).toBe(message);
23 | });
24 | });
25 |
26 | describe('validateCommitMessage', () => {
27 | it('should return true for messages shorter than 55 characters', () => {
28 | const message = 'Short message';
29 | expect(validateCommitMessage(message)).toBe(true);
30 | });
31 |
32 | it('should return false for messages that are 55 characters or longer', () => {
33 | const message = 'A'.repeat(55);
34 | expect(validateCommitMessage(message)).toBe(false);
35 | });
36 | });
37 |
38 | describe('writeCommitMessage', () => {
39 | it('should prepend the commit message to the file', async () => {
40 | const filePath = 'some file path';
41 | const message = 'some message';
42 | const template = 'some template';
43 | const messageWithTemplate = `${message}\n${template}`;
44 | readFile.mockResolvedValueOnce(template);
45 |
46 | await writeCommitMessage(filePath, message);
47 |
48 | expect(readFile).toHaveBeenCalledWith(filePath, 'utf8');
49 | expect(writeFile).toHaveBeenCalledWith(filePath, messageWithTemplate);
50 | });
51 | });
52 |
--------------------------------------------------------------------------------
/lib/utils/git.js:
--------------------------------------------------------------------------------
1 | import { execa } from 'execa';
2 |
3 | const contextLines = 5;
4 | const excludedFiles = ['package-lock.json', 'pnpm-lock.yaml', 'yarn.lock'];
5 |
6 | export async function getCommitMessage(reference) {
7 | try {
8 | const { stdout } = await execa('git', [
9 | 'log',
10 | '-1', // Get the latest commit.
11 | `--pretty=format:%s`, // Format to just the subject (commit message title).
12 | reference,
13 | ]);
14 | return stdout;
15 | } catch (err) {
16 | throw new Error(`Error fetching git commit message: ${err.message}`);
17 | }
18 | }
19 |
20 | export async function getGitDiff(reference) {
21 | try {
22 | const { stdout } = await execa('git', [
23 | 'diff',
24 | `${reference}^..${reference}`,
25 | `--unified=${contextLines}`,
26 | '--',
27 | '.',
28 | ...excludedFiles.map((file) => `:!${file}`),
29 | ]);
30 | return stdout;
31 | } catch (err) {
32 | throw new Error(`Error fetching git diff: ${err.message}`);
33 | }
34 | }
35 |
36 | export async function getGitDiffStaged() {
37 | try {
38 | const { stdout } = await execa('git', [
39 | 'diff',
40 | '--staged',
41 | `--unified=${contextLines}`,
42 | '--',
43 | '.',
44 | ...excludedFiles.map((file) => `:!${file}`),
45 | ]);
46 | return stdout;
47 | } catch (err) {
48 | throw new Error(`Error fetching git diff: ${err.message}`);
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/lib/utils/git.test.js:
--------------------------------------------------------------------------------
1 | import { jest } from '@jest/globals';
2 |
3 | jest.unstable_mockModule('execa', () => ({
4 | execa: jest.fn(),
5 | }));
6 | const { execa } = await import('execa');
7 |
8 | const { getCommitMessage, getGitDiff, getGitDiffStaged } = await import(
9 | './git.js'
10 | );
11 |
12 | describe('getCommitMessage', () => {
13 | it('should fetch the commit message successfully', async () => {
14 | const mockCommitMessage = 'some mocked commit message';
15 | execa.mockResolvedValueOnce({ stdout: mockCommitMessage });
16 |
17 | const result = await getCommitMessage('abcd123');
18 |
19 | expect(execa).toHaveBeenCalledWith('git', [
20 | 'log',
21 | '-1',
22 | '--pretty=format:%s',
23 | 'abcd123',
24 | ]);
25 | expect(result).toBe(mockCommitMessage);
26 | });
27 |
28 | it('should throw an error if fetching git commit fails', async () => {
29 | const mockError = new Error('mocked error');
30 | execa.mockRejectedValueOnce(mockError);
31 |
32 | await expect(getCommitMessage('abcd123')).rejects.toThrow(
33 | 'Error fetching git commit message: mocked error',
34 | );
35 | });
36 | });
37 |
38 | describe('getGitDiff', () => {
39 | it('should fetch the git diff successfully', async () => {
40 | const mockDiff = 'some mocked git diff output';
41 | execa.mockResolvedValueOnce({ stdout: mockDiff });
42 |
43 | const result = await getGitDiff('abcd123');
44 |
45 | expect(execa).toHaveBeenCalledWith('git', [
46 | 'diff',
47 | 'abcd123^..abcd123',
48 | `--unified=5`,
49 | '--',
50 | '.',
51 | ':!package-lock.json',
52 | ':!pnpm-lock.yaml',
53 | ':!yarn.lock',
54 | ]);
55 | expect(result).toBe(mockDiff);
56 | });
57 |
58 | it('should throw an error if fetching git diff fails', async () => {
59 | const mockError = new Error('mocked error');
60 | execa.mockRejectedValueOnce(mockError);
61 |
62 | await expect(getGitDiff('abcd123')).rejects.toThrow(
63 | 'Error fetching git diff: mocked error',
64 | );
65 | });
66 | });
67 |
68 | describe('getGitDiffStaged', () => {
69 | it('should fetch the git diff successfully', async () => {
70 | const mockDiff = 'some mocked git diff output';
71 | execa.mockResolvedValueOnce({ stdout: mockDiff });
72 |
73 | const result = await getGitDiffStaged();
74 |
75 | expect(execa).toHaveBeenCalledWith('git', [
76 | 'diff',
77 | '--staged',
78 | `--unified=5`,
79 | '--',
80 | '.',
81 | ':!package-lock.json',
82 | ':!pnpm-lock.yaml',
83 | ':!yarn.lock',
84 | ]);
85 | expect(result).toBe(mockDiff);
86 | });
87 |
88 | it('should throw an error if fetching git diff fails', async () => {
89 | const mockError = new Error('mocked error');
90 | execa.mockRejectedValueOnce(mockError);
91 |
92 | await expect(getGitDiffStaged()).rejects.toThrow(
93 | 'Error fetching git diff: mocked error',
94 | );
95 | });
96 | });
97 |
--------------------------------------------------------------------------------
/lib/utils/openai-api-key.js:
--------------------------------------------------------------------------------
1 | import { approve, fill, reject } from 'git-credential-node';
2 | import inquirer from 'inquirer';
3 |
4 | import { validateAPIKey } from '../clients/openai-api.js';
5 | import { OPENAI_API_BASE_URL } from '../constants/index.js';
6 |
7 | async function prompt() {
8 | const { apiKey } = await inquirer.prompt([
9 | {
10 | name: 'apiKey',
11 | message: 'Enter your OpenAI API key:',
12 | validate: async (input) => {
13 | if (input.length === 0) {
14 | return 'Required.';
15 | }
16 |
17 | if (!(await validateAPIKey(input))) {
18 | return 'Invalid API key.';
19 | }
20 |
21 | return true;
22 | },
23 | },
24 | ]);
25 | return apiKey;
26 | }
27 |
28 | export async function getOpenAIAPIKey() {
29 | const credential = await fill(OPENAI_API_BASE_URL);
30 | if (credential) {
31 | const apiKey = credential.password;
32 |
33 | const isValid = await validateAPIKey(apiKey);
34 | if (!isValid) {
35 | // An invalid API key was stored, reject it and ask for a new one.
36 | await reject(OPENAI_API_BASE_URL);
37 | return getOpenAIAPIKey();
38 | }
39 |
40 | return apiKey;
41 | }
42 |
43 | const apiKey = await prompt();
44 | if (!apiKey) {
45 | // The user has dismissed the prompt.
46 | return null;
47 | }
48 |
49 | // Store the API key.
50 | await approve({
51 | url: OPENAI_API_BASE_URL,
52 | username: 'waldo', // Not used.
53 | password: apiKey,
54 | });
55 |
56 | return apiKey;
57 | }
58 |
--------------------------------------------------------------------------------
/lib/utils/openai-api-key.test.js:
--------------------------------------------------------------------------------
1 | import { jest } from '@jest/globals';
2 |
3 | jest.unstable_mockModule('git-credential-node', () => ({
4 | approve: jest.fn(),
5 | fill: jest.fn(),
6 | reject: jest.fn(),
7 | }));
8 | const { approve, fill, reject } = await import('git-credential-node');
9 | jest.unstable_mockModule('inquirer', () => ({
10 | __esModule: true,
11 | default: {
12 | prompt: jest.fn(),
13 | },
14 | }));
15 | const { default: inquirer } = await import('inquirer');
16 | jest.unstable_mockModule('../clients/openai-api.js', () => ({
17 | validateAPIKey: jest.fn(),
18 | }));
19 | const { validateAPIKey } = await import('../clients/openai-api.js');
20 |
21 | const { getOpenAIAPIKey } = await import('./openai-api-key.js');
22 |
23 | describe('getOpenAIAPIKey', () => {
24 | it('returns the API key from the credential helper', async () => {
25 | fill.mockResolvedValueOnce({ password: 'foo' });
26 | validateAPIKey.mockResolvedValueOnce(true);
27 |
28 | const apiKey = await getOpenAIAPIKey();
29 |
30 | expect(fill).toHaveBeenCalledWith('https://api.openai.com');
31 | expect(validateAPIKey).toHaveBeenCalledWith('foo');
32 | expect(apiKey).toBe('foo');
33 | expect(inquirer.prompt).not.toHaveBeenCalled();
34 | expect(approve).not.toHaveBeenCalled();
35 | });
36 |
37 | it('rejects an invalid API key from the credential helper', async () => {
38 | fill
39 | .mockResolvedValueOnce({ password: 'invalid' })
40 | .mockResolvedValueOnce({ password: 'foo' });
41 | validateAPIKey.mockResolvedValueOnce(false).mockResolvedValueOnce(true);
42 |
43 | const apiKey = await getOpenAIAPIKey();
44 |
45 | expect(fill).toHaveBeenCalledWith('https://api.openai.com');
46 | expect(validateAPIKey).toHaveBeenNthCalledWith(1, 'invalid');
47 | expect(reject).toHaveBeenCalledWith('https://api.openai.com');
48 | expect(validateAPIKey).toHaveBeenNthCalledWith(2, 'foo');
49 | expect(apiKey).toBe('foo');
50 | });
51 |
52 | it('prompts the user for an API key if the credential helper does not have one', async () => {
53 | fill.mockResolvedValueOnce(null);
54 | inquirer.prompt.mockResolvedValueOnce({ apiKey: 'foo' });
55 |
56 | const apiKey = await getOpenAIAPIKey();
57 |
58 | expect(fill).toHaveBeenCalledWith('https://api.openai.com');
59 | expect(inquirer.prompt).toHaveBeenCalled();
60 | expect(approve).toHaveBeenCalledWith({
61 | url: 'https://api.openai.com',
62 | username: 'waldo',
63 | password: 'foo',
64 | });
65 | expect(apiKey).toBe('foo');
66 | });
67 |
68 | it('returns null if the user dismisses the prompt', async () => {
69 | fill.mockResolvedValueOnce(null);
70 | inquirer.prompt.mockResolvedValueOnce({ apiKey: undefined });
71 |
72 | const apiKey = await getOpenAIAPIKey();
73 |
74 | expect(fill).toHaveBeenCalledWith('https://api.openai.com');
75 | expect(inquirer.prompt).toHaveBeenCalled();
76 | expect(approve).not.toHaveBeenCalled();
77 | expect(apiKey).toBeNull();
78 | });
79 | });
80 |
--------------------------------------------------------------------------------
/lib/utils/spinner.js:
--------------------------------------------------------------------------------
1 | import ora from 'ora';
2 |
3 | export async function withSpinner(promise, message) {
4 | const spinner = ora(message).start();
5 | try {
6 | return await promise;
7 | } finally {
8 | spinner.stop();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/lib/utils/spinner.test.js:
--------------------------------------------------------------------------------
1 | import { jest } from '@jest/globals';
2 |
3 | const mockSpinner = {
4 | start: jest.fn(() => mockSpinner),
5 | stop: jest.fn(() => mockSpinner),
6 | };
7 | jest.unstable_mockModule('ora', () => ({
8 | __esModule: true,
9 | default: jest.fn(() => mockSpinner),
10 | }));
11 | const { default: ora } = await import('ora');
12 |
13 | const { withSpinner } = await import('./spinner.js');
14 |
15 | describe('withSpinner', () => {
16 | it('should start and stop the spinner', async () => {
17 | const mockPromise = Promise.resolve('some resolved value');
18 |
19 | const result = await withSpinner(mockPromise, 'some message');
20 |
21 | expect(ora).toHaveBeenCalledWith('some message');
22 | expect(mockSpinner.start).toHaveBeenCalled();
23 | expect(mockSpinner.stop).toHaveBeenCalled();
24 | expect(result).toBe('some resolved value');
25 | });
26 |
27 | it('should stop the spinner even if promise rejects', async () => {
28 | const mockError = new Error('mocked error');
29 | const mockPromise = Promise.reject(mockError);
30 |
31 | await expect(withSpinner(mockPromise, 'some message')).rejects.toThrow(
32 | 'mocked error',
33 | );
34 | expect(mockSpinner.stop).toHaveBeenCalled();
35 | });
36 | });
37 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "git-scribe",
3 | "version": "0.3.0",
4 | "description": "AI copilot for crafting insightful Git commit messages",
5 | "bin": {
6 | "git-scribe": "./bin/git-scribe.js"
7 | },
8 | "scripts": {
9 | "lint": "prettier --check '{*,**/*}.{js,json}' && eslint .",
10 | "lint:fix": "prettier --write '{*,**/*}.{js,json}' && eslint --fix .",
11 | "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
12 | "test:cov": "pnpm run test --coverage"
13 | },
14 | "keywords": [
15 | "ai",
16 | "copilot",
17 | "git",
18 | "commit",
19 | "hook"
20 | ],
21 | "author": "Matias Olivera ",
22 | "license": "MIT",
23 | "files": [
24 | "bin",
25 | "lib"
26 | ],
27 | "type": "module",
28 | "engines": {
29 | "node": ">=16"
30 | },
31 | "devDependencies": {
32 | "eslint": "^8.46.0",
33 | "eslint-config-prettier": "^9.0.0",
34 | "husky": "^8.0.3",
35 | "jest": "^29.6.2",
36 | "prettier": "3.0.1"
37 | },
38 | "dependencies": {
39 | "execa": "^7.2.0",
40 | "git-credential-node": "^1.1.0",
41 | "inquirer": "^9.2.10",
42 | "node-fetch": "^3.3.2",
43 | "ora": "^7.0.1"
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | execa:
9 | specifier: ^7.2.0
10 | version: 7.2.0
11 | git-credential-node:
12 | specifier: ^1.1.0
13 | version: 1.1.0
14 | inquirer:
15 | specifier: ^9.2.10
16 | version: 9.2.10
17 | node-fetch:
18 | specifier: ^3.3.2
19 | version: 3.3.2
20 | ora:
21 | specifier: ^7.0.1
22 | version: 7.0.1
23 |
24 | devDependencies:
25 | eslint:
26 | specifier: ^8.46.0
27 | version: 8.46.0
28 | eslint-config-prettier:
29 | specifier: ^9.0.0
30 | version: 9.0.0(eslint@8.46.0)
31 | husky:
32 | specifier: ^8.0.3
33 | version: 8.0.3
34 | jest:
35 | specifier: ^29.6.2
36 | version: 29.6.2
37 | prettier:
38 | specifier: 3.0.1
39 | version: 3.0.1
40 |
41 | packages:
42 |
43 | /@aashutoshrathi/word-wrap@1.2.6:
44 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
45 | engines: {node: '>=0.10.0'}
46 | dev: true
47 |
48 | /@ampproject/remapping@2.2.1:
49 | resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
50 | engines: {node: '>=6.0.0'}
51 | dependencies:
52 | '@jridgewell/gen-mapping': 0.3.3
53 | '@jridgewell/trace-mapping': 0.3.19
54 | dev: true
55 |
56 | /@babel/code-frame@7.22.10:
57 | resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==}
58 | engines: {node: '>=6.9.0'}
59 | dependencies:
60 | '@babel/highlight': 7.22.10
61 | chalk: 2.4.2
62 | dev: true
63 |
64 | /@babel/compat-data@7.22.9:
65 | resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==}
66 | engines: {node: '>=6.9.0'}
67 | dev: true
68 |
69 | /@babel/core@7.22.10:
70 | resolution: {integrity: sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==}
71 | engines: {node: '>=6.9.0'}
72 | dependencies:
73 | '@ampproject/remapping': 2.2.1
74 | '@babel/code-frame': 7.22.10
75 | '@babel/generator': 7.22.10
76 | '@babel/helper-compilation-targets': 7.22.10
77 | '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.10)
78 | '@babel/helpers': 7.22.10
79 | '@babel/parser': 7.22.10
80 | '@babel/template': 7.22.5
81 | '@babel/traverse': 7.22.10
82 | '@babel/types': 7.22.10
83 | convert-source-map: 1.9.0
84 | debug: 4.3.4
85 | gensync: 1.0.0-beta.2
86 | json5: 2.2.3
87 | semver: 6.3.1
88 | transitivePeerDependencies:
89 | - supports-color
90 | dev: true
91 |
92 | /@babel/generator@7.22.10:
93 | resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==}
94 | engines: {node: '>=6.9.0'}
95 | dependencies:
96 | '@babel/types': 7.22.10
97 | '@jridgewell/gen-mapping': 0.3.3
98 | '@jridgewell/trace-mapping': 0.3.19
99 | jsesc: 2.5.2
100 | dev: true
101 |
102 | /@babel/helper-compilation-targets@7.22.10:
103 | resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==}
104 | engines: {node: '>=6.9.0'}
105 | dependencies:
106 | '@babel/compat-data': 7.22.9
107 | '@babel/helper-validator-option': 7.22.5
108 | browserslist: 4.21.10
109 | lru-cache: 5.1.1
110 | semver: 6.3.1
111 | dev: true
112 |
113 | /@babel/helper-environment-visitor@7.22.5:
114 | resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==}
115 | engines: {node: '>=6.9.0'}
116 | dev: true
117 |
118 | /@babel/helper-function-name@7.22.5:
119 | resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==}
120 | engines: {node: '>=6.9.0'}
121 | dependencies:
122 | '@babel/template': 7.22.5
123 | '@babel/types': 7.22.10
124 | dev: true
125 |
126 | /@babel/helper-hoist-variables@7.22.5:
127 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
128 | engines: {node: '>=6.9.0'}
129 | dependencies:
130 | '@babel/types': 7.22.10
131 | dev: true
132 |
133 | /@babel/helper-module-imports@7.22.5:
134 | resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==}
135 | engines: {node: '>=6.9.0'}
136 | dependencies:
137 | '@babel/types': 7.22.10
138 | dev: true
139 |
140 | /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.10):
141 | resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==}
142 | engines: {node: '>=6.9.0'}
143 | peerDependencies:
144 | '@babel/core': ^7.0.0
145 | dependencies:
146 | '@babel/core': 7.22.10
147 | '@babel/helper-environment-visitor': 7.22.5
148 | '@babel/helper-module-imports': 7.22.5
149 | '@babel/helper-simple-access': 7.22.5
150 | '@babel/helper-split-export-declaration': 7.22.6
151 | '@babel/helper-validator-identifier': 7.22.5
152 | dev: true
153 |
154 | /@babel/helper-plugin-utils@7.22.5:
155 | resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
156 | engines: {node: '>=6.9.0'}
157 | dev: true
158 |
159 | /@babel/helper-simple-access@7.22.5:
160 | resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
161 | engines: {node: '>=6.9.0'}
162 | dependencies:
163 | '@babel/types': 7.22.10
164 | dev: true
165 |
166 | /@babel/helper-split-export-declaration@7.22.6:
167 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
168 | engines: {node: '>=6.9.0'}
169 | dependencies:
170 | '@babel/types': 7.22.10
171 | dev: true
172 |
173 | /@babel/helper-string-parser@7.22.5:
174 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
175 | engines: {node: '>=6.9.0'}
176 | dev: true
177 |
178 | /@babel/helper-validator-identifier@7.22.5:
179 | resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
180 | engines: {node: '>=6.9.0'}
181 | dev: true
182 |
183 | /@babel/helper-validator-option@7.22.5:
184 | resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==}
185 | engines: {node: '>=6.9.0'}
186 | dev: true
187 |
188 | /@babel/helpers@7.22.10:
189 | resolution: {integrity: sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==}
190 | engines: {node: '>=6.9.0'}
191 | dependencies:
192 | '@babel/template': 7.22.5
193 | '@babel/traverse': 7.22.10
194 | '@babel/types': 7.22.10
195 | transitivePeerDependencies:
196 | - supports-color
197 | dev: true
198 |
199 | /@babel/highlight@7.22.10:
200 | resolution: {integrity: sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==}
201 | engines: {node: '>=6.9.0'}
202 | dependencies:
203 | '@babel/helper-validator-identifier': 7.22.5
204 | chalk: 2.4.2
205 | js-tokens: 4.0.0
206 | dev: true
207 |
208 | /@babel/parser@7.22.10:
209 | resolution: {integrity: sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==}
210 | engines: {node: '>=6.0.0'}
211 | hasBin: true
212 | dependencies:
213 | '@babel/types': 7.22.10
214 | dev: true
215 |
216 | /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.10):
217 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
218 | peerDependencies:
219 | '@babel/core': ^7.0.0-0
220 | dependencies:
221 | '@babel/core': 7.22.10
222 | '@babel/helper-plugin-utils': 7.22.5
223 | dev: true
224 |
225 | /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.10):
226 | resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
227 | peerDependencies:
228 | '@babel/core': ^7.0.0-0
229 | dependencies:
230 | '@babel/core': 7.22.10
231 | '@babel/helper-plugin-utils': 7.22.5
232 | dev: true
233 |
234 | /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.10):
235 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
236 | peerDependencies:
237 | '@babel/core': ^7.0.0-0
238 | dependencies:
239 | '@babel/core': 7.22.10
240 | '@babel/helper-plugin-utils': 7.22.5
241 | dev: true
242 |
243 | /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.10):
244 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
245 | peerDependencies:
246 | '@babel/core': ^7.0.0-0
247 | dependencies:
248 | '@babel/core': 7.22.10
249 | '@babel/helper-plugin-utils': 7.22.5
250 | dev: true
251 |
252 | /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.10):
253 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
254 | peerDependencies:
255 | '@babel/core': ^7.0.0-0
256 | dependencies:
257 | '@babel/core': 7.22.10
258 | '@babel/helper-plugin-utils': 7.22.5
259 | dev: true
260 |
261 | /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.10):
262 | resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==}
263 | engines: {node: '>=6.9.0'}
264 | peerDependencies:
265 | '@babel/core': ^7.0.0-0
266 | dependencies:
267 | '@babel/core': 7.22.10
268 | '@babel/helper-plugin-utils': 7.22.5
269 | dev: true
270 |
271 | /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.10):
272 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
273 | peerDependencies:
274 | '@babel/core': ^7.0.0-0
275 | dependencies:
276 | '@babel/core': 7.22.10
277 | '@babel/helper-plugin-utils': 7.22.5
278 | dev: true
279 |
280 | /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.10):
281 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
282 | peerDependencies:
283 | '@babel/core': ^7.0.0-0
284 | dependencies:
285 | '@babel/core': 7.22.10
286 | '@babel/helper-plugin-utils': 7.22.5
287 | dev: true
288 |
289 | /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.10):
290 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
291 | peerDependencies:
292 | '@babel/core': ^7.0.0-0
293 | dependencies:
294 | '@babel/core': 7.22.10
295 | '@babel/helper-plugin-utils': 7.22.5
296 | dev: true
297 |
298 | /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.10):
299 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
300 | peerDependencies:
301 | '@babel/core': ^7.0.0-0
302 | dependencies:
303 | '@babel/core': 7.22.10
304 | '@babel/helper-plugin-utils': 7.22.5
305 | dev: true
306 |
307 | /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.10):
308 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
309 | peerDependencies:
310 | '@babel/core': ^7.0.0-0
311 | dependencies:
312 | '@babel/core': 7.22.10
313 | '@babel/helper-plugin-utils': 7.22.5
314 | dev: true
315 |
316 | /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.10):
317 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
318 | peerDependencies:
319 | '@babel/core': ^7.0.0-0
320 | dependencies:
321 | '@babel/core': 7.22.10
322 | '@babel/helper-plugin-utils': 7.22.5
323 | dev: true
324 |
325 | /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.10):
326 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
327 | engines: {node: '>=6.9.0'}
328 | peerDependencies:
329 | '@babel/core': ^7.0.0-0
330 | dependencies:
331 | '@babel/core': 7.22.10
332 | '@babel/helper-plugin-utils': 7.22.5
333 | dev: true
334 |
335 | /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.10):
336 | resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==}
337 | engines: {node: '>=6.9.0'}
338 | peerDependencies:
339 | '@babel/core': ^7.0.0-0
340 | dependencies:
341 | '@babel/core': 7.22.10
342 | '@babel/helper-plugin-utils': 7.22.5
343 | dev: true
344 |
345 | /@babel/template@7.22.5:
346 | resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==}
347 | engines: {node: '>=6.9.0'}
348 | dependencies:
349 | '@babel/code-frame': 7.22.10
350 | '@babel/parser': 7.22.10
351 | '@babel/types': 7.22.10
352 | dev: true
353 |
354 | /@babel/traverse@7.22.10:
355 | resolution: {integrity: sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==}
356 | engines: {node: '>=6.9.0'}
357 | dependencies:
358 | '@babel/code-frame': 7.22.10
359 | '@babel/generator': 7.22.10
360 | '@babel/helper-environment-visitor': 7.22.5
361 | '@babel/helper-function-name': 7.22.5
362 | '@babel/helper-hoist-variables': 7.22.5
363 | '@babel/helper-split-export-declaration': 7.22.6
364 | '@babel/parser': 7.22.10
365 | '@babel/types': 7.22.10
366 | debug: 4.3.4
367 | globals: 11.12.0
368 | transitivePeerDependencies:
369 | - supports-color
370 | dev: true
371 |
372 | /@babel/types@7.22.10:
373 | resolution: {integrity: sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==}
374 | engines: {node: '>=6.9.0'}
375 | dependencies:
376 | '@babel/helper-string-parser': 7.22.5
377 | '@babel/helper-validator-identifier': 7.22.5
378 | to-fast-properties: 2.0.0
379 | dev: true
380 |
381 | /@bcoe/v8-coverage@0.2.3:
382 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
383 | dev: true
384 |
385 | /@eslint-community/eslint-utils@4.4.0(eslint@8.46.0):
386 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
387 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
388 | peerDependencies:
389 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
390 | dependencies:
391 | eslint: 8.46.0
392 | eslint-visitor-keys: 3.4.2
393 | dev: true
394 |
395 | /@eslint-community/regexpp@4.6.2:
396 | resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==}
397 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
398 | dev: true
399 |
400 | /@eslint/eslintrc@2.1.1:
401 | resolution: {integrity: sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==}
402 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
403 | dependencies:
404 | ajv: 6.12.6
405 | debug: 4.3.4
406 | espree: 9.6.1
407 | globals: 13.20.0
408 | ignore: 5.2.4
409 | import-fresh: 3.3.0
410 | js-yaml: 4.1.0
411 | minimatch: 3.1.2
412 | strip-json-comments: 3.1.1
413 | transitivePeerDependencies:
414 | - supports-color
415 | dev: true
416 |
417 | /@eslint/js@8.46.0:
418 | resolution: {integrity: sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==}
419 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
420 | dev: true
421 |
422 | /@humanwhocodes/config-array@0.11.10:
423 | resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==}
424 | engines: {node: '>=10.10.0'}
425 | dependencies:
426 | '@humanwhocodes/object-schema': 1.2.1
427 | debug: 4.3.4
428 | minimatch: 3.1.2
429 | transitivePeerDependencies:
430 | - supports-color
431 | dev: true
432 |
433 | /@humanwhocodes/module-importer@1.0.1:
434 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
435 | engines: {node: '>=12.22'}
436 | dev: true
437 |
438 | /@humanwhocodes/object-schema@1.2.1:
439 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
440 | dev: true
441 |
442 | /@istanbuljs/load-nyc-config@1.1.0:
443 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
444 | engines: {node: '>=8'}
445 | dependencies:
446 | camelcase: 5.3.1
447 | find-up: 4.1.0
448 | get-package-type: 0.1.0
449 | js-yaml: 3.14.1
450 | resolve-from: 5.0.0
451 | dev: true
452 |
453 | /@istanbuljs/schema@0.1.3:
454 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
455 | engines: {node: '>=8'}
456 | dev: true
457 |
458 | /@jest/console@29.6.2:
459 | resolution: {integrity: sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==}
460 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
461 | dependencies:
462 | '@jest/types': 29.6.1
463 | '@types/node': 20.4.9
464 | chalk: 4.1.2
465 | jest-message-util: 29.6.2
466 | jest-util: 29.6.2
467 | slash: 3.0.0
468 | dev: true
469 |
470 | /@jest/core@29.6.2:
471 | resolution: {integrity: sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==}
472 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
473 | peerDependencies:
474 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
475 | peerDependenciesMeta:
476 | node-notifier:
477 | optional: true
478 | dependencies:
479 | '@jest/console': 29.6.2
480 | '@jest/reporters': 29.6.2
481 | '@jest/test-result': 29.6.2
482 | '@jest/transform': 29.6.2
483 | '@jest/types': 29.6.1
484 | '@types/node': 20.4.9
485 | ansi-escapes: 4.3.2
486 | chalk: 4.1.2
487 | ci-info: 3.8.0
488 | exit: 0.1.2
489 | graceful-fs: 4.2.11
490 | jest-changed-files: 29.5.0
491 | jest-config: 29.6.2(@types/node@20.4.9)
492 | jest-haste-map: 29.6.2
493 | jest-message-util: 29.6.2
494 | jest-regex-util: 29.4.3
495 | jest-resolve: 29.6.2
496 | jest-resolve-dependencies: 29.6.2
497 | jest-runner: 29.6.2
498 | jest-runtime: 29.6.2
499 | jest-snapshot: 29.6.2
500 | jest-util: 29.6.2
501 | jest-validate: 29.6.2
502 | jest-watcher: 29.6.2
503 | micromatch: 4.0.5
504 | pretty-format: 29.6.2
505 | slash: 3.0.0
506 | strip-ansi: 6.0.1
507 | transitivePeerDependencies:
508 | - babel-plugin-macros
509 | - supports-color
510 | - ts-node
511 | dev: true
512 |
513 | /@jest/environment@29.6.2:
514 | resolution: {integrity: sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==}
515 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
516 | dependencies:
517 | '@jest/fake-timers': 29.6.2
518 | '@jest/types': 29.6.1
519 | '@types/node': 20.4.9
520 | jest-mock: 29.6.2
521 | dev: true
522 |
523 | /@jest/expect-utils@29.6.2:
524 | resolution: {integrity: sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==}
525 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
526 | dependencies:
527 | jest-get-type: 29.4.3
528 | dev: true
529 |
530 | /@jest/expect@29.6.2:
531 | resolution: {integrity: sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==}
532 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
533 | dependencies:
534 | expect: 29.6.2
535 | jest-snapshot: 29.6.2
536 | transitivePeerDependencies:
537 | - supports-color
538 | dev: true
539 |
540 | /@jest/fake-timers@29.6.2:
541 | resolution: {integrity: sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==}
542 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
543 | dependencies:
544 | '@jest/types': 29.6.1
545 | '@sinonjs/fake-timers': 10.3.0
546 | '@types/node': 20.4.9
547 | jest-message-util: 29.6.2
548 | jest-mock: 29.6.2
549 | jest-util: 29.6.2
550 | dev: true
551 |
552 | /@jest/globals@29.6.2:
553 | resolution: {integrity: sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==}
554 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
555 | dependencies:
556 | '@jest/environment': 29.6.2
557 | '@jest/expect': 29.6.2
558 | '@jest/types': 29.6.1
559 | jest-mock: 29.6.2
560 | transitivePeerDependencies:
561 | - supports-color
562 | dev: true
563 |
564 | /@jest/reporters@29.6.2:
565 | resolution: {integrity: sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==}
566 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
567 | peerDependencies:
568 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
569 | peerDependenciesMeta:
570 | node-notifier:
571 | optional: true
572 | dependencies:
573 | '@bcoe/v8-coverage': 0.2.3
574 | '@jest/console': 29.6.2
575 | '@jest/test-result': 29.6.2
576 | '@jest/transform': 29.6.2
577 | '@jest/types': 29.6.1
578 | '@jridgewell/trace-mapping': 0.3.19
579 | '@types/node': 20.4.9
580 | chalk: 4.1.2
581 | collect-v8-coverage: 1.0.2
582 | exit: 0.1.2
583 | glob: 7.2.3
584 | graceful-fs: 4.2.11
585 | istanbul-lib-coverage: 3.2.0
586 | istanbul-lib-instrument: 5.2.1
587 | istanbul-lib-report: 3.0.1
588 | istanbul-lib-source-maps: 4.0.1
589 | istanbul-reports: 3.1.6
590 | jest-message-util: 29.6.2
591 | jest-util: 29.6.2
592 | jest-worker: 29.6.2
593 | slash: 3.0.0
594 | string-length: 4.0.2
595 | strip-ansi: 6.0.1
596 | v8-to-istanbul: 9.1.0
597 | transitivePeerDependencies:
598 | - supports-color
599 | dev: true
600 |
601 | /@jest/schemas@29.6.0:
602 | resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==}
603 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
604 | dependencies:
605 | '@sinclair/typebox': 0.27.8
606 | dev: true
607 |
608 | /@jest/source-map@29.6.0:
609 | resolution: {integrity: sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==}
610 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
611 | dependencies:
612 | '@jridgewell/trace-mapping': 0.3.19
613 | callsites: 3.1.0
614 | graceful-fs: 4.2.11
615 | dev: true
616 |
617 | /@jest/test-result@29.6.2:
618 | resolution: {integrity: sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==}
619 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
620 | dependencies:
621 | '@jest/console': 29.6.2
622 | '@jest/types': 29.6.1
623 | '@types/istanbul-lib-coverage': 2.0.4
624 | collect-v8-coverage: 1.0.2
625 | dev: true
626 |
627 | /@jest/test-sequencer@29.6.2:
628 | resolution: {integrity: sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==}
629 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
630 | dependencies:
631 | '@jest/test-result': 29.6.2
632 | graceful-fs: 4.2.11
633 | jest-haste-map: 29.6.2
634 | slash: 3.0.0
635 | dev: true
636 |
637 | /@jest/transform@29.6.2:
638 | resolution: {integrity: sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==}
639 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
640 | dependencies:
641 | '@babel/core': 7.22.10
642 | '@jest/types': 29.6.1
643 | '@jridgewell/trace-mapping': 0.3.19
644 | babel-plugin-istanbul: 6.1.1
645 | chalk: 4.1.2
646 | convert-source-map: 2.0.0
647 | fast-json-stable-stringify: 2.1.0
648 | graceful-fs: 4.2.11
649 | jest-haste-map: 29.6.2
650 | jest-regex-util: 29.4.3
651 | jest-util: 29.6.2
652 | micromatch: 4.0.5
653 | pirates: 4.0.6
654 | slash: 3.0.0
655 | write-file-atomic: 4.0.2
656 | transitivePeerDependencies:
657 | - supports-color
658 | dev: true
659 |
660 | /@jest/types@29.6.1:
661 | resolution: {integrity: sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==}
662 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
663 | dependencies:
664 | '@jest/schemas': 29.6.0
665 | '@types/istanbul-lib-coverage': 2.0.4
666 | '@types/istanbul-reports': 3.0.1
667 | '@types/node': 20.4.9
668 | '@types/yargs': 17.0.24
669 | chalk: 4.1.2
670 | dev: true
671 |
672 | /@jridgewell/gen-mapping@0.3.3:
673 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
674 | engines: {node: '>=6.0.0'}
675 | dependencies:
676 | '@jridgewell/set-array': 1.1.2
677 | '@jridgewell/sourcemap-codec': 1.4.15
678 | '@jridgewell/trace-mapping': 0.3.19
679 | dev: true
680 |
681 | /@jridgewell/resolve-uri@3.1.1:
682 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
683 | engines: {node: '>=6.0.0'}
684 | dev: true
685 |
686 | /@jridgewell/set-array@1.1.2:
687 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
688 | engines: {node: '>=6.0.0'}
689 | dev: true
690 |
691 | /@jridgewell/sourcemap-codec@1.4.15:
692 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
693 | dev: true
694 |
695 | /@jridgewell/trace-mapping@0.3.19:
696 | resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==}
697 | dependencies:
698 | '@jridgewell/resolve-uri': 3.1.1
699 | '@jridgewell/sourcemap-codec': 1.4.15
700 | dev: true
701 |
702 | /@ljharb/through@2.3.9:
703 | resolution: {integrity: sha512-yN599ZBuMPPK4tdoToLlvgJB4CLK8fGl7ntfy0Wn7U6ttNvHYurd81bfUiK/6sMkiIwm65R6ck4L6+Y3DfVbNQ==}
704 | engines: {node: '>= 0.4'}
705 | dev: false
706 |
707 | /@nodelib/fs.scandir@2.1.5:
708 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
709 | engines: {node: '>= 8'}
710 | dependencies:
711 | '@nodelib/fs.stat': 2.0.5
712 | run-parallel: 1.2.0
713 | dev: true
714 |
715 | /@nodelib/fs.stat@2.0.5:
716 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
717 | engines: {node: '>= 8'}
718 | dev: true
719 |
720 | /@nodelib/fs.walk@1.2.8:
721 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
722 | engines: {node: '>= 8'}
723 | dependencies:
724 | '@nodelib/fs.scandir': 2.1.5
725 | fastq: 1.15.0
726 | dev: true
727 |
728 | /@sinclair/typebox@0.27.8:
729 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
730 | dev: true
731 |
732 | /@sinonjs/commons@3.0.0:
733 | resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==}
734 | dependencies:
735 | type-detect: 4.0.8
736 | dev: true
737 |
738 | /@sinonjs/fake-timers@10.3.0:
739 | resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
740 | dependencies:
741 | '@sinonjs/commons': 3.0.0
742 | dev: true
743 |
744 | /@types/babel__core@7.20.1:
745 | resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==}
746 | dependencies:
747 | '@babel/parser': 7.22.10
748 | '@babel/types': 7.22.10
749 | '@types/babel__generator': 7.6.4
750 | '@types/babel__template': 7.4.1
751 | '@types/babel__traverse': 7.20.1
752 | dev: true
753 |
754 | /@types/babel__generator@7.6.4:
755 | resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
756 | dependencies:
757 | '@babel/types': 7.22.10
758 | dev: true
759 |
760 | /@types/babel__template@7.4.1:
761 | resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
762 | dependencies:
763 | '@babel/parser': 7.22.10
764 | '@babel/types': 7.22.10
765 | dev: true
766 |
767 | /@types/babel__traverse@7.20.1:
768 | resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==}
769 | dependencies:
770 | '@babel/types': 7.22.10
771 | dev: true
772 |
773 | /@types/graceful-fs@4.1.6:
774 | resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==}
775 | dependencies:
776 | '@types/node': 20.4.9
777 | dev: true
778 |
779 | /@types/istanbul-lib-coverage@2.0.4:
780 | resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
781 | dev: true
782 |
783 | /@types/istanbul-lib-report@3.0.0:
784 | resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==}
785 | dependencies:
786 | '@types/istanbul-lib-coverage': 2.0.4
787 | dev: true
788 |
789 | /@types/istanbul-reports@3.0.1:
790 | resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==}
791 | dependencies:
792 | '@types/istanbul-lib-report': 3.0.0
793 | dev: true
794 |
795 | /@types/node@20.4.9:
796 | resolution: {integrity: sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ==}
797 | dev: true
798 |
799 | /@types/stack-utils@2.0.1:
800 | resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==}
801 | dev: true
802 |
803 | /@types/yargs-parser@21.0.0:
804 | resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==}
805 | dev: true
806 |
807 | /@types/yargs@17.0.24:
808 | resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==}
809 | dependencies:
810 | '@types/yargs-parser': 21.0.0
811 | dev: true
812 |
813 | /acorn-jsx@5.3.2(acorn@8.10.0):
814 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
815 | peerDependencies:
816 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
817 | dependencies:
818 | acorn: 8.10.0
819 | dev: true
820 |
821 | /acorn@8.10.0:
822 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
823 | engines: {node: '>=0.4.0'}
824 | hasBin: true
825 | dev: true
826 |
827 | /ajv@6.12.6:
828 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
829 | dependencies:
830 | fast-deep-equal: 3.1.3
831 | fast-json-stable-stringify: 2.1.0
832 | json-schema-traverse: 0.4.1
833 | uri-js: 4.4.1
834 | dev: true
835 |
836 | /ansi-escapes@4.3.2:
837 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
838 | engines: {node: '>=8'}
839 | dependencies:
840 | type-fest: 0.21.3
841 |
842 | /ansi-regex@5.0.1:
843 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
844 | engines: {node: '>=8'}
845 |
846 | /ansi-regex@6.0.1:
847 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
848 | engines: {node: '>=12'}
849 | dev: false
850 |
851 | /ansi-styles@3.2.1:
852 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
853 | engines: {node: '>=4'}
854 | dependencies:
855 | color-convert: 1.9.3
856 | dev: true
857 |
858 | /ansi-styles@4.3.0:
859 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
860 | engines: {node: '>=8'}
861 | dependencies:
862 | color-convert: 2.0.1
863 |
864 | /ansi-styles@5.2.0:
865 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
866 | engines: {node: '>=10'}
867 | dev: true
868 |
869 | /anymatch@3.1.3:
870 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
871 | engines: {node: '>= 8'}
872 | dependencies:
873 | normalize-path: 3.0.0
874 | picomatch: 2.3.1
875 | dev: true
876 |
877 | /argparse@1.0.10:
878 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
879 | dependencies:
880 | sprintf-js: 1.0.3
881 | dev: true
882 |
883 | /argparse@2.0.1:
884 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
885 | dev: true
886 |
887 | /babel-jest@29.6.2(@babel/core@7.22.10):
888 | resolution: {integrity: sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==}
889 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
890 | peerDependencies:
891 | '@babel/core': ^7.8.0
892 | dependencies:
893 | '@babel/core': 7.22.10
894 | '@jest/transform': 29.6.2
895 | '@types/babel__core': 7.20.1
896 | babel-plugin-istanbul: 6.1.1
897 | babel-preset-jest: 29.5.0(@babel/core@7.22.10)
898 | chalk: 4.1.2
899 | graceful-fs: 4.2.11
900 | slash: 3.0.0
901 | transitivePeerDependencies:
902 | - supports-color
903 | dev: true
904 |
905 | /babel-plugin-istanbul@6.1.1:
906 | resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
907 | engines: {node: '>=8'}
908 | dependencies:
909 | '@babel/helper-plugin-utils': 7.22.5
910 | '@istanbuljs/load-nyc-config': 1.1.0
911 | '@istanbuljs/schema': 0.1.3
912 | istanbul-lib-instrument: 5.2.1
913 | test-exclude: 6.0.0
914 | transitivePeerDependencies:
915 | - supports-color
916 | dev: true
917 |
918 | /babel-plugin-jest-hoist@29.5.0:
919 | resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==}
920 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
921 | dependencies:
922 | '@babel/template': 7.22.5
923 | '@babel/types': 7.22.10
924 | '@types/babel__core': 7.20.1
925 | '@types/babel__traverse': 7.20.1
926 | dev: true
927 |
928 | /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.10):
929 | resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
930 | peerDependencies:
931 | '@babel/core': ^7.0.0
932 | dependencies:
933 | '@babel/core': 7.22.10
934 | '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.10)
935 | '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.10)
936 | '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.10)
937 | '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.10)
938 | '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.10)
939 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.10)
940 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.10)
941 | '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.10)
942 | '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.10)
943 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.10)
944 | '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.10)
945 | '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.10)
946 | dev: true
947 |
948 | /babel-preset-jest@29.5.0(@babel/core@7.22.10):
949 | resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==}
950 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
951 | peerDependencies:
952 | '@babel/core': ^7.0.0
953 | dependencies:
954 | '@babel/core': 7.22.10
955 | babel-plugin-jest-hoist: 29.5.0
956 | babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.10)
957 | dev: true
958 |
959 | /balanced-match@1.0.2:
960 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
961 | dev: true
962 |
963 | /base64-js@1.5.1:
964 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
965 | dev: false
966 |
967 | /bl@4.1.0:
968 | resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
969 | dependencies:
970 | buffer: 5.7.1
971 | inherits: 2.0.4
972 | readable-stream: 3.6.2
973 | dev: false
974 |
975 | /bl@5.1.0:
976 | resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
977 | dependencies:
978 | buffer: 6.0.3
979 | inherits: 2.0.4
980 | readable-stream: 3.6.2
981 | dev: false
982 |
983 | /brace-expansion@1.1.11:
984 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
985 | dependencies:
986 | balanced-match: 1.0.2
987 | concat-map: 0.0.1
988 | dev: true
989 |
990 | /braces@3.0.2:
991 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
992 | engines: {node: '>=8'}
993 | dependencies:
994 | fill-range: 7.0.1
995 | dev: true
996 |
997 | /browserslist@4.21.10:
998 | resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==}
999 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
1000 | hasBin: true
1001 | dependencies:
1002 | caniuse-lite: 1.0.30001519
1003 | electron-to-chromium: 1.4.490
1004 | node-releases: 2.0.13
1005 | update-browserslist-db: 1.0.11(browserslist@4.21.10)
1006 | dev: true
1007 |
1008 | /bser@2.1.1:
1009 | resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
1010 | dependencies:
1011 | node-int64: 0.4.0
1012 | dev: true
1013 |
1014 | /buffer-from@1.1.2:
1015 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
1016 | dev: true
1017 |
1018 | /buffer@5.7.1:
1019 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
1020 | dependencies:
1021 | base64-js: 1.5.1
1022 | ieee754: 1.2.1
1023 | dev: false
1024 |
1025 | /buffer@6.0.3:
1026 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
1027 | dependencies:
1028 | base64-js: 1.5.1
1029 | ieee754: 1.2.1
1030 | dev: false
1031 |
1032 | /callsites@3.1.0:
1033 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
1034 | engines: {node: '>=6'}
1035 | dev: true
1036 |
1037 | /camelcase@5.3.1:
1038 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
1039 | engines: {node: '>=6'}
1040 | dev: true
1041 |
1042 | /camelcase@6.3.0:
1043 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
1044 | engines: {node: '>=10'}
1045 | dev: true
1046 |
1047 | /caniuse-lite@1.0.30001519:
1048 | resolution: {integrity: sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==}
1049 | dev: true
1050 |
1051 | /chalk@2.4.2:
1052 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
1053 | engines: {node: '>=4'}
1054 | dependencies:
1055 | ansi-styles: 3.2.1
1056 | escape-string-regexp: 1.0.5
1057 | supports-color: 5.5.0
1058 | dev: true
1059 |
1060 | /chalk@4.1.2:
1061 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
1062 | engines: {node: '>=10'}
1063 | dependencies:
1064 | ansi-styles: 4.3.0
1065 | supports-color: 7.2.0
1066 |
1067 | /chalk@5.3.0:
1068 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
1069 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
1070 | dev: false
1071 |
1072 | /char-regex@1.0.2:
1073 | resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
1074 | engines: {node: '>=10'}
1075 | dev: true
1076 |
1077 | /chardet@0.7.0:
1078 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
1079 | dev: false
1080 |
1081 | /ci-info@3.8.0:
1082 | resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==}
1083 | engines: {node: '>=8'}
1084 | dev: true
1085 |
1086 | /cjs-module-lexer@1.2.3:
1087 | resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==}
1088 | dev: true
1089 |
1090 | /cli-cursor@3.1.0:
1091 | resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
1092 | engines: {node: '>=8'}
1093 | dependencies:
1094 | restore-cursor: 3.1.0
1095 | dev: false
1096 |
1097 | /cli-cursor@4.0.0:
1098 | resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
1099 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1100 | dependencies:
1101 | restore-cursor: 4.0.0
1102 | dev: false
1103 |
1104 | /cli-spinners@2.9.0:
1105 | resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==}
1106 | engines: {node: '>=6'}
1107 | dev: false
1108 |
1109 | /cli-width@4.1.0:
1110 | resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
1111 | engines: {node: '>= 12'}
1112 | dev: false
1113 |
1114 | /cliui@8.0.1:
1115 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
1116 | engines: {node: '>=12'}
1117 | dependencies:
1118 | string-width: 4.2.3
1119 | strip-ansi: 6.0.1
1120 | wrap-ansi: 7.0.0
1121 | dev: true
1122 |
1123 | /clone@1.0.4:
1124 | resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
1125 | engines: {node: '>=0.8'}
1126 | dev: false
1127 |
1128 | /co@4.6.0:
1129 | resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
1130 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
1131 | dev: true
1132 |
1133 | /collect-v8-coverage@1.0.2:
1134 | resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
1135 | dev: true
1136 |
1137 | /color-convert@1.9.3:
1138 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
1139 | dependencies:
1140 | color-name: 1.1.3
1141 | dev: true
1142 |
1143 | /color-convert@2.0.1:
1144 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1145 | engines: {node: '>=7.0.0'}
1146 | dependencies:
1147 | color-name: 1.1.4
1148 |
1149 | /color-name@1.1.3:
1150 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
1151 | dev: true
1152 |
1153 | /color-name@1.1.4:
1154 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1155 |
1156 | /concat-map@0.0.1:
1157 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
1158 | dev: true
1159 |
1160 | /convert-source-map@1.9.0:
1161 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
1162 | dev: true
1163 |
1164 | /convert-source-map@2.0.0:
1165 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
1166 | dev: true
1167 |
1168 | /cross-spawn@5.1.0:
1169 | resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
1170 | dependencies:
1171 | lru-cache: 4.1.5
1172 | shebang-command: 1.2.0
1173 | which: 1.3.1
1174 | dev: false
1175 |
1176 | /cross-spawn@7.0.3:
1177 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
1178 | engines: {node: '>= 8'}
1179 | dependencies:
1180 | path-key: 3.1.1
1181 | shebang-command: 2.0.0
1182 | which: 2.0.2
1183 |
1184 | /data-uri-to-buffer@4.0.1:
1185 | resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
1186 | engines: {node: '>= 12'}
1187 | dev: false
1188 |
1189 | /debug@4.3.4:
1190 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
1191 | engines: {node: '>=6.0'}
1192 | peerDependencies:
1193 | supports-color: '*'
1194 | peerDependenciesMeta:
1195 | supports-color:
1196 | optional: true
1197 | dependencies:
1198 | ms: 2.1.2
1199 | dev: true
1200 |
1201 | /dedent@1.5.1:
1202 | resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==}
1203 | peerDependencies:
1204 | babel-plugin-macros: ^3.1.0
1205 | peerDependenciesMeta:
1206 | babel-plugin-macros:
1207 | optional: true
1208 | dev: true
1209 |
1210 | /deep-is@0.1.4:
1211 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
1212 | dev: true
1213 |
1214 | /deepmerge@4.3.1:
1215 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
1216 | engines: {node: '>=0.10.0'}
1217 | dev: true
1218 |
1219 | /defaults@1.0.4:
1220 | resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
1221 | dependencies:
1222 | clone: 1.0.4
1223 | dev: false
1224 |
1225 | /detect-newline@3.1.0:
1226 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
1227 | engines: {node: '>=8'}
1228 | dev: true
1229 |
1230 | /diff-sequences@29.4.3:
1231 | resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==}
1232 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1233 | dev: true
1234 |
1235 | /doctrine@3.0.0:
1236 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
1237 | engines: {node: '>=6.0.0'}
1238 | dependencies:
1239 | esutils: 2.0.3
1240 | dev: true
1241 |
1242 | /eastasianwidth@0.2.0:
1243 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
1244 | dev: false
1245 |
1246 | /electron-to-chromium@1.4.490:
1247 | resolution: {integrity: sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==}
1248 | dev: true
1249 |
1250 | /emittery@0.13.1:
1251 | resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
1252 | engines: {node: '>=12'}
1253 | dev: true
1254 |
1255 | /emoji-regex@10.2.1:
1256 | resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==}
1257 | dev: false
1258 |
1259 | /emoji-regex@8.0.0:
1260 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1261 |
1262 | /error-ex@1.3.2:
1263 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
1264 | dependencies:
1265 | is-arrayish: 0.2.1
1266 | dev: true
1267 |
1268 | /escalade@3.1.1:
1269 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
1270 | engines: {node: '>=6'}
1271 | dev: true
1272 |
1273 | /escape-string-regexp@1.0.5:
1274 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
1275 | engines: {node: '>=0.8.0'}
1276 | dev: true
1277 |
1278 | /escape-string-regexp@2.0.0:
1279 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
1280 | engines: {node: '>=8'}
1281 | dev: true
1282 |
1283 | /escape-string-regexp@4.0.0:
1284 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1285 | engines: {node: '>=10'}
1286 | dev: true
1287 |
1288 | /escape-string-regexp@5.0.0:
1289 | resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
1290 | engines: {node: '>=12'}
1291 | dev: false
1292 |
1293 | /eslint-config-prettier@9.0.0(eslint@8.46.0):
1294 | resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==}
1295 | hasBin: true
1296 | peerDependencies:
1297 | eslint: '>=7.0.0'
1298 | dependencies:
1299 | eslint: 8.46.0
1300 | dev: true
1301 |
1302 | /eslint-scope@7.2.2:
1303 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
1304 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1305 | dependencies:
1306 | esrecurse: 4.3.0
1307 | estraverse: 5.3.0
1308 | dev: true
1309 |
1310 | /eslint-visitor-keys@3.4.2:
1311 | resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==}
1312 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1313 | dev: true
1314 |
1315 | /eslint@8.46.0:
1316 | resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==}
1317 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1318 | hasBin: true
1319 | dependencies:
1320 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0)
1321 | '@eslint-community/regexpp': 4.6.2
1322 | '@eslint/eslintrc': 2.1.1
1323 | '@eslint/js': 8.46.0
1324 | '@humanwhocodes/config-array': 0.11.10
1325 | '@humanwhocodes/module-importer': 1.0.1
1326 | '@nodelib/fs.walk': 1.2.8
1327 | ajv: 6.12.6
1328 | chalk: 4.1.2
1329 | cross-spawn: 7.0.3
1330 | debug: 4.3.4
1331 | doctrine: 3.0.0
1332 | escape-string-regexp: 4.0.0
1333 | eslint-scope: 7.2.2
1334 | eslint-visitor-keys: 3.4.2
1335 | espree: 9.6.1
1336 | esquery: 1.5.0
1337 | esutils: 2.0.3
1338 | fast-deep-equal: 3.1.3
1339 | file-entry-cache: 6.0.1
1340 | find-up: 5.0.0
1341 | glob-parent: 6.0.2
1342 | globals: 13.20.0
1343 | graphemer: 1.4.0
1344 | ignore: 5.2.4
1345 | imurmurhash: 0.1.4
1346 | is-glob: 4.0.3
1347 | is-path-inside: 3.0.3
1348 | js-yaml: 4.1.0
1349 | json-stable-stringify-without-jsonify: 1.0.1
1350 | levn: 0.4.1
1351 | lodash.merge: 4.6.2
1352 | minimatch: 3.1.2
1353 | natural-compare: 1.4.0
1354 | optionator: 0.9.3
1355 | strip-ansi: 6.0.1
1356 | text-table: 0.2.0
1357 | transitivePeerDependencies:
1358 | - supports-color
1359 | dev: true
1360 |
1361 | /espree@9.6.1:
1362 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
1363 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1364 | dependencies:
1365 | acorn: 8.10.0
1366 | acorn-jsx: 5.3.2(acorn@8.10.0)
1367 | eslint-visitor-keys: 3.4.2
1368 | dev: true
1369 |
1370 | /esprima@4.0.1:
1371 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
1372 | engines: {node: '>=4'}
1373 | hasBin: true
1374 | dev: true
1375 |
1376 | /esquery@1.5.0:
1377 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
1378 | engines: {node: '>=0.10'}
1379 | dependencies:
1380 | estraverse: 5.3.0
1381 | dev: true
1382 |
1383 | /esrecurse@4.3.0:
1384 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1385 | engines: {node: '>=4.0'}
1386 | dependencies:
1387 | estraverse: 5.3.0
1388 | dev: true
1389 |
1390 | /estraverse@5.3.0:
1391 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1392 | engines: {node: '>=4.0'}
1393 | dev: true
1394 |
1395 | /esutils@2.0.3:
1396 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1397 | engines: {node: '>=0.10.0'}
1398 | dev: true
1399 |
1400 | /execa@0.6.3:
1401 | resolution: {integrity: sha512-/teX3MDLFBdYUhRk8WCBYboIMUmqeizu0m9Z3YF3JWrbEh/SlZg00vLJSaAGWw3wrZ9tE0buNw79eaAPYhUuvg==}
1402 | engines: {node: '>=4'}
1403 | dependencies:
1404 | cross-spawn: 5.1.0
1405 | get-stream: 3.0.0
1406 | is-stream: 1.1.0
1407 | npm-run-path: 2.0.2
1408 | p-finally: 1.0.0
1409 | signal-exit: 3.0.7
1410 | strip-eof: 1.0.0
1411 | dev: false
1412 |
1413 | /execa@5.1.1:
1414 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
1415 | engines: {node: '>=10'}
1416 | dependencies:
1417 | cross-spawn: 7.0.3
1418 | get-stream: 6.0.1
1419 | human-signals: 2.1.0
1420 | is-stream: 2.0.1
1421 | merge-stream: 2.0.0
1422 | npm-run-path: 4.0.1
1423 | onetime: 5.1.2
1424 | signal-exit: 3.0.7
1425 | strip-final-newline: 2.0.0
1426 | dev: true
1427 |
1428 | /execa@7.2.0:
1429 | resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
1430 | engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
1431 | dependencies:
1432 | cross-spawn: 7.0.3
1433 | get-stream: 6.0.1
1434 | human-signals: 4.3.1
1435 | is-stream: 3.0.0
1436 | merge-stream: 2.0.0
1437 | npm-run-path: 5.1.0
1438 | onetime: 6.0.0
1439 | signal-exit: 3.0.7
1440 | strip-final-newline: 3.0.0
1441 | dev: false
1442 |
1443 | /exit@0.1.2:
1444 | resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
1445 | engines: {node: '>= 0.8.0'}
1446 | dev: true
1447 |
1448 | /expect@29.6.2:
1449 | resolution: {integrity: sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==}
1450 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1451 | dependencies:
1452 | '@jest/expect-utils': 29.6.2
1453 | '@types/node': 20.4.9
1454 | jest-get-type: 29.4.3
1455 | jest-matcher-utils: 29.6.2
1456 | jest-message-util: 29.6.2
1457 | jest-util: 29.6.2
1458 | dev: true
1459 |
1460 | /external-editor@3.1.0:
1461 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
1462 | engines: {node: '>=4'}
1463 | dependencies:
1464 | chardet: 0.7.0
1465 | iconv-lite: 0.4.24
1466 | tmp: 0.0.33
1467 | dev: false
1468 |
1469 | /fast-deep-equal@3.1.3:
1470 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1471 | dev: true
1472 |
1473 | /fast-json-stable-stringify@2.1.0:
1474 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1475 | dev: true
1476 |
1477 | /fast-levenshtein@2.0.6:
1478 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1479 | dev: true
1480 |
1481 | /fastq@1.15.0:
1482 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
1483 | dependencies:
1484 | reusify: 1.0.4
1485 | dev: true
1486 |
1487 | /fb-watchman@2.0.2:
1488 | resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
1489 | dependencies:
1490 | bser: 2.1.1
1491 | dev: true
1492 |
1493 | /fetch-blob@3.2.0:
1494 | resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
1495 | engines: {node: ^12.20 || >= 14.13}
1496 | dependencies:
1497 | node-domexception: 1.0.0
1498 | web-streams-polyfill: 3.2.1
1499 | dev: false
1500 |
1501 | /figures@5.0.0:
1502 | resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==}
1503 | engines: {node: '>=14'}
1504 | dependencies:
1505 | escape-string-regexp: 5.0.0
1506 | is-unicode-supported: 1.3.0
1507 | dev: false
1508 |
1509 | /file-entry-cache@6.0.1:
1510 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
1511 | engines: {node: ^10.12.0 || >=12.0.0}
1512 | dependencies:
1513 | flat-cache: 3.0.4
1514 | dev: true
1515 |
1516 | /fill-range@7.0.1:
1517 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1518 | engines: {node: '>=8'}
1519 | dependencies:
1520 | to-regex-range: 5.0.1
1521 | dev: true
1522 |
1523 | /find-up@4.1.0:
1524 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
1525 | engines: {node: '>=8'}
1526 | dependencies:
1527 | locate-path: 5.0.0
1528 | path-exists: 4.0.0
1529 | dev: true
1530 |
1531 | /find-up@5.0.0:
1532 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1533 | engines: {node: '>=10'}
1534 | dependencies:
1535 | locate-path: 6.0.0
1536 | path-exists: 4.0.0
1537 | dev: true
1538 |
1539 | /flat-cache@3.0.4:
1540 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
1541 | engines: {node: ^10.12.0 || >=12.0.0}
1542 | dependencies:
1543 | flatted: 3.2.7
1544 | rimraf: 3.0.2
1545 | dev: true
1546 |
1547 | /flatted@3.2.7:
1548 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
1549 | dev: true
1550 |
1551 | /formdata-polyfill@4.0.10:
1552 | resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
1553 | engines: {node: '>=12.20.0'}
1554 | dependencies:
1555 | fetch-blob: 3.2.0
1556 | dev: false
1557 |
1558 | /fs.realpath@1.0.0:
1559 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1560 | dev: true
1561 |
1562 | /fsevents@2.3.2:
1563 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1564 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1565 | os: [darwin]
1566 | requiresBuild: true
1567 | dev: true
1568 | optional: true
1569 |
1570 | /function-bind@1.1.1:
1571 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1572 | dev: true
1573 |
1574 | /gensync@1.0.0-beta.2:
1575 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
1576 | engines: {node: '>=6.9.0'}
1577 | dev: true
1578 |
1579 | /get-caller-file@2.0.5:
1580 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
1581 | engines: {node: 6.* || 8.* || >= 10.*}
1582 | dev: true
1583 |
1584 | /get-package-type@0.1.0:
1585 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
1586 | engines: {node: '>=8.0.0'}
1587 | dev: true
1588 |
1589 | /get-stream@3.0.0:
1590 | resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==}
1591 | engines: {node: '>=4'}
1592 | dev: false
1593 |
1594 | /get-stream@6.0.1:
1595 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
1596 | engines: {node: '>=10'}
1597 |
1598 | /git-credential-node@1.1.0:
1599 | resolution: {integrity: sha512-BcEwQz8djoeSFpcsbWxGRQmN5n2gA6890PBdM7LnapcsEoEpje3DBBTqwtFrJpmSQZvWwOQ9zytyXmrKSawB9A==}
1600 | engines: {node: '>=6'}
1601 | dependencies:
1602 | execa: 0.6.3
1603 | dev: false
1604 |
1605 | /glob-parent@6.0.2:
1606 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1607 | engines: {node: '>=10.13.0'}
1608 | dependencies:
1609 | is-glob: 4.0.3
1610 | dev: true
1611 |
1612 | /glob@7.2.3:
1613 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1614 | dependencies:
1615 | fs.realpath: 1.0.0
1616 | inflight: 1.0.6
1617 | inherits: 2.0.4
1618 | minimatch: 3.1.2
1619 | once: 1.4.0
1620 | path-is-absolute: 1.0.1
1621 | dev: true
1622 |
1623 | /globals@11.12.0:
1624 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
1625 | engines: {node: '>=4'}
1626 | dev: true
1627 |
1628 | /globals@13.20.0:
1629 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
1630 | engines: {node: '>=8'}
1631 | dependencies:
1632 | type-fest: 0.20.2
1633 | dev: true
1634 |
1635 | /graceful-fs@4.2.11:
1636 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1637 | dev: true
1638 |
1639 | /graphemer@1.4.0:
1640 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
1641 | dev: true
1642 |
1643 | /has-flag@3.0.0:
1644 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
1645 | engines: {node: '>=4'}
1646 | dev: true
1647 |
1648 | /has-flag@4.0.0:
1649 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1650 | engines: {node: '>=8'}
1651 |
1652 | /has@1.0.3:
1653 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1654 | engines: {node: '>= 0.4.0'}
1655 | dependencies:
1656 | function-bind: 1.1.1
1657 | dev: true
1658 |
1659 | /html-escaper@2.0.2:
1660 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
1661 | dev: true
1662 |
1663 | /human-signals@2.1.0:
1664 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
1665 | engines: {node: '>=10.17.0'}
1666 | dev: true
1667 |
1668 | /human-signals@4.3.1:
1669 | resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
1670 | engines: {node: '>=14.18.0'}
1671 | dev: false
1672 |
1673 | /husky@8.0.3:
1674 | resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==}
1675 | engines: {node: '>=14'}
1676 | hasBin: true
1677 | dev: true
1678 |
1679 | /iconv-lite@0.4.24:
1680 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
1681 | engines: {node: '>=0.10.0'}
1682 | dependencies:
1683 | safer-buffer: 2.1.2
1684 | dev: false
1685 |
1686 | /ieee754@1.2.1:
1687 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
1688 | dev: false
1689 |
1690 | /ignore@5.2.4:
1691 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
1692 | engines: {node: '>= 4'}
1693 | dev: true
1694 |
1695 | /import-fresh@3.3.0:
1696 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1697 | engines: {node: '>=6'}
1698 | dependencies:
1699 | parent-module: 1.0.1
1700 | resolve-from: 4.0.0
1701 | dev: true
1702 |
1703 | /import-local@3.1.0:
1704 | resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==}
1705 | engines: {node: '>=8'}
1706 | hasBin: true
1707 | dependencies:
1708 | pkg-dir: 4.2.0
1709 | resolve-cwd: 3.0.0
1710 | dev: true
1711 |
1712 | /imurmurhash@0.1.4:
1713 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1714 | engines: {node: '>=0.8.19'}
1715 | dev: true
1716 |
1717 | /inflight@1.0.6:
1718 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1719 | dependencies:
1720 | once: 1.4.0
1721 | wrappy: 1.0.2
1722 | dev: true
1723 |
1724 | /inherits@2.0.4:
1725 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1726 |
1727 | /inquirer@9.2.10:
1728 | resolution: {integrity: sha512-tVVNFIXU8qNHoULiazz612GFl+yqNfjMTbLuViNJE/d860Qxrd3NMrse8dm40VUQLOQeULvaQF8lpAhvysjeyA==}
1729 | engines: {node: '>=14.18.0'}
1730 | dependencies:
1731 | '@ljharb/through': 2.3.9
1732 | ansi-escapes: 4.3.2
1733 | chalk: 5.3.0
1734 | cli-cursor: 3.1.0
1735 | cli-width: 4.1.0
1736 | external-editor: 3.1.0
1737 | figures: 5.0.0
1738 | lodash: 4.17.21
1739 | mute-stream: 1.0.0
1740 | ora: 5.4.1
1741 | run-async: 3.0.0
1742 | rxjs: 7.8.1
1743 | string-width: 4.2.3
1744 | strip-ansi: 6.0.1
1745 | wrap-ansi: 6.2.0
1746 | dev: false
1747 |
1748 | /is-arrayish@0.2.1:
1749 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
1750 | dev: true
1751 |
1752 | /is-core-module@2.13.0:
1753 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
1754 | dependencies:
1755 | has: 1.0.3
1756 | dev: true
1757 |
1758 | /is-extglob@2.1.1:
1759 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1760 | engines: {node: '>=0.10.0'}
1761 | dev: true
1762 |
1763 | /is-fullwidth-code-point@3.0.0:
1764 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1765 | engines: {node: '>=8'}
1766 |
1767 | /is-generator-fn@2.1.0:
1768 | resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
1769 | engines: {node: '>=6'}
1770 | dev: true
1771 |
1772 | /is-glob@4.0.3:
1773 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1774 | engines: {node: '>=0.10.0'}
1775 | dependencies:
1776 | is-extglob: 2.1.1
1777 | dev: true
1778 |
1779 | /is-interactive@1.0.0:
1780 | resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
1781 | engines: {node: '>=8'}
1782 | dev: false
1783 |
1784 | /is-interactive@2.0.0:
1785 | resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
1786 | engines: {node: '>=12'}
1787 | dev: false
1788 |
1789 | /is-number@7.0.0:
1790 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1791 | engines: {node: '>=0.12.0'}
1792 | dev: true
1793 |
1794 | /is-path-inside@3.0.3:
1795 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
1796 | engines: {node: '>=8'}
1797 | dev: true
1798 |
1799 | /is-stream@1.1.0:
1800 | resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
1801 | engines: {node: '>=0.10.0'}
1802 | dev: false
1803 |
1804 | /is-stream@2.0.1:
1805 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
1806 | engines: {node: '>=8'}
1807 | dev: true
1808 |
1809 | /is-stream@3.0.0:
1810 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
1811 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1812 | dev: false
1813 |
1814 | /is-unicode-supported@0.1.0:
1815 | resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
1816 | engines: {node: '>=10'}
1817 | dev: false
1818 |
1819 | /is-unicode-supported@1.3.0:
1820 | resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
1821 | engines: {node: '>=12'}
1822 | dev: false
1823 |
1824 | /isexe@2.0.0:
1825 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1826 |
1827 | /istanbul-lib-coverage@3.2.0:
1828 | resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==}
1829 | engines: {node: '>=8'}
1830 | dev: true
1831 |
1832 | /istanbul-lib-instrument@5.2.1:
1833 | resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
1834 | engines: {node: '>=8'}
1835 | dependencies:
1836 | '@babel/core': 7.22.10
1837 | '@babel/parser': 7.22.10
1838 | '@istanbuljs/schema': 0.1.3
1839 | istanbul-lib-coverage: 3.2.0
1840 | semver: 6.3.1
1841 | transitivePeerDependencies:
1842 | - supports-color
1843 | dev: true
1844 |
1845 | /istanbul-lib-report@3.0.1:
1846 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
1847 | engines: {node: '>=10'}
1848 | dependencies:
1849 | istanbul-lib-coverage: 3.2.0
1850 | make-dir: 4.0.0
1851 | supports-color: 7.2.0
1852 | dev: true
1853 |
1854 | /istanbul-lib-source-maps@4.0.1:
1855 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
1856 | engines: {node: '>=10'}
1857 | dependencies:
1858 | debug: 4.3.4
1859 | istanbul-lib-coverage: 3.2.0
1860 | source-map: 0.6.1
1861 | transitivePeerDependencies:
1862 | - supports-color
1863 | dev: true
1864 |
1865 | /istanbul-reports@3.1.6:
1866 | resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==}
1867 | engines: {node: '>=8'}
1868 | dependencies:
1869 | html-escaper: 2.0.2
1870 | istanbul-lib-report: 3.0.1
1871 | dev: true
1872 |
1873 | /jest-changed-files@29.5.0:
1874 | resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==}
1875 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1876 | dependencies:
1877 | execa: 5.1.1
1878 | p-limit: 3.1.0
1879 | dev: true
1880 |
1881 | /jest-circus@29.6.2:
1882 | resolution: {integrity: sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==}
1883 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1884 | dependencies:
1885 | '@jest/environment': 29.6.2
1886 | '@jest/expect': 29.6.2
1887 | '@jest/test-result': 29.6.2
1888 | '@jest/types': 29.6.1
1889 | '@types/node': 20.4.9
1890 | chalk: 4.1.2
1891 | co: 4.6.0
1892 | dedent: 1.5.1
1893 | is-generator-fn: 2.1.0
1894 | jest-each: 29.6.2
1895 | jest-matcher-utils: 29.6.2
1896 | jest-message-util: 29.6.2
1897 | jest-runtime: 29.6.2
1898 | jest-snapshot: 29.6.2
1899 | jest-util: 29.6.2
1900 | p-limit: 3.1.0
1901 | pretty-format: 29.6.2
1902 | pure-rand: 6.0.2
1903 | slash: 3.0.0
1904 | stack-utils: 2.0.6
1905 | transitivePeerDependencies:
1906 | - babel-plugin-macros
1907 | - supports-color
1908 | dev: true
1909 |
1910 | /jest-cli@29.6.2:
1911 | resolution: {integrity: sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==}
1912 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1913 | hasBin: true
1914 | peerDependencies:
1915 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
1916 | peerDependenciesMeta:
1917 | node-notifier:
1918 | optional: true
1919 | dependencies:
1920 | '@jest/core': 29.6.2
1921 | '@jest/test-result': 29.6.2
1922 | '@jest/types': 29.6.1
1923 | chalk: 4.1.2
1924 | exit: 0.1.2
1925 | graceful-fs: 4.2.11
1926 | import-local: 3.1.0
1927 | jest-config: 29.6.2(@types/node@20.4.9)
1928 | jest-util: 29.6.2
1929 | jest-validate: 29.6.2
1930 | prompts: 2.4.2
1931 | yargs: 17.7.2
1932 | transitivePeerDependencies:
1933 | - '@types/node'
1934 | - babel-plugin-macros
1935 | - supports-color
1936 | - ts-node
1937 | dev: true
1938 |
1939 | /jest-config@29.6.2(@types/node@20.4.9):
1940 | resolution: {integrity: sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==}
1941 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1942 | peerDependencies:
1943 | '@types/node': '*'
1944 | ts-node: '>=9.0.0'
1945 | peerDependenciesMeta:
1946 | '@types/node':
1947 | optional: true
1948 | ts-node:
1949 | optional: true
1950 | dependencies:
1951 | '@babel/core': 7.22.10
1952 | '@jest/test-sequencer': 29.6.2
1953 | '@jest/types': 29.6.1
1954 | '@types/node': 20.4.9
1955 | babel-jest: 29.6.2(@babel/core@7.22.10)
1956 | chalk: 4.1.2
1957 | ci-info: 3.8.0
1958 | deepmerge: 4.3.1
1959 | glob: 7.2.3
1960 | graceful-fs: 4.2.11
1961 | jest-circus: 29.6.2
1962 | jest-environment-node: 29.6.2
1963 | jest-get-type: 29.4.3
1964 | jest-regex-util: 29.4.3
1965 | jest-resolve: 29.6.2
1966 | jest-runner: 29.6.2
1967 | jest-util: 29.6.2
1968 | jest-validate: 29.6.2
1969 | micromatch: 4.0.5
1970 | parse-json: 5.2.0
1971 | pretty-format: 29.6.2
1972 | slash: 3.0.0
1973 | strip-json-comments: 3.1.1
1974 | transitivePeerDependencies:
1975 | - babel-plugin-macros
1976 | - supports-color
1977 | dev: true
1978 |
1979 | /jest-diff@29.6.2:
1980 | resolution: {integrity: sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==}
1981 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1982 | dependencies:
1983 | chalk: 4.1.2
1984 | diff-sequences: 29.4.3
1985 | jest-get-type: 29.4.3
1986 | pretty-format: 29.6.2
1987 | dev: true
1988 |
1989 | /jest-docblock@29.4.3:
1990 | resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==}
1991 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1992 | dependencies:
1993 | detect-newline: 3.1.0
1994 | dev: true
1995 |
1996 | /jest-each@29.6.2:
1997 | resolution: {integrity: sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==}
1998 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1999 | dependencies:
2000 | '@jest/types': 29.6.1
2001 | chalk: 4.1.2
2002 | jest-get-type: 29.4.3
2003 | jest-util: 29.6.2
2004 | pretty-format: 29.6.2
2005 | dev: true
2006 |
2007 | /jest-environment-node@29.6.2:
2008 | resolution: {integrity: sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==}
2009 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2010 | dependencies:
2011 | '@jest/environment': 29.6.2
2012 | '@jest/fake-timers': 29.6.2
2013 | '@jest/types': 29.6.1
2014 | '@types/node': 20.4.9
2015 | jest-mock: 29.6.2
2016 | jest-util: 29.6.2
2017 | dev: true
2018 |
2019 | /jest-get-type@29.4.3:
2020 | resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==}
2021 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2022 | dev: true
2023 |
2024 | /jest-haste-map@29.6.2:
2025 | resolution: {integrity: sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==}
2026 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2027 | dependencies:
2028 | '@jest/types': 29.6.1
2029 | '@types/graceful-fs': 4.1.6
2030 | '@types/node': 20.4.9
2031 | anymatch: 3.1.3
2032 | fb-watchman: 2.0.2
2033 | graceful-fs: 4.2.11
2034 | jest-regex-util: 29.4.3
2035 | jest-util: 29.6.2
2036 | jest-worker: 29.6.2
2037 | micromatch: 4.0.5
2038 | walker: 1.0.8
2039 | optionalDependencies:
2040 | fsevents: 2.3.2
2041 | dev: true
2042 |
2043 | /jest-leak-detector@29.6.2:
2044 | resolution: {integrity: sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==}
2045 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2046 | dependencies:
2047 | jest-get-type: 29.4.3
2048 | pretty-format: 29.6.2
2049 | dev: true
2050 |
2051 | /jest-matcher-utils@29.6.2:
2052 | resolution: {integrity: sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==}
2053 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2054 | dependencies:
2055 | chalk: 4.1.2
2056 | jest-diff: 29.6.2
2057 | jest-get-type: 29.4.3
2058 | pretty-format: 29.6.2
2059 | dev: true
2060 |
2061 | /jest-message-util@29.6.2:
2062 | resolution: {integrity: sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==}
2063 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2064 | dependencies:
2065 | '@babel/code-frame': 7.22.10
2066 | '@jest/types': 29.6.1
2067 | '@types/stack-utils': 2.0.1
2068 | chalk: 4.1.2
2069 | graceful-fs: 4.2.11
2070 | micromatch: 4.0.5
2071 | pretty-format: 29.6.2
2072 | slash: 3.0.0
2073 | stack-utils: 2.0.6
2074 | dev: true
2075 |
2076 | /jest-mock@29.6.2:
2077 | resolution: {integrity: sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==}
2078 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2079 | dependencies:
2080 | '@jest/types': 29.6.1
2081 | '@types/node': 20.4.9
2082 | jest-util: 29.6.2
2083 | dev: true
2084 |
2085 | /jest-pnp-resolver@1.2.3(jest-resolve@29.6.2):
2086 | resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
2087 | engines: {node: '>=6'}
2088 | peerDependencies:
2089 | jest-resolve: '*'
2090 | peerDependenciesMeta:
2091 | jest-resolve:
2092 | optional: true
2093 | dependencies:
2094 | jest-resolve: 29.6.2
2095 | dev: true
2096 |
2097 | /jest-regex-util@29.4.3:
2098 | resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==}
2099 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2100 | dev: true
2101 |
2102 | /jest-resolve-dependencies@29.6.2:
2103 | resolution: {integrity: sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==}
2104 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2105 | dependencies:
2106 | jest-regex-util: 29.4.3
2107 | jest-snapshot: 29.6.2
2108 | transitivePeerDependencies:
2109 | - supports-color
2110 | dev: true
2111 |
2112 | /jest-resolve@29.6.2:
2113 | resolution: {integrity: sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==}
2114 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2115 | dependencies:
2116 | chalk: 4.1.2
2117 | graceful-fs: 4.2.11
2118 | jest-haste-map: 29.6.2
2119 | jest-pnp-resolver: 1.2.3(jest-resolve@29.6.2)
2120 | jest-util: 29.6.2
2121 | jest-validate: 29.6.2
2122 | resolve: 1.22.4
2123 | resolve.exports: 2.0.2
2124 | slash: 3.0.0
2125 | dev: true
2126 |
2127 | /jest-runner@29.6.2:
2128 | resolution: {integrity: sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==}
2129 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2130 | dependencies:
2131 | '@jest/console': 29.6.2
2132 | '@jest/environment': 29.6.2
2133 | '@jest/test-result': 29.6.2
2134 | '@jest/transform': 29.6.2
2135 | '@jest/types': 29.6.1
2136 | '@types/node': 20.4.9
2137 | chalk: 4.1.2
2138 | emittery: 0.13.1
2139 | graceful-fs: 4.2.11
2140 | jest-docblock: 29.4.3
2141 | jest-environment-node: 29.6.2
2142 | jest-haste-map: 29.6.2
2143 | jest-leak-detector: 29.6.2
2144 | jest-message-util: 29.6.2
2145 | jest-resolve: 29.6.2
2146 | jest-runtime: 29.6.2
2147 | jest-util: 29.6.2
2148 | jest-watcher: 29.6.2
2149 | jest-worker: 29.6.2
2150 | p-limit: 3.1.0
2151 | source-map-support: 0.5.13
2152 | transitivePeerDependencies:
2153 | - supports-color
2154 | dev: true
2155 |
2156 | /jest-runtime@29.6.2:
2157 | resolution: {integrity: sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==}
2158 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2159 | dependencies:
2160 | '@jest/environment': 29.6.2
2161 | '@jest/fake-timers': 29.6.2
2162 | '@jest/globals': 29.6.2
2163 | '@jest/source-map': 29.6.0
2164 | '@jest/test-result': 29.6.2
2165 | '@jest/transform': 29.6.2
2166 | '@jest/types': 29.6.1
2167 | '@types/node': 20.4.9
2168 | chalk: 4.1.2
2169 | cjs-module-lexer: 1.2.3
2170 | collect-v8-coverage: 1.0.2
2171 | glob: 7.2.3
2172 | graceful-fs: 4.2.11
2173 | jest-haste-map: 29.6.2
2174 | jest-message-util: 29.6.2
2175 | jest-mock: 29.6.2
2176 | jest-regex-util: 29.4.3
2177 | jest-resolve: 29.6.2
2178 | jest-snapshot: 29.6.2
2179 | jest-util: 29.6.2
2180 | slash: 3.0.0
2181 | strip-bom: 4.0.0
2182 | transitivePeerDependencies:
2183 | - supports-color
2184 | dev: true
2185 |
2186 | /jest-snapshot@29.6.2:
2187 | resolution: {integrity: sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==}
2188 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2189 | dependencies:
2190 | '@babel/core': 7.22.10
2191 | '@babel/generator': 7.22.10
2192 | '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.10)
2193 | '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.10)
2194 | '@babel/types': 7.22.10
2195 | '@jest/expect-utils': 29.6.2
2196 | '@jest/transform': 29.6.2
2197 | '@jest/types': 29.6.1
2198 | babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.10)
2199 | chalk: 4.1.2
2200 | expect: 29.6.2
2201 | graceful-fs: 4.2.11
2202 | jest-diff: 29.6.2
2203 | jest-get-type: 29.4.3
2204 | jest-matcher-utils: 29.6.2
2205 | jest-message-util: 29.6.2
2206 | jest-util: 29.6.2
2207 | natural-compare: 1.4.0
2208 | pretty-format: 29.6.2
2209 | semver: 7.5.4
2210 | transitivePeerDependencies:
2211 | - supports-color
2212 | dev: true
2213 |
2214 | /jest-util@29.6.2:
2215 | resolution: {integrity: sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==}
2216 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2217 | dependencies:
2218 | '@jest/types': 29.6.1
2219 | '@types/node': 20.4.9
2220 | chalk: 4.1.2
2221 | ci-info: 3.8.0
2222 | graceful-fs: 4.2.11
2223 | picomatch: 2.3.1
2224 | dev: true
2225 |
2226 | /jest-validate@29.6.2:
2227 | resolution: {integrity: sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==}
2228 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2229 | dependencies:
2230 | '@jest/types': 29.6.1
2231 | camelcase: 6.3.0
2232 | chalk: 4.1.2
2233 | jest-get-type: 29.4.3
2234 | leven: 3.1.0
2235 | pretty-format: 29.6.2
2236 | dev: true
2237 |
2238 | /jest-watcher@29.6.2:
2239 | resolution: {integrity: sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==}
2240 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2241 | dependencies:
2242 | '@jest/test-result': 29.6.2
2243 | '@jest/types': 29.6.1
2244 | '@types/node': 20.4.9
2245 | ansi-escapes: 4.3.2
2246 | chalk: 4.1.2
2247 | emittery: 0.13.1
2248 | jest-util: 29.6.2
2249 | string-length: 4.0.2
2250 | dev: true
2251 |
2252 | /jest-worker@29.6.2:
2253 | resolution: {integrity: sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==}
2254 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2255 | dependencies:
2256 | '@types/node': 20.4.9
2257 | jest-util: 29.6.2
2258 | merge-stream: 2.0.0
2259 | supports-color: 8.1.1
2260 | dev: true
2261 |
2262 | /jest@29.6.2:
2263 | resolution: {integrity: sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==}
2264 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2265 | hasBin: true
2266 | peerDependencies:
2267 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
2268 | peerDependenciesMeta:
2269 | node-notifier:
2270 | optional: true
2271 | dependencies:
2272 | '@jest/core': 29.6.2
2273 | '@jest/types': 29.6.1
2274 | import-local: 3.1.0
2275 | jest-cli: 29.6.2
2276 | transitivePeerDependencies:
2277 | - '@types/node'
2278 | - babel-plugin-macros
2279 | - supports-color
2280 | - ts-node
2281 | dev: true
2282 |
2283 | /js-tokens@4.0.0:
2284 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
2285 | dev: true
2286 |
2287 | /js-yaml@3.14.1:
2288 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
2289 | hasBin: true
2290 | dependencies:
2291 | argparse: 1.0.10
2292 | esprima: 4.0.1
2293 | dev: true
2294 |
2295 | /js-yaml@4.1.0:
2296 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
2297 | hasBin: true
2298 | dependencies:
2299 | argparse: 2.0.1
2300 | dev: true
2301 |
2302 | /jsesc@2.5.2:
2303 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
2304 | engines: {node: '>=4'}
2305 | hasBin: true
2306 | dev: true
2307 |
2308 | /json-parse-even-better-errors@2.3.1:
2309 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
2310 | dev: true
2311 |
2312 | /json-schema-traverse@0.4.1:
2313 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
2314 | dev: true
2315 |
2316 | /json-stable-stringify-without-jsonify@1.0.1:
2317 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
2318 | dev: true
2319 |
2320 | /json5@2.2.3:
2321 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
2322 | engines: {node: '>=6'}
2323 | hasBin: true
2324 | dev: true
2325 |
2326 | /kleur@3.0.3:
2327 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
2328 | engines: {node: '>=6'}
2329 | dev: true
2330 |
2331 | /leven@3.1.0:
2332 | resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
2333 | engines: {node: '>=6'}
2334 | dev: true
2335 |
2336 | /levn@0.4.1:
2337 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
2338 | engines: {node: '>= 0.8.0'}
2339 | dependencies:
2340 | prelude-ls: 1.2.1
2341 | type-check: 0.4.0
2342 | dev: true
2343 |
2344 | /lines-and-columns@1.2.4:
2345 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
2346 | dev: true
2347 |
2348 | /locate-path@5.0.0:
2349 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
2350 | engines: {node: '>=8'}
2351 | dependencies:
2352 | p-locate: 4.1.0
2353 | dev: true
2354 |
2355 | /locate-path@6.0.0:
2356 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
2357 | engines: {node: '>=10'}
2358 | dependencies:
2359 | p-locate: 5.0.0
2360 | dev: true
2361 |
2362 | /lodash.merge@4.6.2:
2363 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
2364 | dev: true
2365 |
2366 | /lodash@4.17.21:
2367 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
2368 | dev: false
2369 |
2370 | /log-symbols@4.1.0:
2371 | resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
2372 | engines: {node: '>=10'}
2373 | dependencies:
2374 | chalk: 4.1.2
2375 | is-unicode-supported: 0.1.0
2376 | dev: false
2377 |
2378 | /log-symbols@5.1.0:
2379 | resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==}
2380 | engines: {node: '>=12'}
2381 | dependencies:
2382 | chalk: 5.3.0
2383 | is-unicode-supported: 1.3.0
2384 | dev: false
2385 |
2386 | /lru-cache@4.1.5:
2387 | resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==}
2388 | dependencies:
2389 | pseudomap: 1.0.2
2390 | yallist: 2.1.2
2391 | dev: false
2392 |
2393 | /lru-cache@5.1.1:
2394 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
2395 | dependencies:
2396 | yallist: 3.1.1
2397 | dev: true
2398 |
2399 | /lru-cache@6.0.0:
2400 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
2401 | engines: {node: '>=10'}
2402 | dependencies:
2403 | yallist: 4.0.0
2404 | dev: true
2405 |
2406 | /make-dir@4.0.0:
2407 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
2408 | engines: {node: '>=10'}
2409 | dependencies:
2410 | semver: 7.5.4
2411 | dev: true
2412 |
2413 | /makeerror@1.0.12:
2414 | resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
2415 | dependencies:
2416 | tmpl: 1.0.5
2417 | dev: true
2418 |
2419 | /merge-stream@2.0.0:
2420 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
2421 |
2422 | /micromatch@4.0.5:
2423 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
2424 | engines: {node: '>=8.6'}
2425 | dependencies:
2426 | braces: 3.0.2
2427 | picomatch: 2.3.1
2428 | dev: true
2429 |
2430 | /mimic-fn@2.1.0:
2431 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
2432 | engines: {node: '>=6'}
2433 |
2434 | /mimic-fn@4.0.0:
2435 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
2436 | engines: {node: '>=12'}
2437 | dev: false
2438 |
2439 | /minimatch@3.1.2:
2440 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
2441 | dependencies:
2442 | brace-expansion: 1.1.11
2443 | dev: true
2444 |
2445 | /ms@2.1.2:
2446 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
2447 | dev: true
2448 |
2449 | /mute-stream@1.0.0:
2450 | resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
2451 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
2452 | dev: false
2453 |
2454 | /natural-compare@1.4.0:
2455 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
2456 | dev: true
2457 |
2458 | /node-domexception@1.0.0:
2459 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
2460 | engines: {node: '>=10.5.0'}
2461 | dev: false
2462 |
2463 | /node-fetch@3.3.2:
2464 | resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
2465 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2466 | dependencies:
2467 | data-uri-to-buffer: 4.0.1
2468 | fetch-blob: 3.2.0
2469 | formdata-polyfill: 4.0.10
2470 | dev: false
2471 |
2472 | /node-int64@0.4.0:
2473 | resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
2474 | dev: true
2475 |
2476 | /node-releases@2.0.13:
2477 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
2478 | dev: true
2479 |
2480 | /normalize-path@3.0.0:
2481 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
2482 | engines: {node: '>=0.10.0'}
2483 | dev: true
2484 |
2485 | /npm-run-path@2.0.2:
2486 | resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==}
2487 | engines: {node: '>=4'}
2488 | dependencies:
2489 | path-key: 2.0.1
2490 | dev: false
2491 |
2492 | /npm-run-path@4.0.1:
2493 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
2494 | engines: {node: '>=8'}
2495 | dependencies:
2496 | path-key: 3.1.1
2497 | dev: true
2498 |
2499 | /npm-run-path@5.1.0:
2500 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
2501 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2502 | dependencies:
2503 | path-key: 4.0.0
2504 | dev: false
2505 |
2506 | /once@1.4.0:
2507 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
2508 | dependencies:
2509 | wrappy: 1.0.2
2510 | dev: true
2511 |
2512 | /onetime@5.1.2:
2513 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
2514 | engines: {node: '>=6'}
2515 | dependencies:
2516 | mimic-fn: 2.1.0
2517 |
2518 | /onetime@6.0.0:
2519 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
2520 | engines: {node: '>=12'}
2521 | dependencies:
2522 | mimic-fn: 4.0.0
2523 | dev: false
2524 |
2525 | /optionator@0.9.3:
2526 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
2527 | engines: {node: '>= 0.8.0'}
2528 | dependencies:
2529 | '@aashutoshrathi/word-wrap': 1.2.6
2530 | deep-is: 0.1.4
2531 | fast-levenshtein: 2.0.6
2532 | levn: 0.4.1
2533 | prelude-ls: 1.2.1
2534 | type-check: 0.4.0
2535 | dev: true
2536 |
2537 | /ora@5.4.1:
2538 | resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
2539 | engines: {node: '>=10'}
2540 | dependencies:
2541 | bl: 4.1.0
2542 | chalk: 4.1.2
2543 | cli-cursor: 3.1.0
2544 | cli-spinners: 2.9.0
2545 | is-interactive: 1.0.0
2546 | is-unicode-supported: 0.1.0
2547 | log-symbols: 4.1.0
2548 | strip-ansi: 6.0.1
2549 | wcwidth: 1.0.1
2550 | dev: false
2551 |
2552 | /ora@7.0.1:
2553 | resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==}
2554 | engines: {node: '>=16'}
2555 | dependencies:
2556 | chalk: 5.3.0
2557 | cli-cursor: 4.0.0
2558 | cli-spinners: 2.9.0
2559 | is-interactive: 2.0.0
2560 | is-unicode-supported: 1.3.0
2561 | log-symbols: 5.1.0
2562 | stdin-discarder: 0.1.0
2563 | string-width: 6.1.0
2564 | strip-ansi: 7.1.0
2565 | dev: false
2566 |
2567 | /os-tmpdir@1.0.2:
2568 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
2569 | engines: {node: '>=0.10.0'}
2570 | dev: false
2571 |
2572 | /p-finally@1.0.0:
2573 | resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
2574 | engines: {node: '>=4'}
2575 | dev: false
2576 |
2577 | /p-limit@2.3.0:
2578 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
2579 | engines: {node: '>=6'}
2580 | dependencies:
2581 | p-try: 2.2.0
2582 | dev: true
2583 |
2584 | /p-limit@3.1.0:
2585 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
2586 | engines: {node: '>=10'}
2587 | dependencies:
2588 | yocto-queue: 0.1.0
2589 | dev: true
2590 |
2591 | /p-locate@4.1.0:
2592 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
2593 | engines: {node: '>=8'}
2594 | dependencies:
2595 | p-limit: 2.3.0
2596 | dev: true
2597 |
2598 | /p-locate@5.0.0:
2599 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
2600 | engines: {node: '>=10'}
2601 | dependencies:
2602 | p-limit: 3.1.0
2603 | dev: true
2604 |
2605 | /p-try@2.2.0:
2606 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
2607 | engines: {node: '>=6'}
2608 | dev: true
2609 |
2610 | /parent-module@1.0.1:
2611 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
2612 | engines: {node: '>=6'}
2613 | dependencies:
2614 | callsites: 3.1.0
2615 | dev: true
2616 |
2617 | /parse-json@5.2.0:
2618 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
2619 | engines: {node: '>=8'}
2620 | dependencies:
2621 | '@babel/code-frame': 7.22.10
2622 | error-ex: 1.3.2
2623 | json-parse-even-better-errors: 2.3.1
2624 | lines-and-columns: 1.2.4
2625 | dev: true
2626 |
2627 | /path-exists@4.0.0:
2628 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
2629 | engines: {node: '>=8'}
2630 | dev: true
2631 |
2632 | /path-is-absolute@1.0.1:
2633 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
2634 | engines: {node: '>=0.10.0'}
2635 | dev: true
2636 |
2637 | /path-key@2.0.1:
2638 | resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
2639 | engines: {node: '>=4'}
2640 | dev: false
2641 |
2642 | /path-key@3.1.1:
2643 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
2644 | engines: {node: '>=8'}
2645 |
2646 | /path-key@4.0.0:
2647 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
2648 | engines: {node: '>=12'}
2649 | dev: false
2650 |
2651 | /path-parse@1.0.7:
2652 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
2653 | dev: true
2654 |
2655 | /picocolors@1.0.0:
2656 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
2657 | dev: true
2658 |
2659 | /picomatch@2.3.1:
2660 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
2661 | engines: {node: '>=8.6'}
2662 | dev: true
2663 |
2664 | /pirates@4.0.6:
2665 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
2666 | engines: {node: '>= 6'}
2667 | dev: true
2668 |
2669 | /pkg-dir@4.2.0:
2670 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
2671 | engines: {node: '>=8'}
2672 | dependencies:
2673 | find-up: 4.1.0
2674 | dev: true
2675 |
2676 | /prelude-ls@1.2.1:
2677 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
2678 | engines: {node: '>= 0.8.0'}
2679 | dev: true
2680 |
2681 | /prettier@3.0.1:
2682 | resolution: {integrity: sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==}
2683 | engines: {node: '>=14'}
2684 | hasBin: true
2685 | dev: true
2686 |
2687 | /pretty-format@29.6.2:
2688 | resolution: {integrity: sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==}
2689 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
2690 | dependencies:
2691 | '@jest/schemas': 29.6.0
2692 | ansi-styles: 5.2.0
2693 | react-is: 18.2.0
2694 | dev: true
2695 |
2696 | /prompts@2.4.2:
2697 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
2698 | engines: {node: '>= 6'}
2699 | dependencies:
2700 | kleur: 3.0.3
2701 | sisteransi: 1.0.5
2702 | dev: true
2703 |
2704 | /pseudomap@1.0.2:
2705 | resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
2706 | dev: false
2707 |
2708 | /punycode@2.3.0:
2709 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
2710 | engines: {node: '>=6'}
2711 | dev: true
2712 |
2713 | /pure-rand@6.0.2:
2714 | resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==}
2715 | dev: true
2716 |
2717 | /queue-microtask@1.2.3:
2718 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
2719 | dev: true
2720 |
2721 | /react-is@18.2.0:
2722 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
2723 | dev: true
2724 |
2725 | /readable-stream@3.6.2:
2726 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
2727 | engines: {node: '>= 6'}
2728 | dependencies:
2729 | inherits: 2.0.4
2730 | string_decoder: 1.3.0
2731 | util-deprecate: 1.0.2
2732 | dev: false
2733 |
2734 | /require-directory@2.1.1:
2735 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
2736 | engines: {node: '>=0.10.0'}
2737 | dev: true
2738 |
2739 | /resolve-cwd@3.0.0:
2740 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
2741 | engines: {node: '>=8'}
2742 | dependencies:
2743 | resolve-from: 5.0.0
2744 | dev: true
2745 |
2746 | /resolve-from@4.0.0:
2747 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
2748 | engines: {node: '>=4'}
2749 | dev: true
2750 |
2751 | /resolve-from@5.0.0:
2752 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
2753 | engines: {node: '>=8'}
2754 | dev: true
2755 |
2756 | /resolve.exports@2.0.2:
2757 | resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
2758 | engines: {node: '>=10'}
2759 | dev: true
2760 |
2761 | /resolve@1.22.4:
2762 | resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==}
2763 | hasBin: true
2764 | dependencies:
2765 | is-core-module: 2.13.0
2766 | path-parse: 1.0.7
2767 | supports-preserve-symlinks-flag: 1.0.0
2768 | dev: true
2769 |
2770 | /restore-cursor@3.1.0:
2771 | resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
2772 | engines: {node: '>=8'}
2773 | dependencies:
2774 | onetime: 5.1.2
2775 | signal-exit: 3.0.7
2776 | dev: false
2777 |
2778 | /restore-cursor@4.0.0:
2779 | resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
2780 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2781 | dependencies:
2782 | onetime: 5.1.2
2783 | signal-exit: 3.0.7
2784 | dev: false
2785 |
2786 | /reusify@1.0.4:
2787 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
2788 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
2789 | dev: true
2790 |
2791 | /rimraf@3.0.2:
2792 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
2793 | hasBin: true
2794 | dependencies:
2795 | glob: 7.2.3
2796 | dev: true
2797 |
2798 | /run-async@3.0.0:
2799 | resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
2800 | engines: {node: '>=0.12.0'}
2801 | dev: false
2802 |
2803 | /run-parallel@1.2.0:
2804 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
2805 | dependencies:
2806 | queue-microtask: 1.2.3
2807 | dev: true
2808 |
2809 | /rxjs@7.8.1:
2810 | resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
2811 | dependencies:
2812 | tslib: 2.6.1
2813 | dev: false
2814 |
2815 | /safe-buffer@5.2.1:
2816 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
2817 | dev: false
2818 |
2819 | /safer-buffer@2.1.2:
2820 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
2821 | dev: false
2822 |
2823 | /semver@6.3.1:
2824 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
2825 | hasBin: true
2826 | dev: true
2827 |
2828 | /semver@7.5.4:
2829 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
2830 | engines: {node: '>=10'}
2831 | hasBin: true
2832 | dependencies:
2833 | lru-cache: 6.0.0
2834 | dev: true
2835 |
2836 | /shebang-command@1.2.0:
2837 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
2838 | engines: {node: '>=0.10.0'}
2839 | dependencies:
2840 | shebang-regex: 1.0.0
2841 | dev: false
2842 |
2843 | /shebang-command@2.0.0:
2844 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
2845 | engines: {node: '>=8'}
2846 | dependencies:
2847 | shebang-regex: 3.0.0
2848 |
2849 | /shebang-regex@1.0.0:
2850 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
2851 | engines: {node: '>=0.10.0'}
2852 | dev: false
2853 |
2854 | /shebang-regex@3.0.0:
2855 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
2856 | engines: {node: '>=8'}
2857 |
2858 | /signal-exit@3.0.7:
2859 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
2860 |
2861 | /sisteransi@1.0.5:
2862 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
2863 | dev: true
2864 |
2865 | /slash@3.0.0:
2866 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
2867 | engines: {node: '>=8'}
2868 | dev: true
2869 |
2870 | /source-map-support@0.5.13:
2871 | resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
2872 | dependencies:
2873 | buffer-from: 1.1.2
2874 | source-map: 0.6.1
2875 | dev: true
2876 |
2877 | /source-map@0.6.1:
2878 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
2879 | engines: {node: '>=0.10.0'}
2880 | dev: true
2881 |
2882 | /sprintf-js@1.0.3:
2883 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
2884 | dev: true
2885 |
2886 | /stack-utils@2.0.6:
2887 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
2888 | engines: {node: '>=10'}
2889 | dependencies:
2890 | escape-string-regexp: 2.0.0
2891 | dev: true
2892 |
2893 | /stdin-discarder@0.1.0:
2894 | resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==}
2895 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2896 | dependencies:
2897 | bl: 5.1.0
2898 | dev: false
2899 |
2900 | /string-length@4.0.2:
2901 | resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
2902 | engines: {node: '>=10'}
2903 | dependencies:
2904 | char-regex: 1.0.2
2905 | strip-ansi: 6.0.1
2906 | dev: true
2907 |
2908 | /string-width@4.2.3:
2909 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
2910 | engines: {node: '>=8'}
2911 | dependencies:
2912 | emoji-regex: 8.0.0
2913 | is-fullwidth-code-point: 3.0.0
2914 | strip-ansi: 6.0.1
2915 |
2916 | /string-width@6.1.0:
2917 | resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==}
2918 | engines: {node: '>=16'}
2919 | dependencies:
2920 | eastasianwidth: 0.2.0
2921 | emoji-regex: 10.2.1
2922 | strip-ansi: 7.1.0
2923 | dev: false
2924 |
2925 | /string_decoder@1.3.0:
2926 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
2927 | dependencies:
2928 | safe-buffer: 5.2.1
2929 | dev: false
2930 |
2931 | /strip-ansi@6.0.1:
2932 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
2933 | engines: {node: '>=8'}
2934 | dependencies:
2935 | ansi-regex: 5.0.1
2936 |
2937 | /strip-ansi@7.1.0:
2938 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
2939 | engines: {node: '>=12'}
2940 | dependencies:
2941 | ansi-regex: 6.0.1
2942 | dev: false
2943 |
2944 | /strip-bom@4.0.0:
2945 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
2946 | engines: {node: '>=8'}
2947 | dev: true
2948 |
2949 | /strip-eof@1.0.0:
2950 | resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==}
2951 | engines: {node: '>=0.10.0'}
2952 | dev: false
2953 |
2954 | /strip-final-newline@2.0.0:
2955 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
2956 | engines: {node: '>=6'}
2957 | dev: true
2958 |
2959 | /strip-final-newline@3.0.0:
2960 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
2961 | engines: {node: '>=12'}
2962 | dev: false
2963 |
2964 | /strip-json-comments@3.1.1:
2965 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
2966 | engines: {node: '>=8'}
2967 | dev: true
2968 |
2969 | /supports-color@5.5.0:
2970 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
2971 | engines: {node: '>=4'}
2972 | dependencies:
2973 | has-flag: 3.0.0
2974 | dev: true
2975 |
2976 | /supports-color@7.2.0:
2977 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
2978 | engines: {node: '>=8'}
2979 | dependencies:
2980 | has-flag: 4.0.0
2981 |
2982 | /supports-color@8.1.1:
2983 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
2984 | engines: {node: '>=10'}
2985 | dependencies:
2986 | has-flag: 4.0.0
2987 | dev: true
2988 |
2989 | /supports-preserve-symlinks-flag@1.0.0:
2990 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
2991 | engines: {node: '>= 0.4'}
2992 | dev: true
2993 |
2994 | /test-exclude@6.0.0:
2995 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
2996 | engines: {node: '>=8'}
2997 | dependencies:
2998 | '@istanbuljs/schema': 0.1.3
2999 | glob: 7.2.3
3000 | minimatch: 3.1.2
3001 | dev: true
3002 |
3003 | /text-table@0.2.0:
3004 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
3005 | dev: true
3006 |
3007 | /tmp@0.0.33:
3008 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
3009 | engines: {node: '>=0.6.0'}
3010 | dependencies:
3011 | os-tmpdir: 1.0.2
3012 | dev: false
3013 |
3014 | /tmpl@1.0.5:
3015 | resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
3016 | dev: true
3017 |
3018 | /to-fast-properties@2.0.0:
3019 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
3020 | engines: {node: '>=4'}
3021 | dev: true
3022 |
3023 | /to-regex-range@5.0.1:
3024 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
3025 | engines: {node: '>=8.0'}
3026 | dependencies:
3027 | is-number: 7.0.0
3028 | dev: true
3029 |
3030 | /tslib@2.6.1:
3031 | resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==}
3032 | dev: false
3033 |
3034 | /type-check@0.4.0:
3035 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
3036 | engines: {node: '>= 0.8.0'}
3037 | dependencies:
3038 | prelude-ls: 1.2.1
3039 | dev: true
3040 |
3041 | /type-detect@4.0.8:
3042 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
3043 | engines: {node: '>=4'}
3044 | dev: true
3045 |
3046 | /type-fest@0.20.2:
3047 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
3048 | engines: {node: '>=10'}
3049 | dev: true
3050 |
3051 | /type-fest@0.21.3:
3052 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
3053 | engines: {node: '>=10'}
3054 |
3055 | /update-browserslist-db@1.0.11(browserslist@4.21.10):
3056 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
3057 | hasBin: true
3058 | peerDependencies:
3059 | browserslist: '>= 4.21.0'
3060 | dependencies:
3061 | browserslist: 4.21.10
3062 | escalade: 3.1.1
3063 | picocolors: 1.0.0
3064 | dev: true
3065 |
3066 | /uri-js@4.4.1:
3067 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
3068 | dependencies:
3069 | punycode: 2.3.0
3070 | dev: true
3071 |
3072 | /util-deprecate@1.0.2:
3073 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
3074 | dev: false
3075 |
3076 | /v8-to-istanbul@9.1.0:
3077 | resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==}
3078 | engines: {node: '>=10.12.0'}
3079 | dependencies:
3080 | '@jridgewell/trace-mapping': 0.3.19
3081 | '@types/istanbul-lib-coverage': 2.0.4
3082 | convert-source-map: 1.9.0
3083 | dev: true
3084 |
3085 | /walker@1.0.8:
3086 | resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
3087 | dependencies:
3088 | makeerror: 1.0.12
3089 | dev: true
3090 |
3091 | /wcwidth@1.0.1:
3092 | resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
3093 | dependencies:
3094 | defaults: 1.0.4
3095 | dev: false
3096 |
3097 | /web-streams-polyfill@3.2.1:
3098 | resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==}
3099 | engines: {node: '>= 8'}
3100 | dev: false
3101 |
3102 | /which@1.3.1:
3103 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
3104 | hasBin: true
3105 | dependencies:
3106 | isexe: 2.0.0
3107 | dev: false
3108 |
3109 | /which@2.0.2:
3110 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
3111 | engines: {node: '>= 8'}
3112 | hasBin: true
3113 | dependencies:
3114 | isexe: 2.0.0
3115 |
3116 | /wrap-ansi@6.2.0:
3117 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
3118 | engines: {node: '>=8'}
3119 | dependencies:
3120 | ansi-styles: 4.3.0
3121 | string-width: 4.2.3
3122 | strip-ansi: 6.0.1
3123 | dev: false
3124 |
3125 | /wrap-ansi@7.0.0:
3126 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
3127 | engines: {node: '>=10'}
3128 | dependencies:
3129 | ansi-styles: 4.3.0
3130 | string-width: 4.2.3
3131 | strip-ansi: 6.0.1
3132 | dev: true
3133 |
3134 | /wrappy@1.0.2:
3135 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
3136 | dev: true
3137 |
3138 | /write-file-atomic@4.0.2:
3139 | resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
3140 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
3141 | dependencies:
3142 | imurmurhash: 0.1.4
3143 | signal-exit: 3.0.7
3144 | dev: true
3145 |
3146 | /y18n@5.0.8:
3147 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
3148 | engines: {node: '>=10'}
3149 | dev: true
3150 |
3151 | /yallist@2.1.2:
3152 | resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
3153 | dev: false
3154 |
3155 | /yallist@3.1.1:
3156 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
3157 | dev: true
3158 |
3159 | /yallist@4.0.0:
3160 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
3161 | dev: true
3162 |
3163 | /yargs-parser@21.1.1:
3164 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
3165 | engines: {node: '>=12'}
3166 | dev: true
3167 |
3168 | /yargs@17.7.2:
3169 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
3170 | engines: {node: '>=12'}
3171 | dependencies:
3172 | cliui: 8.0.1
3173 | escalade: 3.1.1
3174 | get-caller-file: 2.0.5
3175 | require-directory: 2.1.1
3176 | string-width: 4.2.3
3177 | y18n: 5.0.8
3178 | yargs-parser: 21.1.1
3179 | dev: true
3180 |
3181 | /yocto-queue@0.1.0:
3182 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
3183 | engines: {node: '>=10'}
3184 | dev: true
3185 |
--------------------------------------------------------------------------------