├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── assets
├── playwright-ai.svg
└── pw-demo.gif
├── index.js
├── lib
├── prompts.js
└── util.js
├── models
└── claude.js
├── package-lock.json
├── package.json
├── tests
└── sample
│ ├── .gitignore
│ ├── package-lock.json
│ ├── package.json
│ ├── playwright.config.js
│ └── tests
│ └── .gitkeep
└── util
└── write-to-file.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .idea
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # 1.1.0 - December 7, 2023.
2 |
3 | - Updated model options
4 |
5 | # 1.0.1 - November 26, 2023.
6 |
7 | - Open-source release
8 |
9 | # 1.0.0 - July, 2023.
10 |
11 | - Private release
12 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Permission is hereby granted, free of charge, to any person obtaining
2 | a copy of this software and associated documentation files (the
3 | "Software"), to deal in the Software without restriction, including
4 | without limitation the rights to use, copy, modify, merge, publish,
5 | distribute, sublicense, and/or sell copies of the Software, and to
6 | permit persons to whom the Software is furnished to do so, subject to
7 | the following conditions:
8 |
9 | The above copyright notice and this permission notice shall be
10 | included in all copies or substantial portions of the Software.
11 |
12 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19 |
20 | ====
21 |
22 | All files located in the node_modules directory are externally maintained
23 | libraries used by this software which have their own licenses; we recommend
24 | you read them, as their terms may differ from the terms above.
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # playwright-ai [](https://www.npmjs.com/package/playwright-ai)
2 |
3 |
4 | > Command-line utility to generate LLM-based [Playwright](https://playwright.dev/) tests
5 |
6 | ⚠️ Warning this tool is experimental and is still under development.
7 |
8 |
9 |
10 | # Usage
11 |
12 | Supported models:
13 |
14 | - Anthropic's Claude - configure API key with `ANTHROPIC_API_KEY`.
15 | - OpenAI's GPT3 and GPT4 - configure API key with `OPENAI_API_KEY`.
16 |
17 | ## Quick start
18 |
19 | - Make sure you have the most basic Playwright installation with `npm init playwright@latest`. See https://playwright.dev/docs/intro#installing-playwright for details.
20 | - Install the CLI:
21 |
22 | ```
23 | npm -g playwright-ai
24 | ```
25 |
26 | - Obtrain the API key for the LLM model of your choice: [Anthropic](https://www.anthropic.com) or [OpenAI](https://openai.com/).
27 | - Execute the CLI from project directory:
28 |
29 | ```
30 | playwright-ai --endpoint=https://example.com --model=claude --tests=1
31 | ```
32 |
33 | - After the CLI is done, it will generate the tests into the Playwright test directory. As the tests generate, the CLI will have both passing and failing tests. The failing tests will have to be manually fixed by the user of the tool.
34 |
35 |
36 |
37 | ## Core Options
38 |
39 | ### --endpoint (-e) :: `String`
40 |
41 | **This option is required.**
42 |
43 | The endpoint option specifies the API endpoint to call. `playwright-ai` will browse to this endpoint and process it for generating the tests.
44 |
45 | ### --model (-m) :: `String`
46 |
47 | _Default_: `gpt-4`.
48 |
49 | The LLM model to use to generate the tests.
50 | Available options: `gpt-3`, `gpt-4`, `claude`.
51 |
52 | ### --tests (-t) :: `Number`
53 |
54 | _Default_: `1`.
55 |
56 | Number of LLM-based tests to generate.
57 |
58 | ## CLI Options
59 |
60 | ### --help
61 |
62 | Displays CLI command help.
63 |
64 | ### ---version
65 |
66 | Shows CLI version.
67 |
68 | ## Release History
69 |
70 | See the [CHANGELOG.md](CHANGELOG.md).
71 |
72 | ## TODO
73 |
74 | - Support for other models
75 | - More complex test cases
76 |
77 | ## License
78 |
79 | [MIT](LICENSE)
80 |
--------------------------------------------------------------------------------
/assets/playwright-ai.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
47 |
--------------------------------------------------------------------------------
/assets/pw-demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vladikoff/playwright-ai/39d791c4a5a54e2b86a33817559411e6d7bc461f/assets/pw-demo.gif
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | import Listr from "listr";
4 | import yargs from "yargs/yargs";
5 | import { Observable } from "rxjs";
6 | import { getHTML, initialPrompt, start } from "./lib/prompts.js";
7 |
8 | const result = yargs(process.argv.slice(2))
9 | .options({
10 | endpoint: {
11 | alias: "e",
12 | describe: "endpoint",
13 | demandOption: true,
14 | },
15 | components: {
16 | alias: "t",
17 | describe: "tests",
18 | default: "1",
19 | },
20 | model: {
21 | alias: "m",
22 | describe: "model",
23 | default: "gpt4",
24 | },
25 | })
26 | .help().argv;
27 |
28 | process.endpoint = result.endpoint;
29 | process.model = result.model || "gpt4";
30 |
31 | const tasks = new Listr([
32 | {
33 | title: "Fetching endpoint...",
34 | task: async (ctx) => {
35 | const html = await getHTML(result.endpoint);
36 | ctx.html = html;
37 | return html;
38 | },
39 | },
40 | {
41 | title: `Connecting to AI (${process.model.toLocaleString()}) ...`,
42 | task: async () => {
43 | return await initialPrompt();
44 | },
45 | },
46 | {
47 | title: "Writing tests...",
48 | task: async (ctx) => {
49 | return new Observable((observer) => {
50 | start(observer, ctx, result.endpoint, result.components);
51 | });
52 | },
53 | },
54 | ]);
55 |
56 | tasks
57 | .run()
58 | .then((ctx) => {
59 | console.log(`Generated the following tests:`);
60 | ctx.testsPassing.forEach((test) => {
61 | console.log("✔", test);
62 | });
63 |
64 | ctx.testsFailed.forEach((test) => {
65 | console.log("⚠️", test);
66 | });
67 | })
68 | .catch((err) => {
69 | console.error(err);
70 | });
71 |
--------------------------------------------------------------------------------
/lib/prompts.js:
--------------------------------------------------------------------------------
1 | import makeDebug from "debug";
2 | import _ from "lodash";
3 | const debug = makeDebug("playwright-ai");
4 | import util from "node:util";
5 | import child_process from "node:child_process";
6 |
7 | const exec = util.promisify(child_process.exec);
8 | import { ChatGPTAPI } from "chatgpt";
9 | import writeToFile from "../util/write-to-file.js";
10 | import Claude from "../models/claude.js";
11 | import axios from "axios";
12 | import {
13 | snakeCase,
14 | fallbackComponentName,
15 | extractCode,
16 | extractName,
17 | } from "./util.js";
18 |
19 | async function runPlayWright(test) {
20 | let stdout, stderr, code, result;
21 | try {
22 | result = await exec(`npx playwright test ${test} --reporter=dot`, {
23 | stdio: ["pipe", "pipe", "ignore"],
24 | });
25 | stdout = result.stdout;
26 | stderr = result.stderr;
27 | code = result.code;
28 | } catch (ex) {
29 | return {
30 | code: ex.code,
31 | stdout: ex.stdout,
32 | stderr: ex.stderr,
33 | };
34 | }
35 |
36 | return {
37 | code: code,
38 | stdout,
39 | stderr,
40 | };
41 | }
42 |
43 | let api = null;
44 |
45 | const delay = (time) => new Promise((res) => setTimeout(res, time));
46 |
47 | let testsFailed = [];
48 | let testsPassing = [];
49 | let conversationId = null;
50 | const SKIP_AI = false;
51 | let PROMPTS = {};
52 |
53 | async function getHTML(endpoint) {
54 | await delay(1000);
55 | try {
56 | const response = await axios.get(endpoint);
57 | return response.data;
58 | } catch (error) {
59 | console.error(`Error: ${error}`);
60 | }
61 | }
62 |
63 | async function initialPrompt() {
64 | PROMPTS = {
65 | start: `For this conversation, assume the role of the most experience JavaScript developer in the world. We are going to be generating a series of PlayWright interactive end-to-end JavaScript tests, use ESM syntax. I will provide you with HTML in the next message. As part of this conversation, do not generate duplicate tests for the same components, instead find new ones in the given HTML."
66 | You need to create a passing test case with several assertions for that HTML structure, one component at a time. To import the PlayWright interface use the following code: "import { test, expect } from '@playwright/test'". Your task is to create a passing test case for one component at a time. Please do not add any additional text in the response, just return the code!`,
67 | fixTest: `I got an error running the test, please try to fix the code to make the test pass. You likely need to update the assertions to match the expected and please output all of the code for the test file fixed, so I copy it and run it. Don't forget to include PlayWright with "import { test, expect } from '@playwright/test'"`,
68 | giveHTML: `Here is the HTML for a website hosted at ${process.endpoint}, generate comprehensive a PlayWright test file for the first component on this web page, make sure to navigate to the provided url in the test. Include a short name of the component in a few words in the response wrapped in "$$" characters, use snake case format inside of test with a JavaScript comment. If a component is a form, try to interact with the form. If the component includes links, then try to interact with the links.`,
69 | moreComponents: `This is great, let us proceed with an interactive test with several assertions for component that you have not generated a test for already. For example, components could be the navigation bar, the search bar, footer links, the login form. Include a short name of the component in a few words in the response wrapped in "$$" characters, use snake case format inside of test with a JavaScript comment. The HTML is the same as before for a website hosted at ${process.endpoint}:`,
70 | };
71 | let model = process.model;
72 | if (model === "gpt-3") {
73 | model = "gpt-3.5-turbo-0613";
74 | }
75 |
76 | if (model === "claude") {
77 | api = new Claude({
78 | apiKey: process.env["ANTHROPIC_API_KEY"],
79 | });
80 | } else {
81 | api = new ChatGPTAPI({
82 | apiKey: process.env["OPENAI_API_KEY"],
83 | completionParams: {
84 | model: model || "gpt-4",
85 | },
86 | });
87 | }
88 |
89 | await askAi(PROMPTS.start, true);
90 | }
91 |
92 | async function attemptToGetCodeAndComponent(message, name) {
93 | let result = extractCode(message);
94 | if (!result) {
95 | debug("AI returned matched code, :(");
96 | if (message.includes("@playwright/test")) {
97 | result = message;
98 | debug("Trying direct code mode");
99 | }
100 | }
101 | const code = result;
102 | const componentName =
103 | name || extractName(message) || fallbackComponentName(code) || "unknown";
104 | return {
105 | code,
106 | componentName: snakeCase(componentName),
107 | };
108 | }
109 |
110 | async function attemptTestFix(error, componentName) {
111 | let codeFixResult = await askAi(`${PROMPTS.fixTest} ${error}`);
112 | let result = await attemptToGetCodeAndComponent(codeFixResult, componentName);
113 | await writeToFile(componentName, result.code);
114 | return await runPlayWright(componentName);
115 | }
116 |
117 | async function askAi(message, initial) {
118 | debug(`-----`);
119 | debug(`>>>> Asking ${conversationId}: ${message}`);
120 | // send a message and wait for the response
121 | if (SKIP_AI) {
122 | debug(`Skipping AI ask: ${message}`);
123 | return;
124 | }
125 | //debug("conversationId", conversationId);
126 | let res = await api.sendMessage(message, {
127 | parentMessageId: conversationId,
128 | });
129 | if (initial) {
130 | conversationId = res.id;
131 | }
132 | debug("<<<<< AI Response:", res.text);
133 | debug("------");
134 | return res.text;
135 | }
136 |
137 | async function start(observer, ctx, endpoint, numberOfComponents = 1) {
138 | const html = ctx.html;
139 | observer.next("Starting...");
140 | await delay(1000);
141 |
142 | for (let c = 0; c < numberOfComponents; c++) {
143 | observer.next(`Working on component ${c + 1}`);
144 |
145 | let ask = `${PROMPTS.giveHTML} ${html}`;
146 |
147 | if (c > 0) {
148 | ask = `This is great, let us proceed with an interactive test for component that you have not generated a test for already.
149 | For example, components could be the navigation bar, the search bar, footer links, the login form.
150 | Include a short name of the component in a few words in the response wrapped in "$$" characters, use snake case format inside of test with a JavaScript comment.
151 | Components that I already have are ${testsPassing}.
152 | The HTML is the same as before for a website hosted at ${process.endpoint}: ${html}`;
153 | }
154 |
155 | let attempts = 0;
156 | let result =
157 | (await attemptToGetCodeAndComponent(await askAi(ask))) || "test";
158 | await writeToFile(result.componentName, result.code);
159 | let testResult = await runPlayWright(result.componentName);
160 | let currentComponentName = result.componentName;
161 | let failure = testResult.code > 0;
162 | while (failure && attempts <= 1) {
163 | observer.next(
164 | `Fixing tests for component ${c + 1}, attempt ${
165 | attempts + 1
166 | }: ${currentComponentName}`
167 | );
168 | debug("Fix Attempt", attempts);
169 | let error = testResult.stdout;
170 | testResult = await attemptTestFix(error, currentComponentName);
171 | await delay(2000);
172 | failure = testResult.code > 0;
173 | attempts++;
174 | }
175 | if (failure) {
176 | // test failed
177 | debug("Could not fix test", testResult.stdout);
178 | testsFailed.push(`tests/${result.componentName}.spec.js`);
179 | testsFailed = _.uniq(testsFailed);
180 | } else {
181 | testsPassing.push(`tests/${result.componentName}.spec.js`);
182 | testsPassing = _.uniq(testsPassing);
183 | debug("Test Passed!");
184 | }
185 | }
186 |
187 | ctx.testsPassing = testsPassing;
188 | ctx.testsFailed = testsFailed;
189 | observer.complete();
190 | // done
191 | }
192 |
193 | export { start, getHTML, initialPrompt };
194 |
--------------------------------------------------------------------------------
/lib/util.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Extracts name from a $$...$$ string.
3 | * @param {*} inputString
4 | * @returns
5 | */
6 | function extractName(inputString) {
7 | const regex2 = /\$\$(.*?)\$\$/;
8 | const match2 = inputString.match(regex2);
9 | return match2 ? match2[1].trim() : null;
10 | }
11 |
12 | /**
13 | * Extracts code from a ```...``` string.
14 | * @param {*} inputString
15 | * @returns
16 | */
17 | function extractCode(inputString) {
18 | const regex = /(?:```[a-zA-Z]*)([\s\S]*?)(?:```)/;
19 | const match = inputString.match(regex);
20 | return match ? match[1].trim() : null;
21 | }
22 |
23 | /**
24 | * Converts a string to snake case.
25 | * @param {*} string
26 | * @returns
27 | */
28 | const snakeCase = (string) => {
29 | if (!string) {
30 | return null;
31 | }
32 | return string
33 | .replace(/\W+/g, " ")
34 | .split(/ |\B(?=[A-Z])/)
35 | .map((word) => word.toLowerCase())
36 | .join("_");
37 | };
38 |
39 | /**
40 | * Gets a fallback component name from a test string.
41 | * @param {*} input
42 | * @returns
43 | */
44 | function fallbackComponentName(input) {
45 | if (!input) {
46 | return null;
47 | }
48 | const pattern = /test\('(.*)',/;
49 | const match = input.match(pattern);
50 | return match ? match[1].trim() : null;
51 | }
52 |
53 | export { snakeCase, extractName, extractCode, fallbackComponentName };
54 |
--------------------------------------------------------------------------------
/models/claude.js:
--------------------------------------------------------------------------------
1 | import Anthropic from "@anthropic-ai/sdk";
2 |
3 | const constraints =
4 | " Constraints: Do not include pretext or context, only return the answer.";
5 |
6 | class Claude {
7 | constructor(options = {}) {
8 | if (!options.apiKey) {
9 | throw new Error("Missing Claude apiKey");
10 | }
11 | this.anthropic = new Anthropic({
12 | apiKey: options.apiKey,
13 | });
14 | this.prompt = Anthropic.HUMAN_PROMPT;
15 | }
16 | async sendMessage(message) {
17 | // Note: options has messageId
18 | this.prompt += message + constraints;
19 | this.prompt += Anthropic.AI_PROMPT;
20 |
21 | try {
22 | const { completion: answer } = await this.anthropic.completions.create({
23 | model: "claude-2",
24 | stop_sequences: [Anthropic.HUMAN_PROMPT],
25 | max_tokens_to_sample: 300,
26 | prompt: this.prompt,
27 | });
28 |
29 | this.prompt += answer;
30 | this.prompt += Anthropic.HUMAN_PROMPT;
31 |
32 | return {
33 | id: "claude",
34 | text: answer,
35 | };
36 | } catch (error) {
37 | console.error(`Error occurred while processing question: ${error}`);
38 | console.error(error);
39 | }
40 | }
41 | }
42 |
43 | export default Claude;
44 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "playwright-ai",
3 | "version": "1.1.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "playwright-ai",
9 | "version": "1.1.0",
10 | "license": "MIT",
11 | "dependencies": {
12 | "@anthropic-ai/sdk": "^0.5.4",
13 | "axios": "^1.6.2",
14 | "chatgpt": "^5.2.5",
15 | "debug": "^4.3.4",
16 | "execa": "^8.0.1",
17 | "listr": "^0.14.3",
18 | "lodash": "^4.17.21",
19 | "rxjs": "^7.8.1",
20 | "yargs": "^17.7.2"
21 | },
22 | "bin": {
23 | "playwright-ai": "index.js"
24 | },
25 | "devDependencies": {
26 | "prettier": "^3.1.0"
27 | },
28 | "engines": {
29 | "node": ">=20"
30 | }
31 | },
32 | "node_modules/@anthropic-ai/sdk": {
33 | "version": "0.5.4",
34 | "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.5.4.tgz",
35 | "integrity": "sha512-XgBPW1VNwIh3u6rIsY3+cio6Z5kw2nIFxodrM8Y4bQG+nTFaGVX56kTyZkBzDzNkrBl9xnux+iflWCVTebBhBw==",
36 | "dependencies": {
37 | "@types/node": "^18.11.18",
38 | "@types/node-fetch": "^2.6.4",
39 | "@types/qs": "^6.9.7",
40 | "abort-controller": "^3.0.0",
41 | "agentkeepalive": "^4.2.1",
42 | "digest-fetch": "^1.3.0",
43 | "form-data-encoder": "1.7.2",
44 | "formdata-node": "^4.3.2",
45 | "node-fetch": "^2.6.7",
46 | "qs": "^6.10.3"
47 | }
48 | },
49 | "node_modules/@babel/code-frame": {
50 | "version": "7.22.5",
51 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
52 | "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
53 | "dependencies": {
54 | "@babel/highlight": "^7.22.5"
55 | },
56 | "engines": {
57 | "node": ">=6.9.0"
58 | }
59 | },
60 | "node_modules/@babel/helper-validator-identifier": {
61 | "version": "7.22.5",
62 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
63 | "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
64 | "engines": {
65 | "node": ">=6.9.0"
66 | }
67 | },
68 | "node_modules/@babel/highlight": {
69 | "version": "7.22.5",
70 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz",
71 | "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==",
72 | "dependencies": {
73 | "@babel/helper-validator-identifier": "^7.22.5",
74 | "chalk": "^2.0.0",
75 | "js-tokens": "^4.0.0"
76 | },
77 | "engines": {
78 | "node": ">=6.9.0"
79 | }
80 | },
81 | "node_modules/@samverschueren/stream-to-observable": {
82 | "version": "0.3.1",
83 | "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz",
84 | "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==",
85 | "dependencies": {
86 | "any-observable": "^0.3.0"
87 | },
88 | "engines": {
89 | "node": ">=6"
90 | },
91 | "peerDependenciesMeta": {
92 | "rxjs": {
93 | "optional": true
94 | },
95 | "zen-observable": {
96 | "optional": true
97 | }
98 | }
99 | },
100 | "node_modules/@types/node": {
101 | "version": "18.16.19",
102 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.19.tgz",
103 | "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA=="
104 | },
105 | "node_modules/@types/node-fetch": {
106 | "version": "2.6.4",
107 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz",
108 | "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==",
109 | "dependencies": {
110 | "@types/node": "*",
111 | "form-data": "^3.0.0"
112 | }
113 | },
114 | "node_modules/@types/node-fetch/node_modules/form-data": {
115 | "version": "3.0.1",
116 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
117 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
118 | "dependencies": {
119 | "asynckit": "^0.4.0",
120 | "combined-stream": "^1.0.8",
121 | "mime-types": "^2.1.12"
122 | },
123 | "engines": {
124 | "node": ">= 6"
125 | }
126 | },
127 | "node_modules/@types/normalize-package-data": {
128 | "version": "2.4.1",
129 | "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
130 | "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw=="
131 | },
132 | "node_modules/@types/qs": {
133 | "version": "6.9.7",
134 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
135 | "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
136 | },
137 | "node_modules/abort-controller": {
138 | "version": "3.0.0",
139 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
140 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
141 | "dependencies": {
142 | "event-target-shim": "^5.0.0"
143 | },
144 | "engines": {
145 | "node": ">=6.5"
146 | }
147 | },
148 | "node_modules/agentkeepalive": {
149 | "version": "4.3.0",
150 | "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz",
151 | "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==",
152 | "dependencies": {
153 | "debug": "^4.1.0",
154 | "depd": "^2.0.0",
155 | "humanize-ms": "^1.2.1"
156 | },
157 | "engines": {
158 | "node": ">= 8.0.0"
159 | }
160 | },
161 | "node_modules/ajv": {
162 | "version": "8.12.0",
163 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
164 | "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
165 | "dependencies": {
166 | "fast-deep-equal": "^3.1.1",
167 | "json-schema-traverse": "^1.0.0",
168 | "require-from-string": "^2.0.2",
169 | "uri-js": "^4.2.2"
170 | },
171 | "funding": {
172 | "type": "github",
173 | "url": "https://github.com/sponsors/epoberezkin"
174 | }
175 | },
176 | "node_modules/ajv-formats": {
177 | "version": "2.1.1",
178 | "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
179 | "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
180 | "dependencies": {
181 | "ajv": "^8.0.0"
182 | },
183 | "peerDependencies": {
184 | "ajv": "^8.0.0"
185 | },
186 | "peerDependenciesMeta": {
187 | "ajv": {
188 | "optional": true
189 | }
190 | }
191 | },
192 | "node_modules/ansi-escapes": {
193 | "version": "3.2.0",
194 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
195 | "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
196 | "engines": {
197 | "node": ">=4"
198 | }
199 | },
200 | "node_modules/ansi-regex": {
201 | "version": "2.1.1",
202 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
203 | "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
204 | "engines": {
205 | "node": ">=0.10.0"
206 | }
207 | },
208 | "node_modules/ansi-styles": {
209 | "version": "3.2.1",
210 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
211 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
212 | "dependencies": {
213 | "color-convert": "^1.9.0"
214 | },
215 | "engines": {
216 | "node": ">=4"
217 | }
218 | },
219 | "node_modules/any-observable": {
220 | "version": "0.3.0",
221 | "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz",
222 | "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==",
223 | "engines": {
224 | "node": ">=6"
225 | }
226 | },
227 | "node_modules/asynckit": {
228 | "version": "0.4.0",
229 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
230 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
231 | },
232 | "node_modules/atomically": {
233 | "version": "2.0.1",
234 | "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.0.1.tgz",
235 | "integrity": "sha512-sxBhVZUFBFhqSAsYMM3X2oaUi2NVDJ8U026FsIusM8gYXls9AYs/eXzgGrufs1Qjpkxi9zunds+75QUFz+m7UQ==",
236 | "dependencies": {
237 | "stubborn-fs": "^1.2.4",
238 | "when-exit": "^2.0.0"
239 | }
240 | },
241 | "node_modules/axios": {
242 | "version": "1.6.2",
243 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
244 | "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
245 | "dependencies": {
246 | "follow-redirects": "^1.15.0",
247 | "form-data": "^4.0.0",
248 | "proxy-from-env": "^1.1.0"
249 | }
250 | },
251 | "node_modules/base-64": {
252 | "version": "0.1.0",
253 | "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
254 | "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA=="
255 | },
256 | "node_modules/base64-js": {
257 | "version": "1.5.1",
258 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
259 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
260 | "funding": [
261 | {
262 | "type": "github",
263 | "url": "https://github.com/sponsors/feross"
264 | },
265 | {
266 | "type": "patreon",
267 | "url": "https://www.patreon.com/feross"
268 | },
269 | {
270 | "type": "consulting",
271 | "url": "https://feross.org/support"
272 | }
273 | ]
274 | },
275 | "node_modules/cac": {
276 | "version": "6.7.14",
277 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
278 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
279 | "engines": {
280 | "node": ">=8"
281 | }
282 | },
283 | "node_modules/call-bind": {
284 | "version": "1.0.2",
285 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
286 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
287 | "dependencies": {
288 | "function-bind": "^1.1.1",
289 | "get-intrinsic": "^1.0.2"
290 | },
291 | "funding": {
292 | "url": "https://github.com/sponsors/ljharb"
293 | }
294 | },
295 | "node_modules/chalk": {
296 | "version": "2.4.2",
297 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
298 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
299 | "dependencies": {
300 | "ansi-styles": "^3.2.1",
301 | "escape-string-regexp": "^1.0.5",
302 | "supports-color": "^5.3.0"
303 | },
304 | "engines": {
305 | "node": ">=4"
306 | }
307 | },
308 | "node_modules/charenc": {
309 | "version": "0.0.2",
310 | "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
311 | "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
312 | "engines": {
313 | "node": "*"
314 | }
315 | },
316 | "node_modules/chatgpt": {
317 | "version": "5.2.5",
318 | "resolved": "https://registry.npmjs.org/chatgpt/-/chatgpt-5.2.5.tgz",
319 | "integrity": "sha512-DNhBzPb2zTDjJADY44XfngMvsvrvHRq1md2VPXLmnKeP1UCeA1B6pV3s9ZRwlcgjVT0RyM77fRj1xj5V11Vctg==",
320 | "dependencies": {
321 | "cac": "^6.7.14",
322 | "conf": "^11.0.1",
323 | "eventsource-parser": "^1.0.0",
324 | "js-tiktoken": "^1.0.5",
325 | "keyv": "^4.5.2",
326 | "p-timeout": "^6.1.1",
327 | "quick-lru": "^6.1.1",
328 | "read-pkg-up": "^9.1.0",
329 | "uuid": "^9.0.0"
330 | },
331 | "bin": {
332 | "chatgpt": "bin/cli.js"
333 | },
334 | "engines": {
335 | "node": ">=14"
336 | }
337 | },
338 | "node_modules/cli-cursor": {
339 | "version": "2.1.0",
340 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
341 | "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",
342 | "dependencies": {
343 | "restore-cursor": "^2.0.0"
344 | },
345 | "engines": {
346 | "node": ">=4"
347 | }
348 | },
349 | "node_modules/cli-truncate": {
350 | "version": "0.2.1",
351 | "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
352 | "integrity": "sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==",
353 | "dependencies": {
354 | "slice-ansi": "0.0.4",
355 | "string-width": "^1.0.1"
356 | },
357 | "engines": {
358 | "node": ">=0.10.0"
359 | }
360 | },
361 | "node_modules/cliui": {
362 | "version": "8.0.1",
363 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
364 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
365 | "dependencies": {
366 | "string-width": "^4.2.0",
367 | "strip-ansi": "^6.0.1",
368 | "wrap-ansi": "^7.0.0"
369 | },
370 | "engines": {
371 | "node": ">=12"
372 | }
373 | },
374 | "node_modules/cliui/node_modules/ansi-regex": {
375 | "version": "5.0.1",
376 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
377 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
378 | "engines": {
379 | "node": ">=8"
380 | }
381 | },
382 | "node_modules/cliui/node_modules/ansi-styles": {
383 | "version": "4.3.0",
384 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
385 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
386 | "dependencies": {
387 | "color-convert": "^2.0.1"
388 | },
389 | "engines": {
390 | "node": ">=8"
391 | },
392 | "funding": {
393 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
394 | }
395 | },
396 | "node_modules/cliui/node_modules/color-convert": {
397 | "version": "2.0.1",
398 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
399 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
400 | "dependencies": {
401 | "color-name": "~1.1.4"
402 | },
403 | "engines": {
404 | "node": ">=7.0.0"
405 | }
406 | },
407 | "node_modules/cliui/node_modules/color-name": {
408 | "version": "1.1.4",
409 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
410 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
411 | },
412 | "node_modules/cliui/node_modules/is-fullwidth-code-point": {
413 | "version": "3.0.0",
414 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
415 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
416 | "engines": {
417 | "node": ">=8"
418 | }
419 | },
420 | "node_modules/cliui/node_modules/string-width": {
421 | "version": "4.2.3",
422 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
423 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
424 | "dependencies": {
425 | "emoji-regex": "^8.0.0",
426 | "is-fullwidth-code-point": "^3.0.0",
427 | "strip-ansi": "^6.0.1"
428 | },
429 | "engines": {
430 | "node": ">=8"
431 | }
432 | },
433 | "node_modules/cliui/node_modules/strip-ansi": {
434 | "version": "6.0.1",
435 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
436 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
437 | "dependencies": {
438 | "ansi-regex": "^5.0.1"
439 | },
440 | "engines": {
441 | "node": ">=8"
442 | }
443 | },
444 | "node_modules/cliui/node_modules/wrap-ansi": {
445 | "version": "7.0.0",
446 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
447 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
448 | "dependencies": {
449 | "ansi-styles": "^4.0.0",
450 | "string-width": "^4.1.0",
451 | "strip-ansi": "^6.0.0"
452 | },
453 | "engines": {
454 | "node": ">=10"
455 | },
456 | "funding": {
457 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
458 | }
459 | },
460 | "node_modules/code-point-at": {
461 | "version": "1.1.0",
462 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
463 | "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
464 | "engines": {
465 | "node": ">=0.10.0"
466 | }
467 | },
468 | "node_modules/color-convert": {
469 | "version": "1.9.3",
470 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
471 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
472 | "dependencies": {
473 | "color-name": "1.1.3"
474 | }
475 | },
476 | "node_modules/color-name": {
477 | "version": "1.1.3",
478 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
479 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
480 | },
481 | "node_modules/combined-stream": {
482 | "version": "1.0.8",
483 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
484 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
485 | "dependencies": {
486 | "delayed-stream": "~1.0.0"
487 | },
488 | "engines": {
489 | "node": ">= 0.8"
490 | }
491 | },
492 | "node_modules/conf": {
493 | "version": "11.0.1",
494 | "resolved": "https://registry.npmjs.org/conf/-/conf-11.0.1.tgz",
495 | "integrity": "sha512-WlLiQboEjKx0bYx2IIRGedBgNjLAxtwPaCSnsjWPST5xR0DB4q8lcsO/bEH9ZRYNcj63Y9vj/JG/5Fg6uWzI0Q==",
496 | "dependencies": {
497 | "ajv": "^8.12.0",
498 | "ajv-formats": "^2.1.1",
499 | "atomically": "^2.0.0",
500 | "debounce-fn": "^5.1.2",
501 | "dot-prop": "^7.2.0",
502 | "env-paths": "^3.0.0",
503 | "json-schema-typed": "^8.0.1",
504 | "semver": "^7.3.8"
505 | },
506 | "engines": {
507 | "node": ">=14.16"
508 | },
509 | "funding": {
510 | "url": "https://github.com/sponsors/sindresorhus"
511 | }
512 | },
513 | "node_modules/cross-spawn": {
514 | "version": "7.0.3",
515 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
516 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
517 | "dependencies": {
518 | "path-key": "^3.1.0",
519 | "shebang-command": "^2.0.0",
520 | "which": "^2.0.1"
521 | },
522 | "engines": {
523 | "node": ">= 8"
524 | }
525 | },
526 | "node_modules/crypt": {
527 | "version": "0.0.2",
528 | "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
529 | "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
530 | "engines": {
531 | "node": "*"
532 | }
533 | },
534 | "node_modules/date-fns": {
535 | "version": "1.30.1",
536 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
537 | "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw=="
538 | },
539 | "node_modules/debounce-fn": {
540 | "version": "5.1.2",
541 | "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-5.1.2.tgz",
542 | "integrity": "sha512-Sr4SdOZ4vw6eQDvPYNxHogvrxmCIld/VenC5JbNrFwMiwd7lY/Z18ZFfo+EWNG4DD9nFlAujWAo/wGuOPHmy5A==",
543 | "dependencies": {
544 | "mimic-fn": "^4.0.0"
545 | },
546 | "engines": {
547 | "node": ">=12"
548 | },
549 | "funding": {
550 | "url": "https://github.com/sponsors/sindresorhus"
551 | }
552 | },
553 | "node_modules/debug": {
554 | "version": "4.3.4",
555 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
556 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
557 | "dependencies": {
558 | "ms": "2.1.2"
559 | },
560 | "engines": {
561 | "node": ">=6.0"
562 | },
563 | "peerDependenciesMeta": {
564 | "supports-color": {
565 | "optional": true
566 | }
567 | }
568 | },
569 | "node_modules/delayed-stream": {
570 | "version": "1.0.0",
571 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
572 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
573 | "engines": {
574 | "node": ">=0.4.0"
575 | }
576 | },
577 | "node_modules/depd": {
578 | "version": "2.0.0",
579 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
580 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
581 | "engines": {
582 | "node": ">= 0.8"
583 | }
584 | },
585 | "node_modules/digest-fetch": {
586 | "version": "1.3.0",
587 | "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz",
588 | "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==",
589 | "dependencies": {
590 | "base-64": "^0.1.0",
591 | "md5": "^2.3.0"
592 | }
593 | },
594 | "node_modules/dot-prop": {
595 | "version": "7.2.0",
596 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-7.2.0.tgz",
597 | "integrity": "sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==",
598 | "dependencies": {
599 | "type-fest": "^2.11.2"
600 | },
601 | "engines": {
602 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
603 | },
604 | "funding": {
605 | "url": "https://github.com/sponsors/sindresorhus"
606 | }
607 | },
608 | "node_modules/elegant-spinner": {
609 | "version": "1.0.1",
610 | "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
611 | "integrity": "sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==",
612 | "engines": {
613 | "node": ">=0.10.0"
614 | }
615 | },
616 | "node_modules/emoji-regex": {
617 | "version": "8.0.0",
618 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
619 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
620 | },
621 | "node_modules/env-paths": {
622 | "version": "3.0.0",
623 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz",
624 | "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==",
625 | "engines": {
626 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
627 | },
628 | "funding": {
629 | "url": "https://github.com/sponsors/sindresorhus"
630 | }
631 | },
632 | "node_modules/error-ex": {
633 | "version": "1.3.2",
634 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
635 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
636 | "dependencies": {
637 | "is-arrayish": "^0.2.1"
638 | }
639 | },
640 | "node_modules/escalade": {
641 | "version": "3.1.1",
642 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
643 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
644 | "engines": {
645 | "node": ">=6"
646 | }
647 | },
648 | "node_modules/escape-string-regexp": {
649 | "version": "1.0.5",
650 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
651 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
652 | "engines": {
653 | "node": ">=0.8.0"
654 | }
655 | },
656 | "node_modules/event-target-shim": {
657 | "version": "5.0.1",
658 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
659 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
660 | "engines": {
661 | "node": ">=6"
662 | }
663 | },
664 | "node_modules/eventsource-parser": {
665 | "version": "1.0.0",
666 | "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.0.0.tgz",
667 | "integrity": "sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==",
668 | "engines": {
669 | "node": ">=14.18"
670 | }
671 | },
672 | "node_modules/execa": {
673 | "version": "8.0.1",
674 | "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
675 | "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
676 | "dependencies": {
677 | "cross-spawn": "^7.0.3",
678 | "get-stream": "^8.0.1",
679 | "human-signals": "^5.0.0",
680 | "is-stream": "^3.0.0",
681 | "merge-stream": "^2.0.0",
682 | "npm-run-path": "^5.1.0",
683 | "onetime": "^6.0.0",
684 | "signal-exit": "^4.1.0",
685 | "strip-final-newline": "^3.0.0"
686 | },
687 | "engines": {
688 | "node": ">=16.17"
689 | },
690 | "funding": {
691 | "url": "https://github.com/sindresorhus/execa?sponsor=1"
692 | }
693 | },
694 | "node_modules/execa/node_modules/is-stream": {
695 | "version": "3.0.0",
696 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
697 | "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
698 | "engines": {
699 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
700 | },
701 | "funding": {
702 | "url": "https://github.com/sponsors/sindresorhus"
703 | }
704 | },
705 | "node_modules/execa/node_modules/onetime": {
706 | "version": "6.0.0",
707 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
708 | "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
709 | "dependencies": {
710 | "mimic-fn": "^4.0.0"
711 | },
712 | "engines": {
713 | "node": ">=12"
714 | },
715 | "funding": {
716 | "url": "https://github.com/sponsors/sindresorhus"
717 | }
718 | },
719 | "node_modules/execa/node_modules/signal-exit": {
720 | "version": "4.1.0",
721 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
722 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
723 | "engines": {
724 | "node": ">=14"
725 | },
726 | "funding": {
727 | "url": "https://github.com/sponsors/isaacs"
728 | }
729 | },
730 | "node_modules/fast-deep-equal": {
731 | "version": "3.1.3",
732 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
733 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
734 | },
735 | "node_modules/figures": {
736 | "version": "1.7.0",
737 | "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
738 | "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==",
739 | "dependencies": {
740 | "escape-string-regexp": "^1.0.5",
741 | "object-assign": "^4.1.0"
742 | },
743 | "engines": {
744 | "node": ">=0.10.0"
745 | }
746 | },
747 | "node_modules/find-up": {
748 | "version": "6.3.0",
749 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
750 | "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
751 | "dependencies": {
752 | "locate-path": "^7.1.0",
753 | "path-exists": "^5.0.0"
754 | },
755 | "engines": {
756 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
757 | },
758 | "funding": {
759 | "url": "https://github.com/sponsors/sindresorhus"
760 | }
761 | },
762 | "node_modules/follow-redirects": {
763 | "version": "1.15.2",
764 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
765 | "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
766 | "funding": [
767 | {
768 | "type": "individual",
769 | "url": "https://github.com/sponsors/RubenVerborgh"
770 | }
771 | ],
772 | "engines": {
773 | "node": ">=4.0"
774 | },
775 | "peerDependenciesMeta": {
776 | "debug": {
777 | "optional": true
778 | }
779 | }
780 | },
781 | "node_modules/form-data": {
782 | "version": "4.0.0",
783 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
784 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
785 | "dependencies": {
786 | "asynckit": "^0.4.0",
787 | "combined-stream": "^1.0.8",
788 | "mime-types": "^2.1.12"
789 | },
790 | "engines": {
791 | "node": ">= 6"
792 | }
793 | },
794 | "node_modules/form-data-encoder": {
795 | "version": "1.7.2",
796 | "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz",
797 | "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A=="
798 | },
799 | "node_modules/formdata-node": {
800 | "version": "4.4.1",
801 | "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
802 | "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==",
803 | "dependencies": {
804 | "node-domexception": "1.0.0",
805 | "web-streams-polyfill": "4.0.0-beta.3"
806 | },
807 | "engines": {
808 | "node": ">= 12.20"
809 | }
810 | },
811 | "node_modules/function-bind": {
812 | "version": "1.1.1",
813 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
814 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
815 | },
816 | "node_modules/get-caller-file": {
817 | "version": "2.0.5",
818 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
819 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
820 | "engines": {
821 | "node": "6.* || 8.* || >= 10.*"
822 | }
823 | },
824 | "node_modules/get-intrinsic": {
825 | "version": "1.2.1",
826 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
827 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
828 | "dependencies": {
829 | "function-bind": "^1.1.1",
830 | "has": "^1.0.3",
831 | "has-proto": "^1.0.1",
832 | "has-symbols": "^1.0.3"
833 | },
834 | "funding": {
835 | "url": "https://github.com/sponsors/ljharb"
836 | }
837 | },
838 | "node_modules/get-stream": {
839 | "version": "8.0.1",
840 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
841 | "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
842 | "engines": {
843 | "node": ">=16"
844 | },
845 | "funding": {
846 | "url": "https://github.com/sponsors/sindresorhus"
847 | }
848 | },
849 | "node_modules/has": {
850 | "version": "1.0.3",
851 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
852 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
853 | "dependencies": {
854 | "function-bind": "^1.1.1"
855 | },
856 | "engines": {
857 | "node": ">= 0.4.0"
858 | }
859 | },
860 | "node_modules/has-ansi": {
861 | "version": "2.0.0",
862 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
863 | "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
864 | "dependencies": {
865 | "ansi-regex": "^2.0.0"
866 | },
867 | "engines": {
868 | "node": ">=0.10.0"
869 | }
870 | },
871 | "node_modules/has-flag": {
872 | "version": "3.0.0",
873 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
874 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
875 | "engines": {
876 | "node": ">=4"
877 | }
878 | },
879 | "node_modules/has-proto": {
880 | "version": "1.0.1",
881 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
882 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
883 | "engines": {
884 | "node": ">= 0.4"
885 | },
886 | "funding": {
887 | "url": "https://github.com/sponsors/ljharb"
888 | }
889 | },
890 | "node_modules/has-symbols": {
891 | "version": "1.0.3",
892 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
893 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
894 | "engines": {
895 | "node": ">= 0.4"
896 | },
897 | "funding": {
898 | "url": "https://github.com/sponsors/ljharb"
899 | }
900 | },
901 | "node_modules/hosted-git-info": {
902 | "version": "4.1.0",
903 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
904 | "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
905 | "dependencies": {
906 | "lru-cache": "^6.0.0"
907 | },
908 | "engines": {
909 | "node": ">=10"
910 | }
911 | },
912 | "node_modules/human-signals": {
913 | "version": "5.0.0",
914 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
915 | "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
916 | "engines": {
917 | "node": ">=16.17.0"
918 | }
919 | },
920 | "node_modules/humanize-ms": {
921 | "version": "1.2.1",
922 | "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
923 | "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
924 | "dependencies": {
925 | "ms": "^2.0.0"
926 | }
927 | },
928 | "node_modules/indent-string": {
929 | "version": "3.2.0",
930 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
931 | "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==",
932 | "engines": {
933 | "node": ">=4"
934 | }
935 | },
936 | "node_modules/is-arrayish": {
937 | "version": "0.2.1",
938 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
939 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
940 | },
941 | "node_modules/is-buffer": {
942 | "version": "1.1.6",
943 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
944 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
945 | },
946 | "node_modules/is-core-module": {
947 | "version": "2.12.1",
948 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
949 | "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
950 | "dependencies": {
951 | "has": "^1.0.3"
952 | },
953 | "funding": {
954 | "url": "https://github.com/sponsors/ljharb"
955 | }
956 | },
957 | "node_modules/is-fullwidth-code-point": {
958 | "version": "1.0.0",
959 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
960 | "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
961 | "dependencies": {
962 | "number-is-nan": "^1.0.0"
963 | },
964 | "engines": {
965 | "node": ">=0.10.0"
966 | }
967 | },
968 | "node_modules/is-observable": {
969 | "version": "1.1.0",
970 | "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz",
971 | "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==",
972 | "dependencies": {
973 | "symbol-observable": "^1.1.0"
974 | },
975 | "engines": {
976 | "node": ">=4"
977 | }
978 | },
979 | "node_modules/is-promise": {
980 | "version": "2.2.2",
981 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
982 | "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
983 | },
984 | "node_modules/is-stream": {
985 | "version": "1.1.0",
986 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
987 | "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
988 | "engines": {
989 | "node": ">=0.10.0"
990 | }
991 | },
992 | "node_modules/isexe": {
993 | "version": "2.0.0",
994 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
995 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
996 | },
997 | "node_modules/js-tiktoken": {
998 | "version": "1.0.7",
999 | "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.7.tgz",
1000 | "integrity": "sha512-biba8u/clw7iesNEWLOLwrNGoBP2lA+hTaBLs/D45pJdUPFXyxD6nhcDVtADChghv4GgyAiMKYMiRx7x6h7Biw==",
1001 | "dependencies": {
1002 | "base64-js": "^1.5.1"
1003 | }
1004 | },
1005 | "node_modules/js-tokens": {
1006 | "version": "4.0.0",
1007 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1008 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1009 | },
1010 | "node_modules/json-buffer": {
1011 | "version": "3.0.1",
1012 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
1013 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
1014 | },
1015 | "node_modules/json-parse-even-better-errors": {
1016 | "version": "2.3.1",
1017 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
1018 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
1019 | },
1020 | "node_modules/json-schema-traverse": {
1021 | "version": "1.0.0",
1022 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
1023 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
1024 | },
1025 | "node_modules/json-schema-typed": {
1026 | "version": "8.0.1",
1027 | "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.1.tgz",
1028 | "integrity": "sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg=="
1029 | },
1030 | "node_modules/keyv": {
1031 | "version": "4.5.2",
1032 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz",
1033 | "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==",
1034 | "dependencies": {
1035 | "json-buffer": "3.0.1"
1036 | }
1037 | },
1038 | "node_modules/lines-and-columns": {
1039 | "version": "1.2.4",
1040 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
1041 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
1042 | },
1043 | "node_modules/listr": {
1044 | "version": "0.14.3",
1045 | "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz",
1046 | "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==",
1047 | "dependencies": {
1048 | "@samverschueren/stream-to-observable": "^0.3.0",
1049 | "is-observable": "^1.1.0",
1050 | "is-promise": "^2.1.0",
1051 | "is-stream": "^1.1.0",
1052 | "listr-silent-renderer": "^1.1.1",
1053 | "listr-update-renderer": "^0.5.0",
1054 | "listr-verbose-renderer": "^0.5.0",
1055 | "p-map": "^2.0.0",
1056 | "rxjs": "^6.3.3"
1057 | },
1058 | "engines": {
1059 | "node": ">=6"
1060 | }
1061 | },
1062 | "node_modules/listr-silent-renderer": {
1063 | "version": "1.1.1",
1064 | "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
1065 | "integrity": "sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==",
1066 | "engines": {
1067 | "node": ">=4"
1068 | }
1069 | },
1070 | "node_modules/listr-update-renderer": {
1071 | "version": "0.5.0",
1072 | "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz",
1073 | "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==",
1074 | "dependencies": {
1075 | "chalk": "^1.1.3",
1076 | "cli-truncate": "^0.2.1",
1077 | "elegant-spinner": "^1.0.1",
1078 | "figures": "^1.7.0",
1079 | "indent-string": "^3.0.0",
1080 | "log-symbols": "^1.0.2",
1081 | "log-update": "^2.3.0",
1082 | "strip-ansi": "^3.0.1"
1083 | },
1084 | "engines": {
1085 | "node": ">=6"
1086 | },
1087 | "peerDependencies": {
1088 | "listr": "^0.14.2"
1089 | }
1090 | },
1091 | "node_modules/listr-update-renderer/node_modules/ansi-styles": {
1092 | "version": "2.2.1",
1093 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
1094 | "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
1095 | "engines": {
1096 | "node": ">=0.10.0"
1097 | }
1098 | },
1099 | "node_modules/listr-update-renderer/node_modules/chalk": {
1100 | "version": "1.1.3",
1101 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
1102 | "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
1103 | "dependencies": {
1104 | "ansi-styles": "^2.2.1",
1105 | "escape-string-regexp": "^1.0.2",
1106 | "has-ansi": "^2.0.0",
1107 | "strip-ansi": "^3.0.0",
1108 | "supports-color": "^2.0.0"
1109 | },
1110 | "engines": {
1111 | "node": ">=0.10.0"
1112 | }
1113 | },
1114 | "node_modules/listr-update-renderer/node_modules/supports-color": {
1115 | "version": "2.0.0",
1116 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1117 | "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
1118 | "engines": {
1119 | "node": ">=0.8.0"
1120 | }
1121 | },
1122 | "node_modules/listr-verbose-renderer": {
1123 | "version": "0.5.0",
1124 | "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz",
1125 | "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==",
1126 | "dependencies": {
1127 | "chalk": "^2.4.1",
1128 | "cli-cursor": "^2.1.0",
1129 | "date-fns": "^1.27.2",
1130 | "figures": "^2.0.0"
1131 | },
1132 | "engines": {
1133 | "node": ">=4"
1134 | }
1135 | },
1136 | "node_modules/listr-verbose-renderer/node_modules/figures": {
1137 | "version": "2.0.0",
1138 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
1139 | "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==",
1140 | "dependencies": {
1141 | "escape-string-regexp": "^1.0.5"
1142 | },
1143 | "engines": {
1144 | "node": ">=4"
1145 | }
1146 | },
1147 | "node_modules/listr/node_modules/rxjs": {
1148 | "version": "6.6.7",
1149 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
1150 | "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
1151 | "dependencies": {
1152 | "tslib": "^1.9.0"
1153 | },
1154 | "engines": {
1155 | "npm": ">=2.0.0"
1156 | }
1157 | },
1158 | "node_modules/listr/node_modules/tslib": {
1159 | "version": "1.14.1",
1160 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
1161 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
1162 | },
1163 | "node_modules/locate-path": {
1164 | "version": "7.2.0",
1165 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
1166 | "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
1167 | "dependencies": {
1168 | "p-locate": "^6.0.0"
1169 | },
1170 | "engines": {
1171 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1172 | },
1173 | "funding": {
1174 | "url": "https://github.com/sponsors/sindresorhus"
1175 | }
1176 | },
1177 | "node_modules/lodash": {
1178 | "version": "4.17.21",
1179 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
1180 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
1181 | },
1182 | "node_modules/log-symbols": {
1183 | "version": "1.0.2",
1184 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
1185 | "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==",
1186 | "dependencies": {
1187 | "chalk": "^1.0.0"
1188 | },
1189 | "engines": {
1190 | "node": ">=0.10.0"
1191 | }
1192 | },
1193 | "node_modules/log-symbols/node_modules/ansi-styles": {
1194 | "version": "2.2.1",
1195 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
1196 | "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
1197 | "engines": {
1198 | "node": ">=0.10.0"
1199 | }
1200 | },
1201 | "node_modules/log-symbols/node_modules/chalk": {
1202 | "version": "1.1.3",
1203 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
1204 | "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
1205 | "dependencies": {
1206 | "ansi-styles": "^2.2.1",
1207 | "escape-string-regexp": "^1.0.2",
1208 | "has-ansi": "^2.0.0",
1209 | "strip-ansi": "^3.0.0",
1210 | "supports-color": "^2.0.0"
1211 | },
1212 | "engines": {
1213 | "node": ">=0.10.0"
1214 | }
1215 | },
1216 | "node_modules/log-symbols/node_modules/supports-color": {
1217 | "version": "2.0.0",
1218 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1219 | "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
1220 | "engines": {
1221 | "node": ">=0.8.0"
1222 | }
1223 | },
1224 | "node_modules/log-update": {
1225 | "version": "2.3.0",
1226 | "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz",
1227 | "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==",
1228 | "dependencies": {
1229 | "ansi-escapes": "^3.0.0",
1230 | "cli-cursor": "^2.0.0",
1231 | "wrap-ansi": "^3.0.1"
1232 | },
1233 | "engines": {
1234 | "node": ">=4"
1235 | }
1236 | },
1237 | "node_modules/lru-cache": {
1238 | "version": "6.0.0",
1239 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
1240 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
1241 | "dependencies": {
1242 | "yallist": "^4.0.0"
1243 | },
1244 | "engines": {
1245 | "node": ">=10"
1246 | }
1247 | },
1248 | "node_modules/md5": {
1249 | "version": "2.3.0",
1250 | "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
1251 | "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
1252 | "dependencies": {
1253 | "charenc": "0.0.2",
1254 | "crypt": "0.0.2",
1255 | "is-buffer": "~1.1.6"
1256 | }
1257 | },
1258 | "node_modules/merge-stream": {
1259 | "version": "2.0.0",
1260 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
1261 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
1262 | },
1263 | "node_modules/mime-db": {
1264 | "version": "1.52.0",
1265 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1266 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
1267 | "engines": {
1268 | "node": ">= 0.6"
1269 | }
1270 | },
1271 | "node_modules/mime-types": {
1272 | "version": "2.1.35",
1273 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1274 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1275 | "dependencies": {
1276 | "mime-db": "1.52.0"
1277 | },
1278 | "engines": {
1279 | "node": ">= 0.6"
1280 | }
1281 | },
1282 | "node_modules/mimic-fn": {
1283 | "version": "4.0.0",
1284 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
1285 | "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
1286 | "engines": {
1287 | "node": ">=12"
1288 | },
1289 | "funding": {
1290 | "url": "https://github.com/sponsors/sindresorhus"
1291 | }
1292 | },
1293 | "node_modules/ms": {
1294 | "version": "2.1.2",
1295 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1296 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1297 | },
1298 | "node_modules/node-domexception": {
1299 | "version": "1.0.0",
1300 | "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
1301 | "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
1302 | "funding": [
1303 | {
1304 | "type": "github",
1305 | "url": "https://github.com/sponsors/jimmywarting"
1306 | },
1307 | {
1308 | "type": "github",
1309 | "url": "https://paypal.me/jimmywarting"
1310 | }
1311 | ],
1312 | "engines": {
1313 | "node": ">=10.5.0"
1314 | }
1315 | },
1316 | "node_modules/node-fetch": {
1317 | "version": "2.6.12",
1318 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz",
1319 | "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==",
1320 | "dependencies": {
1321 | "whatwg-url": "^5.0.0"
1322 | },
1323 | "engines": {
1324 | "node": "4.x || >=6.0.0"
1325 | },
1326 | "peerDependencies": {
1327 | "encoding": "^0.1.0"
1328 | },
1329 | "peerDependenciesMeta": {
1330 | "encoding": {
1331 | "optional": true
1332 | }
1333 | }
1334 | },
1335 | "node_modules/normalize-package-data": {
1336 | "version": "3.0.3",
1337 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
1338 | "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
1339 | "dependencies": {
1340 | "hosted-git-info": "^4.0.1",
1341 | "is-core-module": "^2.5.0",
1342 | "semver": "^7.3.4",
1343 | "validate-npm-package-license": "^3.0.1"
1344 | },
1345 | "engines": {
1346 | "node": ">=10"
1347 | }
1348 | },
1349 | "node_modules/npm-run-path": {
1350 | "version": "5.1.0",
1351 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
1352 | "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
1353 | "dependencies": {
1354 | "path-key": "^4.0.0"
1355 | },
1356 | "engines": {
1357 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1358 | },
1359 | "funding": {
1360 | "url": "https://github.com/sponsors/sindresorhus"
1361 | }
1362 | },
1363 | "node_modules/npm-run-path/node_modules/path-key": {
1364 | "version": "4.0.0",
1365 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
1366 | "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
1367 | "engines": {
1368 | "node": ">=12"
1369 | },
1370 | "funding": {
1371 | "url": "https://github.com/sponsors/sindresorhus"
1372 | }
1373 | },
1374 | "node_modules/number-is-nan": {
1375 | "version": "1.0.1",
1376 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1377 | "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
1378 | "engines": {
1379 | "node": ">=0.10.0"
1380 | }
1381 | },
1382 | "node_modules/object-assign": {
1383 | "version": "4.1.1",
1384 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1385 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1386 | "engines": {
1387 | "node": ">=0.10.0"
1388 | }
1389 | },
1390 | "node_modules/object-inspect": {
1391 | "version": "1.12.3",
1392 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
1393 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
1394 | "funding": {
1395 | "url": "https://github.com/sponsors/ljharb"
1396 | }
1397 | },
1398 | "node_modules/onetime": {
1399 | "version": "2.0.1",
1400 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
1401 | "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==",
1402 | "dependencies": {
1403 | "mimic-fn": "^1.0.0"
1404 | },
1405 | "engines": {
1406 | "node": ">=4"
1407 | }
1408 | },
1409 | "node_modules/onetime/node_modules/mimic-fn": {
1410 | "version": "1.2.0",
1411 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
1412 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
1413 | "engines": {
1414 | "node": ">=4"
1415 | }
1416 | },
1417 | "node_modules/p-limit": {
1418 | "version": "4.0.0",
1419 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
1420 | "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
1421 | "dependencies": {
1422 | "yocto-queue": "^1.0.0"
1423 | },
1424 | "engines": {
1425 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1426 | },
1427 | "funding": {
1428 | "url": "https://github.com/sponsors/sindresorhus"
1429 | }
1430 | },
1431 | "node_modules/p-locate": {
1432 | "version": "6.0.0",
1433 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
1434 | "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
1435 | "dependencies": {
1436 | "p-limit": "^4.0.0"
1437 | },
1438 | "engines": {
1439 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1440 | },
1441 | "funding": {
1442 | "url": "https://github.com/sponsors/sindresorhus"
1443 | }
1444 | },
1445 | "node_modules/p-map": {
1446 | "version": "2.1.0",
1447 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
1448 | "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
1449 | "engines": {
1450 | "node": ">=6"
1451 | }
1452 | },
1453 | "node_modules/p-timeout": {
1454 | "version": "6.1.2",
1455 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz",
1456 | "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==",
1457 | "engines": {
1458 | "node": ">=14.16"
1459 | },
1460 | "funding": {
1461 | "url": "https://github.com/sponsors/sindresorhus"
1462 | }
1463 | },
1464 | "node_modules/parse-json": {
1465 | "version": "5.2.0",
1466 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
1467 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
1468 | "dependencies": {
1469 | "@babel/code-frame": "^7.0.0",
1470 | "error-ex": "^1.3.1",
1471 | "json-parse-even-better-errors": "^2.3.0",
1472 | "lines-and-columns": "^1.1.6"
1473 | },
1474 | "engines": {
1475 | "node": ">=8"
1476 | },
1477 | "funding": {
1478 | "url": "https://github.com/sponsors/sindresorhus"
1479 | }
1480 | },
1481 | "node_modules/path-exists": {
1482 | "version": "5.0.0",
1483 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
1484 | "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
1485 | "engines": {
1486 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1487 | }
1488 | },
1489 | "node_modules/path-key": {
1490 | "version": "3.1.1",
1491 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1492 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1493 | "engines": {
1494 | "node": ">=8"
1495 | }
1496 | },
1497 | "node_modules/prettier": {
1498 | "version": "3.1.0",
1499 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz",
1500 | "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==",
1501 | "dev": true,
1502 | "bin": {
1503 | "prettier": "bin/prettier.cjs"
1504 | },
1505 | "engines": {
1506 | "node": ">=14"
1507 | },
1508 | "funding": {
1509 | "url": "https://github.com/prettier/prettier?sponsor=1"
1510 | }
1511 | },
1512 | "node_modules/proxy-from-env": {
1513 | "version": "1.1.0",
1514 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
1515 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
1516 | },
1517 | "node_modules/punycode": {
1518 | "version": "2.3.0",
1519 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
1520 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
1521 | "engines": {
1522 | "node": ">=6"
1523 | }
1524 | },
1525 | "node_modules/qs": {
1526 | "version": "6.11.2",
1527 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
1528 | "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
1529 | "dependencies": {
1530 | "side-channel": "^1.0.4"
1531 | },
1532 | "engines": {
1533 | "node": ">=0.6"
1534 | },
1535 | "funding": {
1536 | "url": "https://github.com/sponsors/ljharb"
1537 | }
1538 | },
1539 | "node_modules/quick-lru": {
1540 | "version": "6.1.1",
1541 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.1.tgz",
1542 | "integrity": "sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==",
1543 | "engines": {
1544 | "node": ">=12"
1545 | },
1546 | "funding": {
1547 | "url": "https://github.com/sponsors/sindresorhus"
1548 | }
1549 | },
1550 | "node_modules/read-pkg": {
1551 | "version": "7.1.0",
1552 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz",
1553 | "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==",
1554 | "dependencies": {
1555 | "@types/normalize-package-data": "^2.4.1",
1556 | "normalize-package-data": "^3.0.2",
1557 | "parse-json": "^5.2.0",
1558 | "type-fest": "^2.0.0"
1559 | },
1560 | "engines": {
1561 | "node": ">=12.20"
1562 | },
1563 | "funding": {
1564 | "url": "https://github.com/sponsors/sindresorhus"
1565 | }
1566 | },
1567 | "node_modules/read-pkg-up": {
1568 | "version": "9.1.0",
1569 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz",
1570 | "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==",
1571 | "dependencies": {
1572 | "find-up": "^6.3.0",
1573 | "read-pkg": "^7.1.0",
1574 | "type-fest": "^2.5.0"
1575 | },
1576 | "engines": {
1577 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1578 | },
1579 | "funding": {
1580 | "url": "https://github.com/sponsors/sindresorhus"
1581 | }
1582 | },
1583 | "node_modules/require-directory": {
1584 | "version": "2.1.1",
1585 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1586 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
1587 | "engines": {
1588 | "node": ">=0.10.0"
1589 | }
1590 | },
1591 | "node_modules/require-from-string": {
1592 | "version": "2.0.2",
1593 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
1594 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
1595 | "engines": {
1596 | "node": ">=0.10.0"
1597 | }
1598 | },
1599 | "node_modules/restore-cursor": {
1600 | "version": "2.0.0",
1601 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
1602 | "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==",
1603 | "dependencies": {
1604 | "onetime": "^2.0.0",
1605 | "signal-exit": "^3.0.2"
1606 | },
1607 | "engines": {
1608 | "node": ">=4"
1609 | }
1610 | },
1611 | "node_modules/rxjs": {
1612 | "version": "7.8.1",
1613 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
1614 | "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
1615 | "dependencies": {
1616 | "tslib": "^2.1.0"
1617 | }
1618 | },
1619 | "node_modules/semver": {
1620 | "version": "7.5.4",
1621 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
1622 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
1623 | "dependencies": {
1624 | "lru-cache": "^6.0.0"
1625 | },
1626 | "bin": {
1627 | "semver": "bin/semver.js"
1628 | },
1629 | "engines": {
1630 | "node": ">=10"
1631 | }
1632 | },
1633 | "node_modules/shebang-command": {
1634 | "version": "2.0.0",
1635 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1636 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1637 | "dependencies": {
1638 | "shebang-regex": "^3.0.0"
1639 | },
1640 | "engines": {
1641 | "node": ">=8"
1642 | }
1643 | },
1644 | "node_modules/shebang-regex": {
1645 | "version": "3.0.0",
1646 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1647 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1648 | "engines": {
1649 | "node": ">=8"
1650 | }
1651 | },
1652 | "node_modules/side-channel": {
1653 | "version": "1.0.4",
1654 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1655 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1656 | "dependencies": {
1657 | "call-bind": "^1.0.0",
1658 | "get-intrinsic": "^1.0.2",
1659 | "object-inspect": "^1.9.0"
1660 | },
1661 | "funding": {
1662 | "url": "https://github.com/sponsors/ljharb"
1663 | }
1664 | },
1665 | "node_modules/signal-exit": {
1666 | "version": "3.0.7",
1667 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
1668 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
1669 | },
1670 | "node_modules/slice-ansi": {
1671 | "version": "0.0.4",
1672 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
1673 | "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==",
1674 | "engines": {
1675 | "node": ">=0.10.0"
1676 | }
1677 | },
1678 | "node_modules/spdx-correct": {
1679 | "version": "3.2.0",
1680 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
1681 | "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
1682 | "dependencies": {
1683 | "spdx-expression-parse": "^3.0.0",
1684 | "spdx-license-ids": "^3.0.0"
1685 | }
1686 | },
1687 | "node_modules/spdx-exceptions": {
1688 | "version": "2.3.0",
1689 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
1690 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
1691 | },
1692 | "node_modules/spdx-expression-parse": {
1693 | "version": "3.0.1",
1694 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
1695 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
1696 | "dependencies": {
1697 | "spdx-exceptions": "^2.1.0",
1698 | "spdx-license-ids": "^3.0.0"
1699 | }
1700 | },
1701 | "node_modules/spdx-license-ids": {
1702 | "version": "3.0.13",
1703 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
1704 | "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w=="
1705 | },
1706 | "node_modules/string-width": {
1707 | "version": "1.0.2",
1708 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
1709 | "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
1710 | "dependencies": {
1711 | "code-point-at": "^1.0.0",
1712 | "is-fullwidth-code-point": "^1.0.0",
1713 | "strip-ansi": "^3.0.0"
1714 | },
1715 | "engines": {
1716 | "node": ">=0.10.0"
1717 | }
1718 | },
1719 | "node_modules/strip-ansi": {
1720 | "version": "3.0.1",
1721 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1722 | "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
1723 | "dependencies": {
1724 | "ansi-regex": "^2.0.0"
1725 | },
1726 | "engines": {
1727 | "node": ">=0.10.0"
1728 | }
1729 | },
1730 | "node_modules/strip-final-newline": {
1731 | "version": "3.0.0",
1732 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
1733 | "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
1734 | "engines": {
1735 | "node": ">=12"
1736 | },
1737 | "funding": {
1738 | "url": "https://github.com/sponsors/sindresorhus"
1739 | }
1740 | },
1741 | "node_modules/stubborn-fs": {
1742 | "version": "1.2.4",
1743 | "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-1.2.4.tgz",
1744 | "integrity": "sha512-KRa4nIRJ8q6uApQbPwYZVhOof8979fw4xbajBWa5kPJFa4nyY3aFaMWVyIVCDnkNCCG/3HLipUZ4QaNlYsmX1w=="
1745 | },
1746 | "node_modules/supports-color": {
1747 | "version": "5.5.0",
1748 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1749 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1750 | "dependencies": {
1751 | "has-flag": "^3.0.0"
1752 | },
1753 | "engines": {
1754 | "node": ">=4"
1755 | }
1756 | },
1757 | "node_modules/symbol-observable": {
1758 | "version": "1.2.0",
1759 | "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
1760 | "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
1761 | "engines": {
1762 | "node": ">=0.10.0"
1763 | }
1764 | },
1765 | "node_modules/tr46": {
1766 | "version": "0.0.3",
1767 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1768 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
1769 | },
1770 | "node_modules/tslib": {
1771 | "version": "2.6.0",
1772 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz",
1773 | "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA=="
1774 | },
1775 | "node_modules/type-fest": {
1776 | "version": "2.19.0",
1777 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
1778 | "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
1779 | "engines": {
1780 | "node": ">=12.20"
1781 | },
1782 | "funding": {
1783 | "url": "https://github.com/sponsors/sindresorhus"
1784 | }
1785 | },
1786 | "node_modules/uri-js": {
1787 | "version": "4.4.1",
1788 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
1789 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
1790 | "dependencies": {
1791 | "punycode": "^2.1.0"
1792 | }
1793 | },
1794 | "node_modules/uuid": {
1795 | "version": "9.0.0",
1796 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
1797 | "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
1798 | "bin": {
1799 | "uuid": "dist/bin/uuid"
1800 | }
1801 | },
1802 | "node_modules/validate-npm-package-license": {
1803 | "version": "3.0.4",
1804 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
1805 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
1806 | "dependencies": {
1807 | "spdx-correct": "^3.0.0",
1808 | "spdx-expression-parse": "^3.0.0"
1809 | }
1810 | },
1811 | "node_modules/web-streams-polyfill": {
1812 | "version": "4.0.0-beta.3",
1813 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz",
1814 | "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==",
1815 | "engines": {
1816 | "node": ">= 14"
1817 | }
1818 | },
1819 | "node_modules/webidl-conversions": {
1820 | "version": "3.0.1",
1821 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1822 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
1823 | },
1824 | "node_modules/whatwg-url": {
1825 | "version": "5.0.0",
1826 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1827 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
1828 | "dependencies": {
1829 | "tr46": "~0.0.3",
1830 | "webidl-conversions": "^3.0.0"
1831 | }
1832 | },
1833 | "node_modules/when-exit": {
1834 | "version": "2.1.0",
1835 | "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.0.tgz",
1836 | "integrity": "sha512-H85ulNwUBU1e6PGxkWUDgxnbohSXD++ah6Xw1VHAN7CtypcbZaC4aYjQ+C2PMVaDkURDuOinNAT+Lnz3utWXxQ=="
1837 | },
1838 | "node_modules/which": {
1839 | "version": "2.0.2",
1840 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1841 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1842 | "dependencies": {
1843 | "isexe": "^2.0.0"
1844 | },
1845 | "bin": {
1846 | "node-which": "bin/node-which"
1847 | },
1848 | "engines": {
1849 | "node": ">= 8"
1850 | }
1851 | },
1852 | "node_modules/wrap-ansi": {
1853 | "version": "3.0.1",
1854 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz",
1855 | "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==",
1856 | "dependencies": {
1857 | "string-width": "^2.1.1",
1858 | "strip-ansi": "^4.0.0"
1859 | },
1860 | "engines": {
1861 | "node": ">=4"
1862 | }
1863 | },
1864 | "node_modules/wrap-ansi/node_modules/ansi-regex": {
1865 | "version": "3.0.1",
1866 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
1867 | "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
1868 | "engines": {
1869 | "node": ">=4"
1870 | }
1871 | },
1872 | "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
1873 | "version": "2.0.0",
1874 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1875 | "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
1876 | "engines": {
1877 | "node": ">=4"
1878 | }
1879 | },
1880 | "node_modules/wrap-ansi/node_modules/string-width": {
1881 | "version": "2.1.1",
1882 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
1883 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
1884 | "dependencies": {
1885 | "is-fullwidth-code-point": "^2.0.0",
1886 | "strip-ansi": "^4.0.0"
1887 | },
1888 | "engines": {
1889 | "node": ">=4"
1890 | }
1891 | },
1892 | "node_modules/wrap-ansi/node_modules/strip-ansi": {
1893 | "version": "4.0.0",
1894 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
1895 | "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
1896 | "dependencies": {
1897 | "ansi-regex": "^3.0.0"
1898 | },
1899 | "engines": {
1900 | "node": ">=4"
1901 | }
1902 | },
1903 | "node_modules/y18n": {
1904 | "version": "5.0.8",
1905 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
1906 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
1907 | "engines": {
1908 | "node": ">=10"
1909 | }
1910 | },
1911 | "node_modules/yallist": {
1912 | "version": "4.0.0",
1913 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1914 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
1915 | },
1916 | "node_modules/yargs": {
1917 | "version": "17.7.2",
1918 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
1919 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
1920 | "dependencies": {
1921 | "cliui": "^8.0.1",
1922 | "escalade": "^3.1.1",
1923 | "get-caller-file": "^2.0.5",
1924 | "require-directory": "^2.1.1",
1925 | "string-width": "^4.2.3",
1926 | "y18n": "^5.0.5",
1927 | "yargs-parser": "^21.1.1"
1928 | },
1929 | "engines": {
1930 | "node": ">=12"
1931 | }
1932 | },
1933 | "node_modules/yargs-parser": {
1934 | "version": "21.1.1",
1935 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
1936 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
1937 | "engines": {
1938 | "node": ">=12"
1939 | }
1940 | },
1941 | "node_modules/yargs/node_modules/ansi-regex": {
1942 | "version": "5.0.1",
1943 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1944 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1945 | "engines": {
1946 | "node": ">=8"
1947 | }
1948 | },
1949 | "node_modules/yargs/node_modules/is-fullwidth-code-point": {
1950 | "version": "3.0.0",
1951 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1952 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1953 | "engines": {
1954 | "node": ">=8"
1955 | }
1956 | },
1957 | "node_modules/yargs/node_modules/string-width": {
1958 | "version": "4.2.3",
1959 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1960 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1961 | "dependencies": {
1962 | "emoji-regex": "^8.0.0",
1963 | "is-fullwidth-code-point": "^3.0.0",
1964 | "strip-ansi": "^6.0.1"
1965 | },
1966 | "engines": {
1967 | "node": ">=8"
1968 | }
1969 | },
1970 | "node_modules/yargs/node_modules/strip-ansi": {
1971 | "version": "6.0.1",
1972 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1973 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1974 | "dependencies": {
1975 | "ansi-regex": "^5.0.1"
1976 | },
1977 | "engines": {
1978 | "node": ">=8"
1979 | }
1980 | },
1981 | "node_modules/yocto-queue": {
1982 | "version": "1.0.0",
1983 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
1984 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
1985 | "engines": {
1986 | "node": ">=12.20"
1987 | },
1988 | "funding": {
1989 | "url": "https://github.com/sponsors/sindresorhus"
1990 | }
1991 | }
1992 | }
1993 | }
1994 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "playwright-ai",
3 | "version": "1.1.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "exit 0"
8 | },
9 | "bin": "./index.js",
10 | "type": "module",
11 | "author": "",
12 | "engines": {
13 | "node": ">=20"
14 | },
15 | "license": "MIT",
16 | "dependencies": {
17 | "@anthropic-ai/sdk": "^0.5.4",
18 | "axios": "^1.6.2",
19 | "chatgpt": "^5.2.5",
20 | "debug": "^4.3.4",
21 | "execa": "^8.0.1",
22 | "listr": "^0.14.3",
23 | "lodash": "^4.17.21",
24 | "rxjs": "^7.8.1",
25 | "yargs": "^17.7.2"
26 | },
27 | "devDependencies": {
28 | "prettier": "^3.1.0"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/tests/sample/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | /test-results/
3 | /playwright-report/
4 | /blob-report/
5 | /playwright/.cache/
6 |
--------------------------------------------------------------------------------
/tests/sample/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sample",
3 | "version": "1.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "sample",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "devDependencies": {
12 | "@playwright/test": "^1.40.0",
13 | "@types/node": "^20.10.0"
14 | }
15 | },
16 | "node_modules/@playwright/test": {
17 | "version": "1.40.0",
18 | "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.0.tgz",
19 | "integrity": "sha512-PdW+kn4eV99iP5gxWNSDQCbhMaDVej+RXL5xr6t04nbKLCBwYtA046t7ofoczHOm8u6c+45hpDKQVZqtqwkeQg==",
20 | "dev": true,
21 | "dependencies": {
22 | "playwright": "1.40.0"
23 | },
24 | "bin": {
25 | "playwright": "cli.js"
26 | },
27 | "engines": {
28 | "node": ">=16"
29 | }
30 | },
31 | "node_modules/@types/node": {
32 | "version": "20.10.0",
33 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.0.tgz",
34 | "integrity": "sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==",
35 | "dev": true,
36 | "dependencies": {
37 | "undici-types": "~5.26.4"
38 | }
39 | },
40 | "node_modules/fsevents": {
41 | "version": "2.3.2",
42 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
43 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
44 | "dev": true,
45 | "hasInstallScript": true,
46 | "optional": true,
47 | "os": [
48 | "darwin"
49 | ],
50 | "engines": {
51 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
52 | }
53 | },
54 | "node_modules/playwright": {
55 | "version": "1.40.0",
56 | "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.0.tgz",
57 | "integrity": "sha512-gyHAgQjiDf1m34Xpwzaqb76KgfzYrhK7iih+2IzcOCoZWr/8ZqmdBw+t0RU85ZmfJMgtgAiNtBQ/KS2325INXw==",
58 | "dev": true,
59 | "dependencies": {
60 | "playwright-core": "1.40.0"
61 | },
62 | "bin": {
63 | "playwright": "cli.js"
64 | },
65 | "engines": {
66 | "node": ">=16"
67 | },
68 | "optionalDependencies": {
69 | "fsevents": "2.3.2"
70 | }
71 | },
72 | "node_modules/playwright-core": {
73 | "version": "1.40.0",
74 | "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.0.tgz",
75 | "integrity": "sha512-fvKewVJpGeca8t0ipM56jkVSU6Eo0RmFvQ/MaCQNDYm+sdvKkMBBWTE1FdeMqIdumRaXXjZChWHvIzCGM/tA/Q==",
76 | "dev": true,
77 | "bin": {
78 | "playwright-core": "cli.js"
79 | },
80 | "engines": {
81 | "node": ">=16"
82 | }
83 | },
84 | "node_modules/undici-types": {
85 | "version": "5.26.5",
86 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
87 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
88 | "dev": true
89 | }
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/tests/sample/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sample",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "npx playwright test"
8 | },
9 | "type": "module",
10 | "author": "",
11 | "license": "ISC",
12 | "devDependencies": {
13 | "@playwright/test": "^1.40.0",
14 | "@types/node": "^20.10.0"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/tests/sample/playwright.config.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 | import { defineConfig, devices } from "@playwright/test";
3 |
4 | /**
5 | * Read environment variables from file.
6 | * https://github.com/motdotla/dotenv
7 | */
8 | // require('dotenv').config();
9 |
10 | /**
11 | * @see https://playwright.dev/docs/test-configuration
12 | */
13 | export default defineConfig({
14 | testDir: "./tests",
15 | /* Run tests in files in parallel */
16 | fullyParallel: true,
17 | /* Fail the build on CI if you accidentally left test.only in the source code. */
18 | forbidOnly: !!process.env.CI,
19 | /* Retry on CI only */
20 | retries: process.env.CI ? 2 : 0,
21 | /* Opt out of parallel tests on CI. */
22 | workers: process.env.CI ? 1 : undefined,
23 | /* Reporter to use. See https://playwright.dev/docs/test-reporters */
24 | reporter: "html",
25 | /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
26 | use: {
27 | /* Base URL to use in actions like `await page.goto('/')`. */
28 | // baseURL: 'http://127.0.0.1:3000',
29 |
30 | /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
31 | trace: "on-first-retry",
32 | },
33 |
34 | /* Configure projects for major browsers */
35 | projects: [
36 | {
37 | name: "chromium",
38 | use: { ...devices["Desktop Chrome"] },
39 | },
40 |
41 | // {
42 | // name: 'firefox',
43 | // use: { ...devices['Desktop Firefox'] },
44 | // },
45 |
46 | // {
47 | // name: 'webkit',
48 | // use: { ...devices['Desktop Safari'] },
49 | // },
50 |
51 | /* Test against mobile viewports. */
52 | // {
53 | // name: 'Mobile Chrome',
54 | // use: { ...devices['Pixel 5'] },
55 | // },
56 | // {
57 | // name: 'Mobile Safari',
58 | // use: { ...devices['iPhone 12'] },
59 | // },
60 |
61 | /* Test against branded browsers. */
62 | // {
63 | // name: 'Microsoft Edge',
64 | // use: { ...devices['Desktop Edge'], channel: 'msedge' },
65 | // },
66 | // {
67 | // name: 'Google Chrome',
68 | // use: { ...devices['Desktop Chrome'], channel: 'chrome' },
69 | // },
70 | ],
71 |
72 | /* Run your local dev server before starting the tests */
73 | // webServer: {
74 | // command: 'npm run start',
75 | // url: 'http://127.0.0.1:3000',
76 | // reuseExistingServer: !process.env.CI,
77 | // },
78 | });
79 |
--------------------------------------------------------------------------------
/tests/sample/tests/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vladikoff/playwright-ai/39d791c4a5a54e2b86a33817559411e6d7bc461f/tests/sample/tests/.gitkeep
--------------------------------------------------------------------------------
/util/write-to-file.js:
--------------------------------------------------------------------------------
1 | import { promises as fs } from "fs";
2 | async function writeToFile(component, content) {
3 | const file = `${process.cwd()}/tests/${component}.spec.js`;
4 | if (!content) {
5 | return;
6 | }
7 | try {
8 | await fs.writeFile(file, content, "utf8");
9 | console.log(`Successfully wrote to file ${file}`);
10 | } catch (err) {
11 | console.error(`Error writing to file ${file}: `, err);
12 | }
13 | }
14 |
15 | export default writeToFile;
16 |
--------------------------------------------------------------------------------