diff --git a/.changeset/thin-phones-destroy.md b/.changeset/thin-phones-destroy.md new file mode 100644 index 00000000..d0cf624c --- /dev/null +++ b/.changeset/thin-phones-destroy.md @@ -0,0 +1,8 @@ +--- +"empiricalrun": minor +"@empiricalrun/scorer": minor +"@empiricalrun/types": minor +"web": patch +--- + +feat: add support for js/ts scripts as scorers diff --git a/apps/web/components/run-config-view.tsx b/apps/web/components/run-config-view.tsx index 9c0aa8d3..fc3725df 100644 --- a/apps/web/components/run-config-view.tsx +++ b/apps/web/components/run-config-view.tsx @@ -16,7 +16,6 @@ enum RunConfigTab { const defaultTabMap: Record = { model: RunConfigTab.prompt, "py-script": RunConfigTab.parameters, - "js-script": RunConfigTab.parameters, assistant: RunConfigTab.instructions, }; diff --git a/apps/web/components/sample-output-card.tsx b/apps/web/components/sample-output-card.tsx index 1b4e36d0..04c403f1 100644 --- a/apps/web/components/sample-output-card.tsx +++ b/apps/web/components/sample-output-card.tsx @@ -58,18 +58,12 @@ export default function SampleOutputCard({ const showCompareAgainst = useMemo( () => !baseSample?.output.tool_calls?.length && - (baseSample?.expected?.value || - comparisonSamples?.some( - (comparisonSample, index) => - comparisonSample?.output && - comparisonResults?.[index]?.id !== baseResult?.id, - )), - [ - baseResult?.id, - baseSample?.expected?.value, - comparisonResults, - comparisonSamples, - ], + comparisonSamples?.some( + (comparisonSample, index) => + comparisonSample?.output && + comparisonResults?.[index]?.id !== baseResult?.id, + ), + [baseResult?.id, comparisonResults, comparisonSamples], ); const clearDiffView = useCallback(() => { @@ -163,21 +157,6 @@ export default function SampleOutputCard({ > none - {baseSample?.expected?.value && ( - { - enableDiffView({ - type: "expected", - text: baseSample?.expected?.value || "", - }); - }} - > - expected - - )} {comparisonSamples?.map((s, i) => { const result = comparisonResults?.[i]; if (result?.id === baseResult.id) { diff --git a/examples/spider-using-ts/.gitignore b/examples/spider-using-ts/.gitignore new file mode 100644 index 00000000..4ea01415 --- /dev/null +++ b/examples/spider-using-ts/.gitignore @@ -0,0 +1,4 @@ + +# Ignore outputs from Empirical +.empiricalrun +db_files \ No newline at end of file diff --git a/examples/spider-using-ts/README.md b/examples/spider-using-ts/README.md new file mode 100644 index 00000000..5217bf24 --- /dev/null +++ b/examples/spider-using-ts/README.md @@ -0,0 +1,38 @@ +# Scoring Text-to-SQL outputs using Typescript + +LLMs are good at converting natural language questions to SQL queries. This examples uses that +scenario to demo Empirical. +This example is based on the [Spider](https://github.com/taoyds/spider) dataset and uses typescript config to score the outputs. + +In this example, we generate SQL queries, and score them on + +1. SQL syntax (with the `sql-syntax` scorer): Checks if the output syntax is valid SQL. For example, if the output is in + markdown syntax (with backticks), it is not a valid SQL query. +2. Execution accuracy: We run the generated SQL query against a test database, and check + if the query returns a result. This scorer cleans query outputs that have backticks + ([see code](./empiricalrc.ts)). + +This example requires Typescript. + +## Usage + +1. Install npm dependencies + ```sh + npm i + ``` + +1. Review the `empiricalrc.ts` configuration, and make changes if any. The current configuration runs models + from OpenAI, and Llama and thus, requires [relevant environment variables](https://docs.empirical.run/models/basic). + ```sh + cat empiricalrc.ts + ``` + +1. Run with Empirical + ```sh + npx empiricalrun + ``` + +1. See results on the Empirical web reporter + ```sh + npx empiricalrun ui + ``` \ No newline at end of file diff --git a/examples/spider-using-ts/empiricalrc.ts b/examples/spider-using-ts/empiricalrc.ts new file mode 100644 index 00000000..4c29da1a --- /dev/null +++ b/examples/spider-using-ts/empiricalrc.ts @@ -0,0 +1,62 @@ +import { Config, loadDataset, JSScriptScorer } from "empiricalrun"; +import { executeQuery, getConnection, getSchema } from "./src/db"; + +async function datasetLoader() { + let dataset = await loadDataset({ + path: "https://docs.google.com/spreadsheets/d/1x_p0lX2pJEyGkFoe1A9nY3q87qOJUd547f2lz99ugiM/edit#gid=1000015421" + }) + dataset.samples = dataset.samples.map(sample => { + // get DB schema for the mentioned database name + sample.inputs.schema = getSchema(sample.inputs.database_name) + return sample; + }) + return dataset +} + +async function execAccuracy ({ output, inputs }) { + let score = 0; + let message: string; + try { + const dbName = inputs.database_name; + const con = await getConnection(dbName); + const res = await executeQuery(con, output.value!); + const [firstRow] = res; + score = firstRow ? 1 : 0.5; + message = firstRow ? "Result preview: " + firstRow.join(", "): "No results found" + } catch (e) { + score = 0; + message = String(e); + } + return { + score, + message + }; +} + +const config: Config = { + runs: [ + { + provider: "openai", + type: "model", + model: "gpt-3.5-turbo", + prompt: + "You are an SQLite expert who can convert natural language questions to SQL queries for the database schema given below.\n\nDatabase schema:\n{{schema}}\n\nAnswer the following question with only the SQL query.\n\nQuestion: {{question}}", + }, + { + type: "model", + provider: "fireworks", + model: "llama-v3-8b-instruct", + prompt: + "You are an SQLite expert who can convert natural language questions to SQL queries for the database schema given below.\n\nDatabase schema:\n{{schema}}\n\nAnswer the following question with only the SQL query.\n\nQuestion: {{question}}", + } + ], + dataset: datasetLoader, + scorers: [ + { + type: "sql-syntax", + }, + execAccuracy + ] +}; + +export default config; diff --git a/examples/spider-using-ts/package-lock.json b/examples/spider-using-ts/package-lock.json new file mode 100644 index 00000000..49c50649 --- /dev/null +++ b/examples/spider-using-ts/package-lock.json @@ -0,0 +1,3758 @@ +{ + "name": "spider-using-ts", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "spider-using-ts", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "sqlite3": "^5.1.7", + "uuid": "^9.0.1" + }, + "devDependencies": { + "empiricalrun": "latest" + } + }, + "node_modules/@anthropic-ai/sdk": { + "version": "0.20.9", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.20.9.tgz", + "integrity": "sha512-Lq74+DhiEQO6F9/gdVOLmHx57pX45ebK2Q/zH14xYe1157a7QeUVknRqIp0Jz5gQI01o7NKbuv9Dag2uQsLjDg==", + "dev": true, + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" + } + }, + "node_modules/@empiricalrun/ai": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@empiricalrun/ai/-/ai-0.10.1.tgz", + "integrity": "sha512-0tXQJRqxbF2MO/p9TDpbeBlta1NixFogh0RMsgK6R4A6qSIDFHsCqUyIOnla7uGkZYpPVEHL5n9PE3/b5nOwUg==", + "dev": true, + "dependencies": { + "@anthropic-ai/sdk": "^0.20.8", + "@empiricalrun/fetch": "^0.3.1", + "@google/generative-ai": "^0.11.2", + "@mistralai/mistralai": "^0.1.3", + "anthropic": "^0.0.0", + "openai": "^4.38.5", + "promise-retry": "^2.0.1" + } + }, + "node_modules/@empiricalrun/fetch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@empiricalrun/fetch/-/fetch-0.3.1.tgz", + "integrity": "sha512-kU6yxcjsN7VO6G5WTW/KDZPsk2JFRXlXWyHCoRJQVle3t+C0kzma9BfNWoZGj0RYKT9aiKI/XX3ax6ByGDzu9Q==", + "dev": true + }, + "node_modules/@empiricalrun/scorer": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@empiricalrun/scorer/-/scorer-0.3.1.tgz", + "integrity": "sha512-qf03fbWOd9bTxMk39EDC0x0shCrZBEA7r6Pr+O2OV6Erq6Pj3tozItwGi0tOX3acOCaYKovMoMvFtqhvfnHXEQ==", + "dev": true, + "dependencies": { + "@empiricalrun/ai": "^0.10.1", + "node-sql-parser": "^4.18.0", + "openai": "^4.29.0", + "python-shell": "^5.0.0" + } + }, + "node_modules/@empiricalrun/types": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@empiricalrun/types/-/types-0.10.0.tgz", + "integrity": "sha512-ELkkCLbXnJJlLMxJlxD6R3YsDjyvs2Rv6JF6eRlbkPacbNqd/UVbSr/IwHR4xGMIzEVdvNfkz6tzOr7CK5xgbw==", + "dev": true, + "dependencies": { + "openai": "^4.38.3" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "devOptional": true + }, + "node_modules/@google/generative-ai": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.11.3.tgz", + "integrity": "sha512-QtQ1hz6rcybbw35uxXlFF26KNnaTVr2oWwnmDkC1M35KdzN4tVc4wakgJp8uXbY9KDCNHksyp11DbFg0HPckZQ==", + "dev": true, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mistralai/mistralai": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-0.1.3.tgz", + "integrity": "sha512-WUHxC2xdeqX9PTXJEqdiNY54vT2ir72WSJrZTTBKRnkfhX6zIfCYA24faRlWjUB5WTpn+wfdGsTMl3ArijlXFA==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.7" + } + }, + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.1.tgz", + "integrity": "sha512-ej0phymbFLoCB26dbbq5PGScsf2JAJ4IJHjG10LalgUV36XKTmA4GdA+PVllKvRk0sEKt64X8975qFnkSi0hqA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", + "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "devOptional": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "devOptional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "devOptional": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "devOptional": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anthropic": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/anthropic/-/anthropic-0.0.0.tgz", + "integrity": "sha512-f5q/E0ZTR079xtkh58gFQ5chyLiRYgSoVDGA/hWacvU1DzVt+anoN8tEtTwWbmav6/+w/fFMNMj7r/KAMdOIYw==", + "dev": true + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "devOptional": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/axios": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "devOptional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "devOptional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "dev": true, + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "devOptional": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "devOptional": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "devOptional": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/csvtojson": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/csvtojson/-/csvtojson-2.0.10.tgz", + "integrity": "sha512-lUWFxGKyhraKCW8Qghz6Z0f2l/PqB1W3AO0HKJzGIQ5JRSlR651ekJDiGJbBT4sRNNv5ddnSGVEnsxP9XRCVpQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.1", + "lodash": "^4.17.3", + "strip-bom": "^2.0.0" + }, + "bin": { + "csvtojson": "bin/csvtojson" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "devOptional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "devOptional": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-port": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", + "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duckdb": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/duckdb/-/duckdb-0.10.2.tgz", + "integrity": "sha512-7UGLRp+zkAzE0AQjyUfOyEjuX7Xs3St452+ZtUSbQEE8DJjc6GUWscxYPm5XPe5fX4nL+Zy9lVMEss1Yuw74kA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "node-addon-api": "^7.0.0", + "node-gyp": "^9.3.0" + } + }, + "node_modules/duckdb-async": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/duckdb-async/-/duckdb-async-0.10.2.tgz", + "integrity": "sha512-Lf9MSnfcflyo8lpOfhDTOGsqkKeippJm2RZzry9sOG2Kvz+pDfLMuqhWQ4CQayud+Ktfs1L8DsrTIAsUCmbTlA==", + "dev": true, + "dependencies": { + "duckdb": "0.10.2" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "devOptional": true + }, + "node_modules/empiricalrun": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/empiricalrun/-/empiricalrun-0.13.2.tgz", + "integrity": "sha512-YQWeZ/IscBBOcYSgk3HqnEoPpFWbeRwQHlwDYiaG36lOgerPrOXQUIN1NWmdkilRWLqClR8ro6+2cZmW4KH6KQ==", + "dev": true, + "dependencies": { + "@empiricalrun/ai": "0.10.1", + "@empiricalrun/fetch": "0.3.1", + "@empiricalrun/scorer": "0.3.1", + "@empiricalrun/types": "0.10.0", + "@types/express": "^4.17.21", + "cli-progress": "^3.12.0", + "commander": "^12.0.0", + "csvtojson": "^2.0.10", + "detect-port": "^1.5.1", + "dotenv": "^16.4.5", + "duckdb-async": "^0.10.0", + "express": "^4.19.2", + "openai": "^4.29.0", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "posthog-node": "^4.0.1", + "python-shell": "^5.0.0", + "table": "^6.8.2", + "tsx": "^4.10.2" + }, + "bin": { + "empiricalrun": "dist/bin/index.js" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "devOptional": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", + "dev": true + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dev": true, + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/formdata-node/node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "devOptional": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "devOptional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "devOptional": true + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "devOptional": true + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "devOptional": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "devOptional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "devOptional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "devOptional": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "devOptional": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "devOptional": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "devOptional": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "devOptional": true + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "devOptional": true + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "devOptional": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "devOptional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "devOptional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "devOptional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "devOptional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "devOptional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "devOptional": true + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "devOptional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abi": { + "version": "3.62.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.62.0.tgz", + "integrity": "sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", + "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", + "engines": { + "node": "^16 || ^18 || >= 20" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-sql-parser": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-4.18.0.tgz", + "integrity": "sha512-2YEOR5qlI1zUFbGMLKNfsrR5JUvFg9LxIRVE+xJe962pfVLH0rnItqLzv96XVs1Y1UIR8FxsXAuvX/lYAWZ2BQ==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.48" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "devOptional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openai": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.47.1.tgz", + "integrity": "sha512-WWSxhC/69ZhYWxH/OBsLEirIjUcfpQ5+ihkXKp06hmeYXgBBIUCa9IptMzYx6NdkiOCsSGYCnTIsxaic3AjRCQ==", + "dev": true, + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" + }, + "bin": { + "openai": "bin/cli" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "devOptional": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/posthog-node": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-4.0.1.tgz", + "integrity": "sha512-rtqm2h22QxLGBrW2bLYzbRhliIrqgZ0k+gF0LkQ1SNdeD06YE5eilV0MxZppFSxC8TfH0+B0cWCuebEnreIDgQ==", + "dev": true, + "dependencies": { + "axios": "^1.6.2", + "rusha": "^0.8.14" + }, + "engines": { + "node": ">=15.0.0" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "devOptional": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "devOptional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/python-shell": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/python-shell/-/python-shell-5.0.0.tgz", + "integrity": "sha512-RUOOOjHLhgR1MIQrCtnEqz/HJ1RMZBIN+REnpSUrfft2bXqXy69fwJASVziWExfFXsR1bCY0TznnHooNsCo0/w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "devOptional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "devOptional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rusha": { + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/rusha/-/rusha-0.8.14.tgz", + "integrity": "sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "devOptional": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "devOptional": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "devOptional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "devOptional": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "devOptional": true + }, + "node_modules/sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/sqlite3/node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/sqlite3/node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sqlite3/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sqlite3/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/sqlite3/node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sqlite3/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/sqlite3/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sqlite3/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sqlite3/node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sqlite3/node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/sqlite3/node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/sqlite3/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/sqlite3/node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sqlite3/node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/sqlite3/node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/sqlite3/node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "devOptional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "devOptional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/table": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/tsx": { + "version": "4.10.5", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.10.5.tgz", + "integrity": "sha512-twDSbf7Gtea4I2copqovUiNTEDrT8XNFXsuHpfGbdpW/z9ZW4fTghzzhAG0WfrCuJmJiOEY1nLIjq4u3oujRWQ==", + "dev": true, + "dependencies": { + "esbuild": "~0.20.2", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "devOptional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "devOptional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/examples/spider-using-ts/package.json b/examples/spider-using-ts/package.json new file mode 100644 index 00000000..a1c93b03 --- /dev/null +++ b/examples/spider-using-ts/package.json @@ -0,0 +1,19 @@ +{ + "name": "spider-using-ts", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "empiricalrun": "latest" + }, + "dependencies": { + "sqlite3": "^5.1.7", + "uuid": "^9.0.1" + } +} diff --git a/examples/spider-using-ts/src/db.ts b/examples/spider-using-ts/src/db.ts new file mode 100644 index 00000000..81842ad7 --- /dev/null +++ b/examples/spider-using-ts/src/db.ts @@ -0,0 +1,70 @@ +import sqlite3 from "sqlite3"; +import { cleanClosingBraces, loadJson, removeBackticks } from "./utils"; +import fs from "fs"; + +const dbSchemas = loadJson("./src/scripts/schema.json"); + +export function getSchema(dbName: string): string { + return dbSchemas[dbName]; +} + +async function createDatabase( + con: sqlite3.Database, + dbName: string, +): Promise { + return new Promise((resolve) => { + const schemaScript = dbSchemas[dbName]; + const createScript = loadJson("./src/scripts/insert.json")[dbName]; + + con.serialize(() => { + con.exec(schemaScript, () => { + con.exec(createScript, () => { + resolve(con); + }); + }); + }); + }); +} + +const connectionCache: Map> = new Map(); + +export async function getConnection (dbName:string): Promise { + if (connectionCache.get(dbName)) { + return await connectionCache.get(dbName)! + } + const dbFilesDir = "db_files" + const connectionPromise = new Promise(async (resolve) => { + if(!fs.existsSync(dbFilesDir)){ + fs.mkdirSync(dbFilesDir); + } + const dbfileName = `${dbFilesDir}/${dbName}.db` + const con = new sqlite3.Database(dbfileName); + await createDatabase(con, dbName) + resolve(con) + }) + connectionCache.set(dbName, connectionPromise); + return await connectionPromise; +} + +export async function executeQuery(con: sqlite3.Database, query: string): Promise { + const cleanedQuery = cleanClosingBraces(removeBackticks(query)); + const res: any[] = await new Promise((resolve, reject) => { + const rows: any[] = []; + con.each( + cleanedQuery, + (err, row) => { + if (err) reject(err); + else { + rows.push(Object.values(row!)); + } + }, + (err) => { + if (err) reject(err); + else { + resolve(rows); + } + } + ); + }); + return res +} diff --git a/examples/spider-using-ts/src/scripts/insert.json b/examples/spider-using-ts/src/scripts/insert.json new file mode 100644 index 00000000..ff1cdf54 --- /dev/null +++ b/examples/spider-using-ts/src/scripts/insert.json @@ -0,0 +1,22 @@ +{ + "concert_singer": "\nINSERT INTO stadium VALUES (1, 'New York', 'Liberty Stadium', 50000, 48000, 20000, 35000);\nINSERT INTO stadium VALUES (2, 'Los Angeles', 'Angels Arena', 70000, 65000, 25000, 45000);\nINSERT INTO stadium VALUES (3, 'London', 'Queen Park', 60000, 60000, 30000, 50000);\nINSERT INTO stadium VALUES (4, 'Tokyo', 'Samurai Field', 80000, 79000, 40000, 60000);\nINSERT INTO stadium VALUES (5, 'Paris', 'Lights Dome', 75000, 73000, 35000, 55000);\n\nINSERT INTO singer VALUES (1, 'John Doe', 'USA', 'Freedom Call', '2017', 30, 1);\nINSERT INTO singer VALUES (2, 'Jane Smith', 'UK', 'Echoes', '2018', 28, 0);\nINSERT INTO singer VALUES (3, 'Carlos Ray', 'Spain', 'La Vida', '2019', 35, 1);\nINSERT INTO singer VALUES (4, 'Aiko Tanaka', 'Japan', 'Sakura', '2015', 25, 0);\nINSERT INTO singer VALUES (5, 'Emilie Blanc', 'France', 'Chanson', '2016', 32, 0);\n\nINSERT INTO concert VALUES (1, 'Summer Beats', 'Pop', '1', '2023');\nINSERT INTO concert VALUES (2, 'Winter Melodies', 'Classical', '2', '2021');\nINSERT INTO concert VALUES (3, 'Rock Explosion', 'Rock', '3', '2022');\nINSERT INTO concert VALUES (4, 'Electronic Waves', 'Electronic', '4', '2024');\nINSERT INTO concert VALUES (5, 'Indie Nights', 'Indie', '5', '2020');\n\nINSERT INTO singer_in_concert VALUES (1, '1');\nINSERT INTO singer_in_concert VALUES (2, '2');\nINSERT INTO singer_in_concert VALUES (3, '3');\nINSERT INTO singer_in_concert VALUES (4, '4');\nINSERT INTO singer_in_concert VALUES (5, '5');\n", + "pets_1": "\nINSERT INTO Student (StuID, LName, Fname, Age, Sex, Major, Advisor, city_code) VALUES (1, 'Smith', 'John', 22, 'M', 101, 201, 'NYC');\nINSERT INTO Student (StuID, LName, Fname, Age, Sex, Major, Advisor, city_code) VALUES (2, 'Johnson', 'Emma', 20, 'F', 102, 202, 'LAX');\nINSERT INTO Student (StuID, LName, Fname, Age, Sex, Major, Advisor, city_code) VALUES (3, 'Williams', 'Olivia', 19, 'F', 103, 203, 'CHI');\nINSERT INTO Student (StuID, LName, Fname, Age, Sex, Major, Advisor, city_code) VALUES (4, 'Jones', 'Noah', 21, 'M', 104, 204, 'HOU');\nINSERT INTO Student (StuID, LName, Fname, Age, Sex, Major, Advisor, city_code) VALUES (5, 'Brown', 'Sophia', 22, 'F', 105, 205, 'PHX');\n\nINSERT INTO Pets (PetID, PetType, pet_age, weight) VALUES (1, 'Dog', 3, 20);\nINSERT INTO Pets (PetID, PetType, pet_age, weight) VALUES (2, 'Cat', 2, 10);\nINSERT INTO Pets (PetID, PetType, pet_age, weight) VALUES (3, 'Bird', 1, 1);\nINSERT INTO Pets (PetID, PetType, pet_age, weight) VALUES (4, 'Fish', 1, 0.05);\nINSERT INTO Pets (PetID, PetType, pet_age, weight) VALUES (5, 'Hamster', 2, 0.5);\n\nINSERT INTO Has_Pet (StuID, PetID) VALUES (1, 1);\nINSERT INTO Has_Pet (StuID, PetID) VALUES (2, 2);\nINSERT INTO Has_Pet (StuID, PetID) VALUES (3, 3);\nINSERT INTO Has_Pet (StuID, PetID) VALUES (4, 4);\nINSERT INTO Has_Pet (StuID, PetID) VALUES (5, 5);\n", + "car_1": "\nINSERT INTO continents (ContId, Continent) VALUES (1, 'Asia');\nINSERT INTO continents (ContId, Continent) VALUES (2, 'Europe');\nINSERT INTO continents (ContId, Continent) VALUES (3, 'North America');\nINSERT INTO continents (ContId, Continent) VALUES (4, 'South America');\nINSERT INTO continents (ContId, Continent) VALUES (5, 'Africa');\n\nINSERT INTO countries (CountryId, CountryName, Continent) VALUES (1, 'Japan', 1);\nINSERT INTO countries (CountryId, CountryName, Continent) VALUES (2, 'Germany', 2);\nINSERT INTO countries (CountryId, CountryName, Continent) VALUES (3, 'USA', 3);\nINSERT INTO countries (CountryId, CountryName, Continent) VALUES (4, 'Brazil', 4);\nINSERT INTO countries (CountryId, CountryName, Continent) VALUES (5, 'South Africa', 5);\n\nINSERT INTO car_makers (Id, Maker, FullName, Country) VALUES (1, 'Toyota', 'Toyota Motor Corporation', 1);\nINSERT INTO car_makers (Id, Maker, FullName, Country) VALUES (2, 'VW', 'Volkswagen Group', 2);\nINSERT INTO car_makers (Id, Maker, FullName, Country) VALUES (3, 'Ford', 'Ford Motor Company', 3);\nINSERT INTO car_makers (Id, Maker, FullName, Country) VALUES (4, 'Chevrolet', 'Chevrolet Division of General Motors Company', 3);\nINSERT INTO car_makers (Id, Maker, FullName, Country) VALUES (5, 'Fiat', 'Fiat Automobiles S.p.A.', 4);\n\nINSERT INTO model_list (ModelId, Maker, Model) VALUES (1, 1, 'Corolla');\nINSERT INTO model_list (ModelId, Maker, Model) VALUES (2, 2, 'Golf');\nINSERT INTO model_list (ModelId, Maker, Model) VALUES (3, 3, 'Mustang');\nINSERT INTO model_list (ModelId, Maker, Model) VALUES (4, 4, 'Camaro');\nINSERT INTO model_list (ModelId, Maker, Model) VALUES (5, 5, 'Punto');\n\nINSERT INTO car_names (MakeId, Model, Make) VALUES (1, 'Corolla', 'Toyota');\nINSERT INTO car_names (MakeId, Model, Make) VALUES (2, 'Golf', 'VW');\nINSERT INTO car_names (MakeId, Model, Make) VALUES (3, 'Mustang', 'Ford');\nINSERT INTO car_names (MakeId, Model, Make) VALUES (4, 'Camaro', 'Chevrolet');\nINSERT INTO car_names (MakeId, Model, Make) VALUES (5, 'Punto', 'Fiat');\n\nINSERT INTO cars_data (Id, MPG, Cylinders, Edispl, Horsepower, Weight, Accelerate, Year) VALUES (1, '30', 4, 1.8, '130', 2700, 12.5, 2020);\nINSERT INTO cars_data (Id, MPG, Cylinders, Edispl, Horsepower, Weight, Accelerate, Year) VALUES (2, '35', 4, 2.0, '150', 2900, 10.0, 2021);\nINSERT INTO cars_data (Id, MPG, Cylinders, Edispl, Horsepower, Weight, Accelerate, Year) VALUES (3, '25', 8, 5.0, '300', 3500, 8.0, 2022);\nINSERT INTO cars_data (Id, MPG, Cylinders, Edispl, Horsepower, Weight, Accelerate, Year) VALUES (4, '20', 6, 3.8, '200', 3300, 9.0, 2019);\nINSERT INTO cars_data (Id, MPG, Cylinders, Edispl, Horsepower, Weight, Accelerate, Year) VALUES (5, '28', 4, 1.4, '95', 2500, 13.0, 2018);\n", + "flight_2": "\nINSERT INTO airlines (uid, Airline, Abbreviation, Country) VALUES (1, 'American Airlines', 'AA', 'USA');\nINSERT INTO airlines (uid, Airline, Abbreviation, Country) VALUES (2, 'British Airways', 'BA', 'United Kingdom');\nINSERT INTO airlines (uid, Airline, Abbreviation, Country) VALUES (3, 'Lufthansa', 'LH', 'Germany');\nINSERT INTO airlines (uid, Airline, Abbreviation, Country) VALUES (4, 'Air France', 'AF', 'France');\nINSERT INTO airlines (uid, Airline, Abbreviation, Country) VALUES (5, 'Qantas', 'QF', 'Australia');\n\nINSERT INTO airports (City, AirportCode, AirportName, Country, CountryAbbrev) VALUES ('New York', 'JFK', 'John F. Kennedy International Airport', 'USA', 'US');\nINSERT INTO airports (City, AirportCode, AirportName, Country, CountryAbbrev) VALUES ('London', 'LHR', 'Heathrow Airport', 'United Kingdom', 'GB');\nINSERT INTO airports (City, AirportCode, AirportName, Country, CountryAbbrev) VALUES ('Frankfurt', 'FRA', 'Frankfurt Airport', 'Germany', 'DE');\nINSERT INTO airports (City, AirportCode, AirportName, Country, CountryAbbrev) VALUES ('Paris', 'CDG', 'Charles de Gaulle Airport', 'France', 'FR');\nINSERT INTO airports (City, AirportCode, AirportName, Country, CountryAbbrev) VALUES ('Sydney', 'SYD', 'Sydney Airport', 'Australia', 'AU');\n\nINSERT INTO flights (Airline, FlightNo, SourceAirport, DestAirport) VALUES (1, 101, 'JFK', 'LHR');\nINSERT INTO flights (Airline, FlightNo, SourceAirport, DestAirport) VALUES (2, 102, 'LHR', 'JFK');\nINSERT INTO flights (Airline, FlightNo, SourceAirport, DestAirport) VALUES (3, 103, 'FRA', 'CDG');\nINSERT INTO flights (Airline, FlightNo, SourceAirport, DestAirport) VALUES (4, 104, 'CDG', 'SYD');\nINSERT INTO flights (Airline, FlightNo, SourceAirport, DestAirport) VALUES (5, 105, 'SYD', 'FRA');\n", + "employee_hire_evaluation": "\nINSERT INTO employee (Employee_ID, Name, Age, City) VALUES (1, 'John Doe', 28, 'New York');\nINSERT INTO employee (Employee_ID, Name, Age, City) VALUES (2, 'Jane Smith', 32, 'Los Angeles');\nINSERT INTO employee (Employee_ID, Name, Age, City) VALUES (3, 'Alice Johnson', 24, 'Chicago');\nINSERT INTO employee (Employee_ID, Name, Age, City) VALUES (4, 'Chris Brown', 45, 'Houston');\nINSERT INTO employee (Employee_ID, Name, Age, City) VALUES (5, 'Maggie Hart', 36, 'Phoenix');\n\nINSERT INTO shop (Shop_ID, Name, Location, District, Number_products, Manager_name) VALUES (101, 'Gadgets Pro', '5th Avenue', 'Central', 1500, 'John Doe');\nINSERT INTO shop (Shop_ID, Name, Location, District, Number_products, Manager_name) VALUES (102, 'Book World', 'Maple Street', 'North', 820, 'Jane Smith');\nINSERT INTO shop (Shop_ID, Name, Location, District, Number_products, Manager_name) VALUES (103, 'Sports Center', '3rd Street', 'East Side', 600, 'Alice Johnson');\nINSERT INTO shop (Shop_ID, Name, Location, District, Number_products, Manager_name) VALUES (104, 'Fashion Hub', 'Grand Avenue', 'West District', 450, 'Chris Brown');\nINSERT INTO shop (Shop_ID, Name, Location, District, Number_products, Manager_name) VALUES (105, 'Tech Trends', 'Innovation Blvd', 'South Gate', 1250, 'Maggie Hart');\n\nINSERT INTO hiring (Shop_ID, Employee_ID, Start_from, Is_full_time) VALUES (101, 1, '2020-03-01', 'Yes');\nINSERT INTO hiring (Shop_ID, Employee_ID, Start_from, Is_full_time) VALUES (102, 2, '2019-06-15', 'Yes');\nINSERT INTO hiring (Shop_ID, Employee_ID, Start_from, Is_full_time) VALUES (103, 3, '2018-09-10', 'No');\nINSERT INTO hiring (Shop_ID, Employee_ID, Start_from, Is_full_time) VALUES (104, 4, '2019-12-05', 'Yes');\nINSERT INTO hiring (Shop_ID, Employee_ID, Start_from, Is_full_time) VALUES (105, 5, '2018-01-20', 'No');\n\nINSERT INTO evaluation (Employee_ID, Year_awarded, Bonus) VALUES ('1', '2021', 500);\nINSERT INTO evaluation (Employee_ID, Year_awarded, Bonus) VALUES ('2', '2020', 600);\nINSERT INTO evaluation (Employee_ID, Year_awarded, Bonus) VALUES ('3', '2019', 300);\nINSERT INTO evaluation (Employee_ID, Year_awarded, Bonus) VALUES ('4', '2021', 400);\nINSERT INTO evaluation (Employee_ID, Year_awarded, Bonus) VALUES ('5', '2019', 350);\n", + "cre_Doc_Template_Mgt": "\nINSERT INTO Ref_Template_Types (Template_Type_Code, Template_Type_Description) VALUES ('TYPE1', 'Type 1 Description');\nINSERT INTO Ref_Template_Types (Template_Type_Code, Template_Type_Description) VALUES ('TYPE2', 'Type 2 Description');\nINSERT INTO Ref_Template_Types (Template_Type_Code, Template_Type_Description) VALUES ('TYPE3', 'Type 3 Description');\nINSERT INTO Ref_Template_Types (Template_Type_Code, Template_Type_Description) VALUES ('TYPE4', 'Type 4 Description');\nINSERT INTO Ref_Template_Types (Template_Type_Code, Template_Type_Description) VALUES ('TYPE5', 'Type 5 Description');\n\nINSERT INTO Templates (Template_ID, Version_Number, Template_Type_Code, Date_Effective_From, Date_Effective_To, Template_Details) VALUES (1, 1, 'TYPE1', '2023-01-01 00:00:00', '2023-12-31 23:59:59', 'Details of Template 1');\nINSERT INTO Templates (Template_ID, Version_Number, Template_Type_Code, Date_Effective_From, Date_Effective_To, Template_Details) VALUES (2, 2, 'TYPE2', '2023-02-01 00:00:00', NULL, 'Details of Template 2');\nINSERT INTO Templates (Template_ID, Version_Number, Template_Type_Code, Date_Effective_From, Date_Effective_To, Template_Details) VALUES (3, 1, 'TYPE3', '2023-03-01 00:00:00', '2024-03-01 00:00:00', 'Details of Template 3');\nINSERT INTO Templates (Template_ID, Version_Number, Template_Type_Code, Date_Effective_From, Date_Effective_To, Template_Details) VALUES (4, 1, 'TYPE4', '2023-04-01 00:00:00', '2023-04-30 23:59:59', 'Details of Template 4');\nINSERT INTO Templates (Template_ID, Version_Number, Template_Type_Code, Date_Effective_From, Date_Effective_To, Template_Details) VALUES (5, 3, 'TYPE5', '2023-05-01 00:00:00', NULL, 'Details of Template 5');\n\nINSERT INTO Documents (Document_ID, Template_ID, Document_Name, Document_Description, Other_Details) VALUES (1, 1, 'Doc 1', 'Description of Document 1', 'Other details about Doc 1');\nINSERT INTO Documents (Document_ID, Template_ID, Document_Name, Document_Description, Other_Details) VALUES (2, 2, 'Doc 2', 'Description of Document 2', 'Other details about Doc 2');\nINSERT INTO Documents (Document_ID, Template_ID, Document_Name, Document_Description, Other_Details) VALUES (3, 3, 'Doc 3', 'Description of Document 3', 'Other details about Doc 3');\nINSERT INTO Documents (Document_ID, Template_ID, Document_Name, Document_Description, Other_Details) VALUES (4, 4, 'Doc 4', 'Description of Document 4', 'Other details about Doc 4');\nINSERT INTO Documents (Document_ID, Template_ID, Document_Name, Document_Description, Other_Details) VALUES (5, 5, 'Doc 5', 'Description of Document 5', 'Other details about Doc 5');\n\nINSERT INTO Paragraphs (Paragraph_ID, Document_ID, Paragraph_Text, Other_Details) VALUES (1, 1, 'Text of Paragraph 1', 'Other details 1');\nINSERT INTO Paragraphs (Paragraph_ID, Document_ID, Paragraph_Text, Other_Details) VALUES (2, 2, 'Text of Paragraph 2', 'Other details 2');\nINSERT INTO Paragraphs (Paragraph_ID, Document_ID, Paragraph_Text, Other_Details) VALUES (3, 3, 'Text of Paragraph 3', 'Other details 3');\nINSERT INTO Paragraphs (Paragraph_ID, Document_ID, Paragraph_Text, Other_Details) VALUES (4, 4, 'Text of Paragraph 4', 'Other details 4');\nINSERT INTO Paragraphs (Paragraph_ID, Document_ID, Paragraph_Text, Other_Details) VALUES (5, 5, 'Text of Paragraph 5', 'Other details 5');\n", + "course_teach": "\nINSERT INTO course (Course_ID, Staring_Date, Course) VALUES (1, '2023-01-10', 'Mathematics');\nINSERT INTO course (Course_ID, Staring_Date, Course) VALUES (2, '2023-02-15', 'Physics');\nINSERT INTO course (Course_ID, Staring_Date, Course) VALUES (3, '2023-03-20', 'Chemistry');\nINSERT INTO course (Course_ID, Staring_Date, Course) VALUES (4, '2023-04-25', 'Biology');\nINSERT INTO course (Course_ID, Staring_Date, Course) VALUES (5, '2023-05-30', 'English');\n\nINSERT INTO teacher (Teacher_ID, Name, Age, Hometown) VALUES (1, 'Alice Johnson', '35', 'New York');\nINSERT INTO teacher (Teacher_ID, Name, Age, Hometown) VALUES (2, 'Bob Smith', '42', 'Los Angeles');\nINSERT INTO teacher (Teacher_ID, Name, Age, Hometown) VALUES (3, 'Carol White', '28', 'Chicago');\nINSERT INTO teacher (Teacher_ID, Name, Age, Hometown) VALUES (4, 'David Green', '47', 'Houston');\nINSERT INTO teacher (Teacher_ID, Name, Age, Hometown) VALUES (5, 'Eva Black', '31', 'Phoenix');\n\nINSERT INTO course_arrange (Course_ID, Teacher_ID, Grade) VALUES (1, 1, 90);\nINSERT INTO course_arrange (Course_ID, Teacher_ID, Grade) VALUES (2, 2, 85);\nINSERT INTO course_arrange (Course_ID, Teacher_ID, Grade) VALUES (3, 3, 88);\nINSERT INTO course_arrange (Course_ID, Teacher_ID, Grade) VALUES (4, 4, 92);\nINSERT INTO course_arrange (Course_ID, Teacher_ID, Grade) VALUES (5, 5, 87);\n", + "museum_visit": "\nINSERT INTO museum (Museum_ID, Name, Num_of_Staff, Open_Year) VALUES (1, 'History Museum', 20, '1990');\nINSERT INTO museum (Museum_ID, Name, Num_of_Staff, Open_Year) VALUES (2, 'Art Gallery', 15, '1985');\nINSERT INTO museum (Museum_ID, Name, Num_of_Staff, Open_Year) VALUES (3, 'Science Center', 25, '2000');\nINSERT INTO museum (Museum_ID, Name, Num_of_Staff, Open_Year) VALUES (4, 'Maritime Museum', 30, '1975');\nINSERT INTO museum (Museum_ID, Name, Num_of_Staff, Open_Year) VALUES (5, 'Children Museum', 18, '1995');\n\nINSERT INTO visitor (ID, Name, Level_of_membership, Age) VALUES (1, 'Alice Johnson', 2, 34);\nINSERT INTO visitor (ID, Name, Level_of_membership, Age) VALUES (2, 'Bob Smith', 3, 28);\nINSERT INTO visitor (ID, Name, Level_of_membership, Age) VALUES (3, 'Charlie Davis', 1, 45);\nINSERT INTO visitor (ID, Name, Level_of_membership, Age) VALUES (4, 'Diane Ricks', 2, 37);\nINSERT INTO visitor (ID, Name, Level_of_membership, Age) VALUES (5, 'Evan Long', 3, 52);\n\nINSERT INTO visit (Museum_ID, visitor_ID, Num_of_Ticket, Total_spent) VALUES (1, 1, 2, 25.00);\nINSERT INTO visit (Museum_ID, visitor_ID, Num_of_Ticket, Total_spent) VALUES (2, 2, 1, 15.00);\nINSERT INTO visit (Museum_ID, visitor_ID, Num_of_Ticket, Total_spent) VALUES (3, 3, 3, 45.00);\nINSERT INTO visit (Museum_ID, visitor_ID, Num_of_Ticket, Total_spent) VALUES (4, 4, 2, 30.00);\nINSERT INTO visit (Museum_ID, visitor_ID, Num_of_Ticket, Total_spent) VALUES (5, 5, 1, 20.00);\n", + "wta_1": "\n-- Insert data into `players`\nINSERT INTO players VALUES (1, 'John', 'Doe', 'R', '1990-01-10', 'USA');\nINSERT INTO players VALUES (2, 'Jane', 'Smith', 'L', '1992-07-15', 'GBR');\nINSERT INTO players VALUES (3, 'Michael', 'Brown', 'R', '1988-05-20', 'AUS');\nINSERT INTO players VALUES (4, 'Emily', 'Davis', 'R', '1991-03-25', 'CAN');\nINSERT INTO players VALUES (5, 'Chris', 'Wilson', 'L', '1994-11-30', 'FRA');\n\n-- Insert data into `matches`\nINSERT INTO matches VALUES (3, 128, 31, 'Q', 'R', 185, 2, 'GBR', 'Jane Smith', 50, 2500, 9, 101, 90, 'Round 1', '6-3 6-4', 'Hard', '2022-01-15', 'W1', 'G', 'Wimbledon', 29, NULL, 'R', 178, 1, 'USA', 'John Doe', 10, 5000, 1, 2012);\nINSERT INTO matches VALUES (5, 128, 33, NULL, 'L', 190, 1, 'USA', 'John Doe', 10, 5000, 1, 102, 110, 'Round 1', '6-4 7-6', 'Clay', '2022-01-16', 'F1', 'M', 'French Open', 25, 'WC', 'L', 170, 3, 'AUS', 'Michael Brown', 20, 4500, NULL, 2012);\nINSERT INTO matches VALUES (3, 64, 29, NULL, 'R', 180, 5, 'FRA', 'Chris Wilson', 30, 2200, NULL, 103, 75, 'Round 1', '6-1 6-2', 'Grass', '2022-01-15', 'U1', 'G', 'US Open', 23, NULL, 'R', 177, 4, 'CAN', 'Emily Davis', 15, 4100, 4, 2012);\nINSERT INTO matches VALUES (5, 128, 28, 'WC', 'R', 188, 4, 'CAN', 'Emily Davis', 15, 4100, 4, 104, 99, 'Round 2', '5-7 6-4 6-4', 'Hard', '2022-01-17', 'A1', 'G', 'Australian Open', 30, NULL, 'L', 165, 2, 'GBR', 'Jane Smith', 50, 2500, 9, 2012);\nINSERT INTO matches VALUES (3, 32, 32, NULL, 'L', 175, 3, 'AUS', 'Michael Brown', 20, 4500, NULL, 105, 85, 'Quarterfinal', '6-3 3-6 7-5', 'Clay', '2022-01-18', 'M1', 'M', 'Monte Carlo', 27, NULL, 'R', 182, 1, 'USA', 'John Doe', 10, 5000, 1, 2012);\n\n-- Insert data into `rankings`\nINSERT INTO rankings VALUES ('2022-01-01', 1, 1, 5000, 15);\nINSERT INTO rankings VALUES ('2022-01-01', 2, 3, 4500, 18);\nINSERT INTO rankings VALUES ('2022-01-01', 3, 2, 2500, 12);\nINSERT INTO rankings VALUES ('2022-01-01', 4, 4, 4100, 20);\nINSERT INTO rankings VALUES ('2022-01-01', 5, 5, 2200, 22);\n", + "battle_death": "\nINSERT INTO battle (id, name, date, bulgarian_commander, latin_commander, result) VALUES\n(1, 'Battle of Varna', '1444-11-10', 'Władysław III', 'Murad II', 'Ottoman victory'),\n(2, 'Battle of Nicopolis', '1396-09-25', 'Ivan Shishman', 'Bayezid I', 'Ottoman victory'),\n(3, 'Battle of Anchialus', '708', 'Tervel', 'Justinian II', 'Bulgarian victory'),\n(4, 'Battle of Kleidion', '1014-07-29', 'Samuel', 'Basil II', 'Byzantine victory'),\n(5, 'Battle of Slivnitsa', '1885-11-17', 'Vladimir Stoichev', 'Prince Alexander I', 'Bulgarian victory');\n\nINSERT INTO ship (lost_in_battle, id, name, tonnage, ship_type, location, disposition_of_ship) VALUES\n(1, 101, 'Vasil Levski', '7500', 'Frigate', 'Black Sea', 'Sunken'),\n(1, 102, 'Asen Ivailov', '4300', 'Destroyer', 'Black Sea', 'Damaged'),\n(2, 103, 'Ivan Alexander', '2900', 'Corvette', 'Danube River', 'Sunken'),\n(3, 104, 'Khan Krum', '5600', 'Battleship', 'Aegean Sea', 'Captured'),\n(4, 105, 'Peter Mogila', '3200', 'Cruiser', 'Adriatic Sea', 'Destroyed');\n\nINSERT INTO death (caused_by_ship_id, id, note, killed, injured) VALUES\n(101, 1001, 'Bombing during battle', 120, 300),\n(102, 1002, 'Ship collision', 60, 140),\n(103, 1003, 'Artillery fire', 200, 450),\n(104, 1004, 'Boarding conflict', 80, 210),\n(105, 1005, 'Sunk by enemy action', 150, 350);\n", + "student_transcripts_tracking": "\nINSERT INTO Addresses VALUES (1, '123 Elm St', '', '', 'Smalltown', '12345', 'Sunny County', 'USA', 'Near the post office');\nINSERT INTO Addresses VALUES (2, '456 Oak Rd', 'Apt 21', '', 'Middletown', '23456', 'Maple County', 'USA', 'Opposite the library');\nINSERT INTO Addresses VALUES (3, '789 Pine Ave', '', 'Suite 5', 'Largetown', '34567', 'Forest County', 'USA', 'Next to the bank');\nINSERT INTO Addresses VALUES (4, '321 Birch Blvd', '', '', 'Tinytown', '45678', 'River County', 'USA', 'Beside the river');\nINSERT INTO Addresses VALUES (5, '654 Palm Circle', 'Bldg 8', '', 'Big City', '56789', 'Mountain County', 'USA', 'Above the cafe');\n\nINSERT INTO Courses VALUES (1, 'Mathematics 101', 'Introduction to Mathematics', 'Required for Science degrees');\nINSERT INTO Courses VALUES (2, 'English Literature', 'Study of English classical texts', 'Elective course');\nINSERT INTO Courses VALUES (3, 'Physics 301', 'Advanced mechanics and properties of matter', 'For Physics majors');\nINSERT INTO Courses VALUES (4, 'Chemistry 200', 'Organic Chemistry', 'Includes lab work');\nINSERT INTO Courses VALUES (5, 'History 101', 'World History overview', 'Required history course');\n\nINSERT INTO Departments VALUES (1, 'Science', 'Science department offers various science related courses', 'Located in Building A');\nINSERT INTO Departments VALUES (2, 'Humanities', 'Focuses on arts, languages, and social sciences', 'Located in Building C');\nINSERT INTO Departments VALUES (3, 'Engineering', 'Covers all engineering disciplines', 'Newly renovated labs');\nINSERT INTO Departments VALUES (4, 'Medicine', 'Trains future doctors and nurses', 'Adjacent to local hospital');\nINSERT INTO Departments VALUES (5, 'Law', 'School of Law', 'Ranked top 10 nationally');\n\nINSERT INTO Degree_Programs VALUES (1, 1, 'BSc in Biology', 'Covers all fundamental Biology topics', 'Includes annual field trips');\nINSERT INTO Degree_Programs VALUES (2, 2, 'BA in English', 'Deep dive into English Literature and Language', 'Hosts yearly literary symposium');\nINSERT INTO Degree_Programs VALUES (3, 3, 'BS in Mechanical Engineering', 'Focus on mechanical and industrial engineering topics', 'Co-op program available');\nINSERT INTO Degree_Programs VALUES (4, 4, 'MD in General Medicine', 'Prepares for medical licensing exam', 'Clinical rotations included');\nINSERT INTO Degree_Programs VALUES (5, 5, 'JD Law Degree', 'Juris Doctor program', 'Moot court competitions annually');\n\nINSERT INTO Sections VALUES (1, 1, 'Math 101 - Section A', 'Morning section of basic math', 'Meets in Room 101');\nINSERT INTO Sections VALUES (2, 2, 'EngLit 101 - Section B', 'Afternoon section', 'Meets in Room 202');\nINSERT INTO Sections VALUES (3, 3, 'Physics 301 - Section C', 'Evening section for advanced physics', 'Lab work in Room 303');\nINSERT INTO Sections VALUES (4, 4, 'Chemistry 200 - Section A', 'Morning section with lab', 'Lab in Room 204');\nINSERT INTO Sections VALUES (5, 5, 'History 101 - Section C', 'Evening classes', 'Room 205');\n\nINSERT INTO Semesters VALUES (1, 'Fall 2023', 'Autumn semester of academic year 2023', 'Classes from September to December');\nINSERT INTO Semesters VALUES (2, 'Spring 2024', 'Spring semester of academic year 2024', 'Classes from January to May');\nINSERT INTO Semesters VALUES (3, 'Summer 2024', 'Summer short semester', 'Accelerated courses from June to August');\nINSERT INTO Semesters VALUES (4, 'Fall 2024', 'Autumn semester of academic year 2024', 'Upcoming classes from September to December');\nINSERT INTO Semesters VALUES (5, 'Spring 2025', 'Spring semester of academic year 2025', 'Plan ahead for classes from January to May');\n\nINSERT INTO Students VALUES (1, 1, 1, 'John', 'A', 'Smith', '555-1234', 'john.smith@example.com', '123-45-6789', '2023-09-01', NULL, 'Physics major');\nINSERT INTO Students VALUES (2, 2, 2, 'Susan', 'B', 'Johnson', '555-2345', 'susan.j@example.com', '234-56-7890', '2023-09-01', NULL, 'Literature enthusiast');\nINSERT INTO Students VALUES (3, 3, 3, 'Robert', 'C', 'Williams', '555-3456', 'robert.w@example.com', '345-67-8901', '2023-09-01', NULL, 'Engineering student');\nINSERT INTO Students VALUES (4, 4, 4, 'Mary', 'D', 'Brown', '555-4567', 'mary.b@example.com', '456-78-9012', '2023-09-01', NULL, 'Aspiring doctor');\nINSERT INTO Students VALUES (5, 5, 5, 'James', 'E', 'Davis', '555-5678', 'james.d@example.com', '567-89-0123', '2023-09-01', NULL, 'Future lawyer');\n\nINSERT INTO Student_Enrolment VALUES (1, 1, 1, 1, 'Full-time Biology student');\nINSERT INTO Student_Enrolment VALUES (2, 2, 2, 2, 'Part-time English student');\nINSERT INTO Student_Enrolment VALUES (3, 3, 3, 3, 'Engineering student specializing in mechanical engineering');\nINSERT INTO Student_Enrolment VALUES (4, 4, 1, 4, 'Attending General Medicine program');\nINSERT INTO Student_Enrolment VALUES (5, 5, 2, 5, 'Studying Law full-time');\n\nINSERT INTO Student_Enrolment_Courses VALUES (1, 1, 1);\nINSERT INTO Student_Enrolment_Courses VALUES (2, 2, 2);\nINSERT INTO Student_Enrolment_Courses VALUES (3, 3, 3);\nINSERT INTO Student_Enrolment_Courses VALUES (4, 4, 4);\nINSERT INTO Student_Enrolment_Courses VALUES (5, 5, 5);\n\nINSERT INTO Transcripts VALUES (1, '2023-12-15', 'End of semester transcript');\nINSERT INTO Transcripts VALUES (2, '2024-05-15', 'Spring semester final grades');\nINSERT INTO Transcripts VALUES (3, '2024-08-15', 'Summer semester grades');\nINSERT INTO Transcripts VALUES (4, '2024-12-15', 'End of Fall 2024 semester');\nINSERT INTO Transcripts VALUES (5, '2025-05-15', 'Spring 2025 semester grades');\n\nINSERT INTO Transcript_Contents VALUES (1, 1);\nINSERT INTO Transcript_Contents VALUES (2, 2);\nINSERT INTO Transcript_Contents VALUES (3, 3);\nINSERT INTO Transcript_Contents VALUES (4, 4);\nINSERT INTO Transcript_Contents VALUES (5, 5);\n", + "tvshow": "\nINSERT INTO TV_Channel (id, series_name, Country, Language, Content, Pixel_aspect_ratio_PAR, Hight_definition_TV, Pay_per_view_PPV, Package_Option) VALUES ('CH1', 'Discovery of Science', 'USA', 'English', 'Science and Technology', '16:9', 'Yes', 'No', 'Basic');\nINSERT INTO TV_Channel (id, series_name, Country, Language, Content, Pixel_aspect_ratio_PAR, Hight_definition_TV, Pay_per_view_PPV, Package_Option) VALUES ('CH2', 'Fantasy World', 'UK', 'English', 'Fantasy Series', '4:3', 'No', 'Yes', 'Premium');\nINSERT INTO TV_Channel (id, series_name, Country, Language, Content, Pixel_aspect_ratio_PAR, Hight_definition_TV, Pay_per_view_PPV, Package_Option) VALUES ('CH3', 'Anime Central', 'Japan', 'Japanese', 'Anime', '16:9', 'Yes', 'No', 'Basic');\nINSERT INTO TV_Channel (id, series_name, Country, Language, Content, Pixel_aspect_ratio_PAR, Hight_definition_TV, Pay_per_view_PPV, Package_Option) VALUES ('CH4', 'History Channel', 'USA', 'English', 'History', '16:9', 'Yes', 'No', 'Basic');\nINSERT INTO TV_Channel (id, series_name, Country, Language, Content, Pixel_aspect_ratio_PAR, Hight_definition_TV, Pay_per_view_PPV, Package_Option) VALUES ('CH5', 'Horror Nights', 'USA', 'English', 'Horror', '4:3', 'No', 'Yes', 'Premium');\n\nINSERT INTO TV_series (id, Episode, Air_Date, Rating, Share, 18_49_Rating_Share, Viewers_m, Weekly_Rank, Channel) VALUES (1, 'The Beginning', '2023-01-10', '9.2', 5, '2.4', '1.1', 20, 'CH1');\nINSERT INTO TV_series (id, Episode, Air_Date, Rating, Share, 18_49_Rating_Share, Viewers_m, Weekly_Rank, Channel) VALUES (2, 'Lost in Space', '2023-01-17', '8.8', 4.5, '2.1', '1.0', 30, 'CH1');\nINSERT INTO TV_series (id, Episode, Air_Date, Rating, Share, 18_49_Rating_Share, Viewers_m, Weekly_Rank, Channel) VALUES (3, 'Dragon Riders', '2023-01-24', '7.5', 4, '1.8', '0.9', 40, 'CH3');\nINSERT INTO TV_series (id, Episode, Air_Date, Rating, Share, 18_49_Rating_Share, Viewers_m, Weekly_Rank, Channel) VALUES (4, 'The Haunted', '2023-02-01', '9.0', 5.5, '3.0', '1.5', 10, 'CH5');\nINSERT INTO TV_series (id, Episode, Air_Date, Rating, Share, 18_49_Rating_Share, Viewers_m, Weekly_Rank, Channel) VALUES (5, 'Time Travelers', '2023-02-08', '8.5', 4.8, '2.5', '1.2', 25, 'CH1');\n\nINSERT INTO Cartoon (id, Title, Directed_by, Written_by, Original_air_date, Production_code, Channel) VALUES (1, 'Mighty Joe', 'Tom Hanks', 'John Carter', '2023-01-05', 1101, 'CH3');\nINSERT INTO Cartoon (id, Title, Directed_by, Written_by, Original_air_date, Production_code, Channel) VALUES (2, 'Samurai Jack', 'George Lucas', 'Steven Mack', '2023-01-12', 1102, 'CH3');\nINSERT INTO Cartoon (id, Title, Directed_by, Written_by, Original_air_date, Production_code, Channel) VALUES (3, 'Rocket Power', 'Chris Sanders', 'Laura Marks', '2023-01-19', 1103, 'CH2');\nINSERT INTO Cartoon (id, Title, Directed_by, Written_by, Original_air_date, Production_code, Channel) VALUES (4, 'The Wild Thornberrys', 'Michael Bay', 'Sarah Connor', '2023-01-26', 1104, 'CH2');\nINSERT INTO Cartoon (id, Title, Directed_by, Written_by, Original_air_date, Production_code, Channel) VALUES (5, 'Adventure Time', 'Tim Burton', 'Jack Black', '2023-02-02', 1105, 'CH3');\n", + "poker_player": "\nINSERT INTO people (People_ID, Nationality, Name, Birth_Date, Height) VALUES (1, 'USA', 'John Doe', '1984-05-23', 180);\nINSERT INTO people (People_ID, Nationality, Name, Birth_Date, Height) VALUES (2, 'Canada', 'Alex Smith', '1990-07-12', 175);\nINSERT INTO people (People_ID, Nationality, Name, Birth_Date, Height) VALUES (3, 'UK', 'Samantha Right', '1982-02-02', 165);\nINSERT INTO people (People_ID, Nationality, Name, Birth_Date, Height) VALUES (4, 'Australia', 'Lucas Graham', '1975-08-15', 183);\nINSERT INTO people (People_ID, Nationality, Name, Birth_Date, Height) VALUES (5, 'Germany', 'Franz Kafka', '1995-04-10', 172);\n\nINSERT INTO poker_player (Poker_Player_ID, People_ID, Final_Table_Made, Best_Finish, Money_Rank, Earnings) VALUES (1, 1, 10, 1, 100, 500000);\nINSERT INTO poker_player (Poker_Player_ID, People_ID, Final_Table_Made, Best_Finish, Money_Rank, Earnings) VALUES (2, 2, 8, 2, 200, 350000);\nINSERT INTO poker_player (Poker_Player_ID, People_ID, Final_Table_Made, Best_Finish, Money_Rank, Earnings) VALUES (3, 3, 12, 1, 50, 750000);\nINSERT INTO poker_player (Poker_Player_ID, People_ID, Final_Table_Made, Best_Finish, Money_Rank, Earnings) VALUES (4, 4, 7, 3, 150, 280000);\nINSERT INTO poker_player (Poker_Player_ID, People_ID, Final_Table_Made, Best_Finish, Money_Rank, Earnings) VALUES (5, 5, 9, 1, 90, 620000);\n", + "voter_1": "\nINSERT INTO AREA_CODE_STATE (area_code, state) VALUES (212, 'New York');\nINSERT INTO AREA_CODE_STATE (area_code, state) VALUES (213, 'California');\nINSERT INTO AREA_CODE_STATE (area_code, state) VALUES (305, 'Florida');\nINSERT INTO AREA_CODE_STATE (area_code, state) VALUES (312, 'Illinois');\nINSERT INTO AREA_CODE_STATE (area_code, state) VALUES (503, 'Oregon');\n\nINSERT INTO CONTESTANTS (contestant_number, contestant_name) VALUES (1, 'John Doe');\nINSERT INTO CONTESTANTS (contestant_number, contestant_name) VALUES (2, 'Jane Smith');\nINSERT INTO CONTESTANTS (contestant_number, contestant_name) VALUES (3, 'Alice Johnson');\nINSERT INTO CONTESTANTS (contestant_number, contestant_name) VALUES (4, 'Mike Brown');\nINSERT INTO CONTESTANTS (contestant_number, contestant_name) VALUES (5, 'Sarah Davis');\n\nINSERT INTO VOTES (vote_id, phone_number, state, contestant_number, created) VALUES (1, 5551001, 'New York', 1, '2023-09-01 08:00:00');\nINSERT INTO VOTES (vote_id, phone_number, state, contestant_number, created) VALUES (2, 5551002, 'California', 2, '2023-09-01 08:05:00');\nINSERT INTO VOTES (vote_id, phone_number, state, contestant_number, created) VALUES (3, 5551003, 'Florida', 3, '2023-09-01 08:10:00');\nINSERT INTO VOTES (vote_id, phone_number, state, contestant_number, created) VALUES (4, 5551004, 'Illinois', 4, '2023-09-01 08:15:00');\nINSERT INTO VOTES (vote_id, phone_number, state, contestant_number, created) VALUES (5, 5551005, 'Oregon', 5, '2023-09-01 08:20:00');\n", + "world_1": "\nINSERT INTO country (Code, Name, Continent, Region, SurfaceArea, IndepYear, Population, LifeExpectancy, GNP, GNPOld, LocalName, GovernmentForm, HeadOfState, Capital, Code2) VALUES\n('USA', 'United States', 'North America', 'North America', 9833517, 1776, 328239523, 78.5, 20412800, 19390600, 'United States', 'Federal Republic', 'Joe Biden', 1, 'US'),\n('CAN', 'Canada', 'North America', 'North America', 9984670, 1867, 37589262, 82.3, 1736426, 1604887, 'Canada', 'Constitutional Monarchy', 'Justin Trudeau', 2, 'CA'),\n('GBR', 'United Kingdom', 'Europe', 'British Isles', 242495, 1066, 67886011, 81.2, 2825200, 2835700, 'United Kingdom', 'Constitutional Monarchy', 'Charles III', 3, 'GB'),\n('CHN', 'China', 'Asia', 'Eastern Asia', 9596960, 221, 1439323776, 76.9, 14342903, 13211221, 'Zhonghua', 'Communist State', 'Xi Jinping', 4, 'CN'),\n('IND', 'India', 'Asia', 'Southern Asia', 3287263, 1947, 1380004385, 69.7, 2875155, 2659984, 'Bharat/India', 'Federal Republic', 'Ram Nath Kovind', 5, 'IN');\n\nINSERT INTO city (ID, Name, CountryCode, District, Population) VALUES\n(1, 'New York', 'USA', 'New York', 8175133),\n(2, 'Los Angeles', 'USA', 'California', 3792621),\n(3, 'Toronto', 'CAN', 'Ontario', 2731571),\n(4, 'Vancouver', 'CAN', 'British Columbia', 631486),\n(5, 'London', 'GBR', 'England', 8787892);\n\nINSERT INTO countrylanguage (CountryCode, Language, IsOfficial, Percentage) VALUES\n('USA', 'English', 'T', 95.0),\n('CAN', 'English', 'T', 58.7),\n('CAN', 'French', 'T', 22.0),\n('GBR', 'English', 'T', 98.0),\n('CHN', 'Mandarin', 'T', 70.3);\n\nINSERT INTO sqlite_sequence (name, seq) VALUES\n('city', '5'),\n('country', '5');\n", + "orchestra": "\nINSERT INTO conductor (Conductor_ID, Name, Age, Nationality, Year_of_Work) VALUES \n(1, 'John Smith', 45, 'USA', 15),\n(2, 'Anna Petrova', 37, 'Russia', 10),\n(3, 'Mark Johnson', 55, 'UK', 26),\n(4, 'Isabella Rosetti', 47, 'Italy', 22),\n(5, 'Lee Chang', 50, 'South Korea', 18);\n\nINSERT INTO orchestra (Orchestra_ID, Orchestra, Conductor_ID, Record_Company, Year_of_Founded, Major_Record_Format) VALUES \n(1, 'London Symphony', 3, 'Decca', 1904, 'Digital'),\n(2, 'Moscow Philharmonic', 2, 'Melodiya', 1951, 'Vinyl'),\n(3, 'New York Philharmonic', 1, 'Sony', 1842, 'CD'),\n(4, 'Berlin Philharmonic', 5, 'Deutsche Grammophon', 1882, 'DVD Audio'),\n(5, 'Vienna Philharmonic', 4, 'EMI', 1842, 'Blu-ray');\n\nINSERT INTO performance (Performance_ID, Orchestra_ID, Type, Date, Official_ratings_(millions), Weekly_rank, Share) VALUES \n(1, 1, 'Concert', '2023-03-01', 2.5, 'Top 10', '20%'),\n(2, 2, 'Opera', '2023-03-05', 3.0, 'Top 20', '15%'),\n(3, 3, 'Ballet', '2023-03-10', 4.0, 'Top 5', '25%'),\n(4, 4, 'Concert', '2023-03-15', 2.0, 'Top 10', '10%'),\n(5, 5, 'Opera', '2023-03-20', 3.8, 'Top 3', '30%');\n\nINSERT INTO show (Show_ID, Performance_ID, If_first_show, Result, Attendance) VALUES \n(1, 1, '2023-03-01 19:00:00', 'Successful', 150),\n(2, 2, '2023-03-05 19:30:00', 'Successful', 180),\n(3, 3, '2023-03-10 20:00:00', 'Average', 160),\n(4, 4, '2023-03-15 18:30:00', 'Cancelled', 0),\n(5, 5, '2023-03-20 19:00:00', 'Successful', 200);\n", + "network_1": "\nINSERT INTO Highschooler (ID, name, grade) VALUES (1, 'John', 10);\nINSERT INTO Highschooler (ID, name, grade) VALUES (2, 'Alice', 10);\nINSERT INTO Highschooler (ID, name, grade) VALUES (3, 'Bob', 11);\nINSERT INTO Highschooler (ID, name, grade) VALUES (4, 'Carol', 10);\nINSERT INTO Highschooler (ID, name, grade) VALUES (5, 'David', 9);\n\nINSERT INTO Friend (student_id, friend_id) VALUES (1, 2);\nINSERT INTO Friend (student_id, friend_id) VALUES (1, 3);\nINSERT INTO Friend (student_id, friend_id) VALUES (2, 4);\nINSERT INTO Friend (student_id, friend_id) VALUES (3, 5);\nINSERT INTO Friend (student_id, friend_id) VALUES (4, 1);\n\nINSERT INTO Likes (student_id, liked_id) VALUES (1, 2);\nINSERT INTO Likes (student_id, liked_id) VALUES (2, 1);\nINSERT INTO Likes (student_id, liked_id) VALUES (3, 4);\nINSERT INTO Likes (student_id, liked_id) VALUES (4, 3);\nINSERT INTO Likes (student_id, liked_id) VALUES (5, 1);\n", + "dog_kennels": "\nINSERT INTO Breeds (breed_code, breed_name) VALUES\n('LAB', 'Labrador'),\n('GSD', 'German Shepherd'),\n('BGL', 'Beagle'),\n('BULD', 'Bulldog'),\n('PDL', 'Poodle');\n\nINSERT INTO Charges (charge_id, charge_type, charge_amount) VALUES\n(1, 'Adoption Fee', 300),\n(2, 'Medical Checkup', 150),\n(3, 'Vaccination', 100),\n(4, 'Spay/Neuter', 200),\n(5, 'Microchipping', 50);\n\nINSERT INTO Sizes (size_code, size_description) VALUES\n('S', 'Small'),\n('M', 'Medium'),\n('L', 'Large'),\n('XL', 'Extra Large'),\n('XXL', 'Extra Extra Large');\n\nINSERT INTO Treatment_Types (treatment_type_code, treatment_type_description) VALUES\n('VAC', 'Vaccination'),\n('CHK', 'Health Check'),\n('SPN', 'Spay/Neuter'),\n('DNT', 'Dental Care'),\n('EMR', 'Emergency Care');\n\nINSERT INTO Owners (owner_id, first_name, last_name, street, city, state, zip_code, email_address, home_phone, cell_number) VALUES\n(1, 'John', 'Doe', '123 Elm St', 'Springfield', 'IL', '62701', 'johndoe@example.com', '217-555-0123', '217-555-2345'),\n(2, 'Jane', 'Smith', '456 Oak Ln', 'Riverdale', 'IL', '60546', 'janesmith@example.com', '312-555-5678', '312-555-7890'),\n(3, 'Jim', 'Beam', '789 Pine Ave', 'Chicago', 'IL', '60601', 'jimbeam@example.com', '773-555-1234', '773-555-4321'),\n(4, 'Alice', 'Johnson', '321 Maple Blvd', 'Peoria', 'IL', '61602', 'alicejohnson@example.com', '309-555-8765', '309-555-6543'),\n(5, 'Bob', 'White', '654 Birch Rd', 'Naperville', 'IL', '60540', 'bobwhite@example.com', '630-555-9876', '630-555-6789');\n\nINSERT INTO Dogs (dog_id, owner_id, abandoned_yn, breed_code, size_code, name, age, date_of_birth, gender, weight, date_arrived, date_adopted, date_departed) VALUES\n(1, 1, 'N', 'LAB', 'L', 'Buddy', '3 years', '2017-06-15', 'Male', '45 lbs', '2020-06-01', '2020-07-15', NULL),\n(2, 2, 'N', 'GSD', 'XL', 'Max', '5 years', '2015-09-20', 'Male', '70 lbs', '2020-05-20', NULL, NULL),\n(3, 3, 'Y', 'BGL', 'M', 'Bella', '2 years', '2018-08-30', 'Female', '20 lbs', '2020-09-15', NULL, NULL),\n(4, 4, 'N', 'BULD', 'M', 'Daisy', '4 years', '2016-11-01', 'Female', '50 lbs', '2021-01-01', '2021-01-25', NULL),\n(5, 5, 'Y', 'PDL', 'S', 'Charlie', '6 months', '2020-12-25', 'Male', '15 lbs', '2021-05-01', NULL, '2021-06-20');\n\nINSERT INTO Professionals (professional_id, role_code, first_name, street, city, state, zip_code, last_name, email_address, home_phone, cell_number) VALUES\n(1, 'VET', 'Sam', '123 Clinic St', 'Springfield', 'IL', '62704', 'Peterson', 'sampeterson@example.com', '217-555-9988', '217-555-9989'),\n(2, 'TRN', 'Laura', '456 Training Ln', 'Chicago', 'IL', '60614', 'Red', 'laurared@example.com', '773-555-2233', '773-555-2244'),\n(3, 'VET', 'Robert', '789 Animal Rd', 'Peoria', 'IL', '61615', 'White', 'robertwhite@example.com', '309-555-3322', '309-555-3323'),\n(4, 'TRN', 'Rachel', '321 Helper Blvd', 'Riverdale', 'IL', '60546', 'Green', 'rachelgreen@example.com', '312-555-4455', '312-555-4456'),\n(5, 'VET', 'David', '654 Vet Ave', 'Naperville', 'IL', '60566', 'Blue', 'davidblue@example.com', '630-555-5566', '630-555-5567');\n\nINSERT INTO Treatments (treatment_id, dog_id, professional_id, treatment_type_code, date_of_treatment, cost_of_treatment) VALUES\n(1, 1, 1, 'VAC', '2021-01-02 00:00:00', 80),\n(2, 2, 3, 'CHK', '2021-02-15 00:00:00', 120),\n(3, 3, 1, 'SPN', '2021-03-22 00:00:00', 200),\n(4, 4, 5, 'DNT', '2021-04-25 00:00:00', 150),\n(5, 5, 3, 'EMR', '2021-05-30 00:00:00', 300);\n", + "singer": "\nINSERT INTO singer (Singer_ID, Name, Birth_Year, Net_Worth_Millions, Citizenship) VALUES (1, 'John Doe', 1980, 120, 'USA');\nINSERT INTO singer (Singer_ID, Name, Birth_Year, Net_Worth_Millions, Citizenship) VALUES (2, 'Jane Smith', 1975, 95, 'Canada');\nINSERT INTO singer (Singer_ID, Name, Birth_Year, Net_Worth_Millions, Citizenship) VALUES (3, 'Alice Johnson', 1990, 60, 'UK');\nINSERT INTO singer (Singer_ID, Name, Birth_Year, Net_Worth_Millions, Citizenship) VALUES (4, 'Chris Lee', 1985, 110, 'Australia');\nINSERT INTO singer (Singer_ID, Name, Birth_Year, Net_Worth_Millions, Citizenship) VALUES (5, 'Bob Brown', 1982, 78, 'USA');\n\nINSERT INTO song (Song_ID, Title, Singer_ID, Sales, Highest_Position) VALUES (1, 'Forever Young', 1, 500000, 1);\nINSERT INTO song (Song_ID, Title, Singer_ID, Sales, Highest_Position) VALUES (2, 'Neverland', 2, 250000, 2);\nINSERT INTO song (Song_ID, Title, Singer_ID, Sales, Highest_Position) VALUES (3, 'Dream High', 3, 300000, 3);\nINSERT INTO song (Song_ID, Title, Singer_ID, Sales, Highest_Position) VALUES (4, 'Stars Align', 4, 450000, 2);\nINSERT INTO song (Song_ID, Title, Singer_ID, Sales, Highest_Position) VALUES (5, 'Night Sky', 5, 150000, 4);\n", + "real_estate_properties": "\nINSERT INTO Ref_Feature_Types (feature_type_code, feature_type_name) VALUES \n('FT1', 'Luxury'), \n('FT2', 'Budget'), \n('FT3', 'Eco-Friendly'), \n('FT4', 'Family-Oriented'), \n('FT5', 'Pet-Friendly');\n\nINSERT INTO Ref_Property_Types (property_type_code, property_type_description) VALUES \n('PT1', 'Apartment'), \n('PT2', 'House'), \n('PT3', 'Field'), \n('PT4', 'Shop'), \n('PT5', 'Other');\n\nINSERT INTO Other_Available_Features (feature_id, feature_type_code, feature_name, feature_description) VALUES \n(1, 'FT1', 'Swimming Pool', 'Luxury swimming pool with heating'),\n(2, 'FT1', 'Home Theater', 'State-of-the-art home theater system'),\n(3, 'FT1', 'Spa', 'In-home spa setup'),\n(4, 'FT2', 'Basic Kitchen', 'Functional kitchen with necessary appliances'),\n(5, 'FT2', 'Minimalistic Furniture', 'Basic, minimalistic furniture set');\n\nINSERT INTO Properties (property_id, property_type_code, date_on_market, date_sold, property_name, property_address, room_count, vendor_requested_price, buyer_offered_price, agreed_selling_price, apt_feature_1, apt_feature_2, apt_feature_3, fld_feature_1, fld_feature_2, fld_feature_3, hse_feature_1, hse_feature_2, hse_feature_3, oth_feature_1, oth_feature_2, oth_feature_3, shp_feature_1, shp_feature_2, shp_feature_3, other_property_details) VALUES \n(1, 'PT1', '2023-01-20', '2023-01-25', 'Sunny Heights', '123 Sun Road', 3, 350000, 340000, 345000, 'Air Conditioning', 'Balcony', 'Underground Parking', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Close to public transport'),\n(2, 'PT2', '2023-01-15', NULL, 'Meadow Cottage', '456 Meadow Lane', 5, 500000, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Large Garden', 'Double Garage', 'Solar Panels', NULL, NULL, NULL, NULL, NULL, NULL, 'Near schools and parks'),\n(3, 'PT3', '2023-01-30', NULL, 'Green Field', '789 Country Rd', 0, 200000, NULL, NULL, NULL, NULL, NULL, 'Fenced', 'Water Access', 'Natural Views', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Agricultural potential'),\n(4, 'PT4', '2023-02-01', NULL, 'City Shop', '159 Urban St', 1, 600000, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'High foot traffic', 'Storage room', 'Displays', 'Prime commercial area'),\n(5, 'PT5', '2023-02-05', NULL, 'Riverside Camp', '321 River Road', 2, 150000, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Fireplace', 'Outdoor Sitting', 'Tree Surrounds', NULL, NULL, NULL, 'Perfect for getaway retreats');\n\nINSERT INTO Other_Property_Features (property_id, feature_id, property_feature_description) VALUES \n(1, 1, 'Heated swimming pool on roof-top'),\n(1, 2, 'Home theater in living room'),\n(2, 3, 'Spa area in main bedroom'),\n(2, 1, 'Outdoor swimming pool in garden'),\n(3, 5, 'Open field with minimalistic benches');\n" +} \ No newline at end of file diff --git a/examples/spider-using-ts/src/scripts/schema.json b/examples/spider-using-ts/src/scripts/schema.json new file mode 100644 index 00000000..b1f15501 --- /dev/null +++ b/examples/spider-using-ts/src/scripts/schema.json @@ -0,0 +1,22 @@ +{ + "concert_singer": "CREATE TABLE stadium (\n Stadium_ID NUMERIC PRIMARY KEY,\n Location TEXT,\n Name TEXT,\n Capacity NUMERIC,\n Highest NUMERIC,\n Lowest NUMERIC,\n Average NUMERIC\n);\n\nCREATE TABLE singer (\n Singer_ID NUMERIC PRIMARY KEY,\n Name TEXT,\n Country TEXT,\n Song_Name TEXT,\n Song_release_year TEXT,\n Age NUMERIC,\n Is_male DATETIME\n);\n\nCREATE TABLE concert (\n concert_ID NUMERIC PRIMARY KEY,\n concert_Name TEXT,\n Theme TEXT,\n Stadium_ID TEXT,\n Year TEXT,\n FOREIGN KEY (Stadium_ID) REFERENCES stadium(Stadium_ID)\n);\n\nCREATE TABLE singer_in_concert (\n concert_ID NUMERIC PRIMARY KEY,\n Singer_ID TEXT,\n FOREIGN KEY (Singer_ID) REFERENCES singer(Singer_ID),\n FOREIGN KEY (concert_ID) REFERENCES concert(concert_ID)\n);", + "pets_1": "CREATE TABLE Student (\n StuID NUMERIC PRIMARY KEY,\n LName TEXT,\n Fname TEXT,\n Age NUMERIC,\n Sex TEXT,\n Major NUMERIC,\n Advisor NUMERIC,\n city_code TEXT\n);\n\nCREATE TABLE Has_Pet (\n StuID NUMERIC,\n PetID NUMERIC,\n FOREIGN KEY (StuID) REFERENCES Student(StuID),\n FOREIGN KEY (PetID) REFERENCES Pets(PetID)\n);\n\nCREATE TABLE Pets (\n PetID NUMERIC PRIMARY KEY,\n PetType TEXT,\n pet_age NUMERIC,\n weight NUMERIC\n);", + "car_1": "CREATE TABLE continents (\n ContId NUMERIC PRIMARY KEY,\n Continent TEXT\n);\n\nCREATE TABLE countries (\n CountryId NUMERIC PRIMARY KEY,\n CountryName TEXT,\n Continent NUMERIC,\n FOREIGN KEY (Continent) REFERENCES continents(ContId)\n);\n\nCREATE TABLE car_makers (\n Id NUMERIC PRIMARY KEY,\n Maker TEXT,\n FullName TEXT,\n Country TEXT,\n FOREIGN KEY (Country) REFERENCES countries(CountryId)\n);\n\nCREATE TABLE model_list (\n ModelId NUMERIC PRIMARY KEY,\n Maker NUMERIC,\n Model TEXT,\n FOREIGN KEY (Maker) REFERENCES car_makers(Id)\n);\n\nCREATE TABLE car_names (\n MakeId NUMERIC PRIMARY KEY,\n Model TEXT,\n Make TEXT,\n FOREIGN KEY (Model) REFERENCES model_list(Model)\n);\n\nCREATE TABLE cars_data (\n Id NUMERIC PRIMARY KEY,\n MPG TEXT,\n Cylinders NUMERIC,\n Edispl NUMERIC,\n Horsepower TEXT,\n Weight NUMERIC,\n Accelerate NUMERIC,\n Year NUMERIC,\n FOREIGN KEY (Id) REFERENCES car_names(MakeId)\n);", + "flight_2": "CREATE TABLE airlines (\n uid NUMERIC PRIMARY KEY,\n Airline TEXT,\n Abbreviation TEXT,\n Country TEXT\n);\n\nCREATE TABLE airports (\n City TEXT,\n AirportCode TEXT PRIMARY KEY,\n AirportName TEXT,\n Country TEXT,\n CountryAbbrev TEXT\n);\n\nCREATE TABLE flights (\n Airline NUMERIC PRIMARY KEY,\n FlightNo NUMERIC,\n SourceAirport TEXT,\n DestAirport TEXT,\n FOREIGN KEY (DestAirport) REFERENCES airports(AirportCode),\n FOREIGN KEY (SourceAirport) REFERENCES airports(AirportCode)\n);", + "employee_hire_evaluation": "CREATE TABLE employee (\n Employee_ID NUMERIC PRIMARY KEY,\n Name TEXT,\n Age NUMERIC,\n City TEXT\n);\n\nCREATE TABLE shop (\n Shop_ID NUMERIC PRIMARY KEY,\n Name TEXT,\n Location TEXT,\n District TEXT,\n Number_products NUMERIC,\n Manager_name TEXT\n);\n\nCREATE TABLE hiring (\n Shop_ID NUMERIC,\n Employee_ID NUMERIC PRIMARY KEY,\n Start_from TEXT,\n Is_full_time DATETIME,\n FOREIGN KEY (Employee_ID) REFERENCES employee(Employee_ID),\n FOREIGN KEY (Shop_ID) REFERENCES shop(Shop_ID)\n);\n\nCREATE TABLE evaluation (\n Employee_ID TEXT PRIMARY KEY,\n Year_awarded TEXT,\n Bonus NUMERIC,\n FOREIGN KEY (Employee_ID) REFERENCES employee(Employee_ID)\n);", + "cre_Doc_Template_Mgt": "CREATE TABLE Ref_Template_Types (\n Template_Type_Code TEXT PRIMARY KEY,\n Template_Type_Description TEXT\n);\n\nCREATE TABLE Templates (\n Template_ID NUMERIC PRIMARY KEY,\n Version_Number NUMERIC,\n Template_Type_Code TEXT,\n Date_Effective_From DATETIME,\n Date_Effective_To DATETIME,\n Template_Details TEXT,\n FOREIGN KEY (Template_Type_Code) REFERENCES Ref_Template_Types(Template_Type_Code)\n);\n\nCREATE TABLE Documents (\n Document_ID NUMERIC PRIMARY KEY,\n Template_ID NUMERIC,\n Document_Name TEXT,\n Document_Description TEXT,\n Other_Details TEXT,\n FOREIGN KEY (Template_ID) REFERENCES Templates(Template_ID)\n);\n\nCREATE TABLE Paragraphs (\n Paragraph_ID NUMERIC PRIMARY KEY,\n Document_ID NUMERIC,\n Paragraph_Text TEXT,\n Other_Details TEXT,\n FOREIGN KEY (Document_ID) REFERENCES Documents(Document_ID)\n);", + "course_teach": "CREATE TABLE course (\n Course_ID NUMERIC PRIMARY KEY,\n Staring_Date TEXT,\n Course TEXT\n);\n\nCREATE TABLE teacher (\n Teacher_ID NUMERIC PRIMARY KEY,\n Name TEXT,\n Age TEXT,\n Hometown TEXT\n);\n\nCREATE TABLE course_arrange (\n Course_ID NUMERIC PRIMARY KEY,\n Teacher_ID NUMERIC,\n Grade NUMERIC,\n FOREIGN KEY (Teacher_ID) REFERENCES teacher(Teacher_ID),\n FOREIGN KEY (Course_ID) REFERENCES course(Course_ID)\n);", + "museum_visit": "CREATE TABLE museum (\n Museum_ID NUMERIC PRIMARY KEY,\n Name TEXT,\n Num_of_Staff NUMERIC,\n Open_Year TEXT\n);\n\nCREATE TABLE visitor (\n ID NUMERIC PRIMARY KEY,\n Name TEXT,\n Level_of_membership NUMERIC,\n Age NUMERIC\n);\n\nCREATE TABLE visit (\n Museum_ID NUMERIC PRIMARY KEY,\n visitor_ID TEXT,\n Num_of_Ticket NUMERIC,\n Total_spent NUMERIC,\n FOREIGN KEY (visitor_ID) REFERENCES visitor(ID),\n FOREIGN KEY (Museum_ID) REFERENCES museum(Museum_ID)\n);", + "wta_1": "CREATE TABLE players (\n player_id NUMERIC PRIMARY KEY,\n first_name TEXT,\n last_name TEXT,\n hand TEXT,\n birth_date DATETIME,\n country_code TEXT\n);\n\nCREATE TABLE matches (\n best_of NUMERIC,\n draw_size NUMERIC,\n loser_age NUMERIC,\n loser_entry TEXT,\n loser_hand TEXT,\n loser_ht NUMERIC,\n loser_id NUMERIC,\n loser_ioc TEXT,\n loser_name TEXT,\n loser_rank NUMERIC,\n loser_rank_points NUMERIC,\n loser_seed NUMERIC,\n match_num NUMERIC,\n minutes NUMERIC,\n round TEXT,\n score TEXT,\n surface TEXT,\n tourney_date DATETIME,\n tourney_id TEXT,\n tourney_level TEXT,\n tourney_name TEXT,\n winner_age NUMERIC,\n winner_entry TEXT,\n winner_hand TEXT,\n winner_ht NUMERIC,\n winner_id NUMERIC,\n winner_ioc TEXT,\n winner_name TEXT,\n winner_rank NUMERIC,\n winner_rank_points NUMERIC,\n winner_seed NUMERIC,\n year NUMERIC,\n FOREIGN KEY (winner_id) REFERENCES players(player_id),\n FOREIGN KEY (loser_id) REFERENCES players(player_id)\n);\n\nCREATE TABLE rankings (\n ranking_date DATETIME,\n ranking NUMERIC,\n player_id NUMERIC,\n ranking_points NUMERIC,\n tours NUMERIC,\n FOREIGN KEY (player_id) REFERENCES players(player_id)\n);", + "battle_death": "CREATE TABLE battle (\n id NUMERIC PRIMARY KEY,\n name TEXT,\n date TEXT,\n bulgarian_commander TEXT,\n latin_commander TEXT,\n result TEXT\n);\n\nCREATE TABLE ship (\n lost_in_battle NUMERIC,\n id NUMERIC PRIMARY KEY,\n name TEXT,\n tonnage TEXT,\n ship_type TEXT,\n location TEXT,\n disposition_of_ship TEXT,\n FOREIGN KEY (lost_in_battle) REFERENCES battle(id)\n);\n\nCREATE TABLE death (\n caused_by_ship_id NUMERIC,\n id NUMERIC PRIMARY KEY,\n note TEXT,\n killed NUMERIC,\n injured NUMERIC,\n FOREIGN KEY (caused_by_ship_id) REFERENCES ship(id)\n);", + "student_transcripts_tracking": "CREATE TABLE Addresses (\n address_id NUMERIC PRIMARY KEY,\n line_1 TEXT,\n line_2 TEXT,\n line_3 TEXT,\n city TEXT,\n zip_postcode TEXT,\n state_province_county TEXT,\n country TEXT,\n other_address_details TEXT\n);\n\nCREATE TABLE Courses (\n course_id NUMERIC PRIMARY KEY,\n course_name TEXT,\n course_description TEXT,\n other_details TEXT\n);\n\nCREATE TABLE Departments (\n department_id NUMERIC PRIMARY KEY,\n department_name TEXT,\n department_description TEXT,\n other_details TEXT\n);\n\nCREATE TABLE Degree_Programs (\n degree_program_id NUMERIC PRIMARY KEY,\n department_id NUMERIC,\n degree_summary_name TEXT,\n degree_summary_description TEXT,\n other_details TEXT,\n FOREIGN KEY (department_id) REFERENCES Departments(department_id)\n);\n\nCREATE TABLE Sections (\n section_id NUMERIC PRIMARY KEY,\n course_id NUMERIC,\n section_name TEXT,\n section_description TEXT,\n other_details TEXT,\n FOREIGN KEY (course_id) REFERENCES Courses(course_id)\n);\n\nCREATE TABLE Semesters (\n semester_id NUMERIC PRIMARY KEY,\n semester_name TEXT,\n semester_description TEXT,\n other_details TEXT\n);\n\nCREATE TABLE Students (\n student_id NUMERIC PRIMARY KEY,\n current_address_id NUMERIC,\n permanent_address_id NUMERIC,\n first_name TEXT,\n middle_name TEXT,\n last_name TEXT,\n cell_mobile_number TEXT,\n email_address TEXT,\n ssn TEXT,\n date_first_registered DATETIME,\n date_left DATETIME,\n other_student_details TEXT,\n FOREIGN KEY (permanent_address_id) REFERENCES Addresses(address_id),\n FOREIGN KEY (current_address_id) REFERENCES Addresses(address_id)\n);\n\nCREATE TABLE Student_Enrolment (\n student_enrolment_id NUMERIC PRIMARY KEY,\n degree_program_id NUMERIC,\n semester_id NUMERIC,\n student_id NUMERIC,\n other_details TEXT,\n FOREIGN KEY (student_id) REFERENCES Students(student_id),\n FOREIGN KEY (semester_id) REFERENCES Semesters(semester_id),\n FOREIGN KEY (degree_program_id) REFERENCES Degree_Programs(degree_program_id)\n);\n\nCREATE TABLE Student_Enrolment_Courses (\n student_course_id NUMERIC PRIMARY KEY,\n course_id NUMERIC,\n student_enrolment_id NUMERIC,\n FOREIGN KEY (student_enrolment_id) REFERENCES Student_Enrolment(student_enrolment_id),\n FOREIGN KEY (course_id) REFERENCES Courses(course_id)\n);\n\nCREATE TABLE Transcripts (\n transcript_id NUMERIC PRIMARY KEY,\n transcript_date DATETIME,\n other_details TEXT\n);\n\nCREATE TABLE Transcript_Contents (\n student_course_id NUMERIC,\n transcript_id NUMERIC,\n FOREIGN KEY (transcript_id) REFERENCES Transcripts(transcript_id),\n FOREIGN KEY (student_course_id) REFERENCES Student_Enrolment_Courses(student_course_id)\n);", + "tvshow": "CREATE TABLE TV_Channel (\n id TEXT PRIMARY KEY,\n series_name TEXT,\n Country TEXT,\n Language TEXT,\n Content TEXT,\n Pixel_aspect_ratio_PAR TEXT,\n Hight_definition_TV TEXT,\n Pay_per_view_PPV TEXT,\n Package_Option TEXT\n);\n\nCREATE TABLE TV_series (\n id NUMERIC PRIMARY KEY,\n Episode TEXT,\n Air_Date TEXT,\n Rating TEXT,\n Share NUMERIC,\n 18_49_Rating_Share TEXT,\n Viewers_m TEXT,\n Weekly_Rank NUMERIC,\n Channel TEXT,\n FOREIGN KEY (Channel) REFERENCES TV_Channel(id)\n);\n\nCREATE TABLE Cartoon (\n id NUMERIC PRIMARY KEY,\n Title TEXT,\n Directed_by TEXT,\n Written_by TEXT,\n Original_air_date TEXT,\n Production_code NUMERIC,\n Channel TEXT,\n FOREIGN KEY (Channel) REFERENCES TV_Channel(id)\n);", + "poker_player": "CREATE TABLE poker_player (\n Poker_Player_ID NUMERIC PRIMARY KEY,\n People_ID NUMERIC,\n Final_Table_Made NUMERIC,\n Best_Finish NUMERIC,\n Money_Rank NUMERIC,\n Earnings NUMERIC,\n FOREIGN KEY (People_ID) REFERENCES people(People_ID)\n);\n\nCREATE TABLE people (\n People_ID NUMERIC PRIMARY KEY,\n Nationality TEXT,\n Name TEXT,\n Birth_Date TEXT,\n Height NUMERIC\n);", + "voter_1": "CREATE TABLE AREA_CODE_STATE (\n area_code NUMERIC PRIMARY KEY,\n state TEXT\n);\n\nCREATE TABLE CONTESTANTS (\n contestant_number NUMERIC PRIMARY KEY,\n contestant_name TEXT\n);\n\nCREATE TABLE VOTES (\n vote_id NUMERIC PRIMARY KEY,\n phone_number NUMERIC,\n state TEXT,\n contestant_number NUMERIC,\n created DATETIME,\n FOREIGN KEY (contestant_number) REFERENCES CONTESTANTS(contestant_number),\n FOREIGN KEY (state) REFERENCES AREA_CODE_STATE(state)\n);", + "world_1": "CREATE TABLE city (\n ID NUMERIC PRIMARY KEY,\n Name TEXT,\n CountryCode TEXT,\n District TEXT,\n Population NUMERIC,\n FOREIGN KEY (CountryCode) REFERENCES country(Code)\n);\n\nCREATE TABLE sqlite_sequence (\n name TEXT,\n seq TEXT\n);\n\nCREATE TABLE country (\n Code TEXT PRIMARY KEY,\n Name TEXT,\n Continent TEXT,\n Region TEXT,\n SurfaceArea NUMERIC,\n IndepYear NUMERIC,\n Population NUMERIC,\n LifeExpectancy NUMERIC,\n GNP NUMERIC,\n GNPOld NUMERIC,\n LocalName TEXT,\n GovernmentForm TEXT,\n HeadOfState TEXT,\n Capital NUMERIC,\n Code2 TEXT\n);\n\nCREATE TABLE countrylanguage (\n CountryCode TEXT PRIMARY KEY,\n Language TEXT,\n IsOfficial TEXT,\n Percentage NUMERIC,\n FOREIGN KEY (CountryCode) REFERENCES country(Code)\n);", + "orchestra": "CREATE TABLE conductor (\n Conductor_ID NUMERIC PRIMARY KEY,\n Name TEXT,\n Age NUMERIC,\n Nationality TEXT,\n Year_of_Work NUMERIC\n);\n\nCREATE TABLE orchestra (\n Orchestra_ID NUMERIC PRIMARY KEY,\n Orchestra TEXT,\n Conductor_ID NUMERIC,\n Record_Company TEXT,\n Year_of_Founded NUMERIC,\n Major_Record_Format TEXT,\n FOREIGN KEY (Conductor_ID) REFERENCES conductor(Conductor_ID)\n);\n\nCREATE TABLE performance (\n Performance_ID NUMERIC PRIMARY KEY,\n Orchestra_ID NUMERIC,\n Type TEXT,\n Date TEXT,\n Official_ratings_(millions) NUMERIC,\n Weekly_rank TEXT,\n Share TEXT,\n FOREIGN KEY (Orchestra_ID) REFERENCES orchestra(Orchestra_ID)\n);\n\nCREATE TABLE show (\n Show_ID NUMERIC,\n Performance_ID NUMERIC,\n If_first_show DATETIME,\n Result TEXT,\n Attendance NUMERIC,\n FOREIGN KEY (Performance_ID) REFERENCES performance(Performance_ID)\n);", + "network_1": "CREATE TABLE Highschooler (\n ID NUMERIC PRIMARY KEY,\n name TEXT,\n grade NUMERIC\n);\n\nCREATE TABLE Friend (\n student_id NUMERIC PRIMARY KEY,\n friend_id NUMERIC,\n FOREIGN KEY (friend_id) REFERENCES Highschooler(ID),\n FOREIGN KEY (student_id) REFERENCES Highschooler(ID)\n);\n\nCREATE TABLE Likes (\n student_id NUMERIC PRIMARY KEY,\n liked_id NUMERIC,\n FOREIGN KEY (student_id) REFERENCES Highschooler(ID),\n FOREIGN KEY (liked_id) REFERENCES Highschooler(ID)\n);", + "dog_kennels": "CREATE TABLE Breeds (\n breed_code TEXT PRIMARY KEY,\n breed_name TEXT\n);\n\nCREATE TABLE Charges (\n charge_id NUMERIC PRIMARY KEY,\n charge_type TEXT,\n charge_amount NUMERIC\n);\n\nCREATE TABLE Sizes (\n size_code TEXT PRIMARY KEY,\n size_description TEXT\n);\n\nCREATE TABLE Treatment_Types (\n treatment_type_code TEXT PRIMARY KEY,\n treatment_type_description TEXT\n);\n\nCREATE TABLE Owners (\n owner_id NUMERIC PRIMARY KEY,\n first_name TEXT,\n last_name TEXT,\n street TEXT,\n city TEXT,\n state TEXT,\n zip_code TEXT,\n email_address TEXT,\n home_phone TEXT,\n cell_number TEXT\n);\n\nCREATE TABLE Dogs (\n dog_id NUMERIC PRIMARY KEY,\n owner_id NUMERIC,\n abandoned_yn TEXT,\n breed_code TEXT,\n size_code TEXT,\n name TEXT,\n age TEXT,\n date_of_birth DATETIME,\n gender TEXT,\n weight TEXT,\n date_arrived DATETIME,\n date_adopted DATETIME,\n date_departed DATETIME,\n FOREIGN KEY (owner_id) REFERENCES Owners(owner_id),\n FOREIGN KEY (owner_id) REFERENCES Owners(owner_id),\n FOREIGN KEY (size_code) REFERENCES Sizes(size_code),\n FOREIGN KEY (breed_code) REFERENCES Breeds(breed_code)\n);\n\nCREATE TABLE Professionals (\n professional_id NUMERIC PRIMARY KEY,\n role_code TEXT,\n first_name TEXT,\n street TEXT,\n city TEXT,\n state TEXT,\n zip_code TEXT,\n last_name TEXT,\n email_address TEXT,\n home_phone TEXT,\n cell_number TEXT\n);\n\nCREATE TABLE Treatments (\n treatment_id NUMERIC PRIMARY KEY,\n dog_id NUMERIC,\n professional_id NUMERIC,\n treatment_type_code TEXT,\n date_of_treatment DATETIME,\n cost_of_treatment NUMERIC,\n FOREIGN KEY (dog_id) REFERENCES Dogs(dog_id),\n FOREIGN KEY (professional_id) REFERENCES Professionals(professional_id),\n FOREIGN KEY (treatment_type_code) REFERENCES Treatment_Types(treatment_type_code)\n);", + "singer": "CREATE TABLE singer (\n Singer_ID NUMERIC PRIMARY KEY,\n Name TEXT,\n Birth_Year NUMERIC,\n Net_Worth_Millions NUMERIC,\n Citizenship TEXT\n);\n\nCREATE TABLE song (\n Song_ID NUMERIC PRIMARY KEY,\n Title TEXT,\n Singer_ID NUMERIC,\n Sales NUMERIC,\n Highest_Position NUMERIC,\n FOREIGN KEY (Singer_ID) REFERENCES singer(Singer_ID)\n);", + "real_estate_properties": "CREATE TABLE Ref_Feature_Types (\n feature_type_code TEXT PRIMARY KEY,\n feature_type_name TEXT\n);\n\nCREATE TABLE Ref_Property_Types (\n property_type_code TEXT PRIMARY KEY,\n property_type_description TEXT\n);\n\nCREATE TABLE Other_Available_Features (\n feature_id NUMERIC PRIMARY KEY,\n feature_type_code TEXT,\n feature_name TEXT,\n feature_description TEXT,\n FOREIGN KEY (feature_type_code) REFERENCES Ref_Feature_Types(feature_type_code)\n);\n\nCREATE TABLE Properties (\n property_id NUMERIC PRIMARY KEY,\n property_type_code TEXT,\n date_on_market DATETIME,\n date_sold DATETIME,\n property_name TEXT,\n property_address TEXT,\n room_count NUMERIC,\n vendor_requested_price NUMERIC,\n buyer_offered_price NUMERIC,\n agreed_selling_price NUMERIC,\n apt_feature_1 TEXT,\n apt_feature_2 TEXT,\n apt_feature_3 TEXT,\n fld_feature_1 TEXT,\n fld_feature_2 TEXT,\n fld_feature_3 TEXT,\n hse_feature_1 TEXT,\n hse_feature_2 TEXT,\n hse_feature_3 TEXT,\n oth_feature_1 TEXT,\n oth_feature_2 TEXT,\n oth_feature_3 TEXT,\n shp_feature_1 TEXT,\n shp_feature_2 TEXT,\n shp_feature_3 TEXT,\n other_property_details TEXT,\n FOREIGN KEY (property_type_code) REFERENCES Ref_Property_Types(property_type_code)\n);\n\nCREATE TABLE Other_Property_Features (\n property_id NUMERIC,\n feature_id NUMERIC,\n property_feature_description TEXT,\n FOREIGN KEY (property_id) REFERENCES Properties(property_id),\n FOREIGN KEY (feature_id) REFERENCES Other_Available_Features(feature_id)\n);" +} \ No newline at end of file diff --git a/examples/spider-using-ts/src/utils.ts b/examples/spider-using-ts/src/utils.ts new file mode 100644 index 00000000..ba5688c0 --- /dev/null +++ b/examples/spider-using-ts/src/utils.ts @@ -0,0 +1,27 @@ +import { v4 as uuidv4 } from "uuid"; +import fs from "fs"; + +export function loadJson(name: string): any { + const file = fs.readFileSync(name, "utf-8"); + return JSON.parse(file); +} + +export function removeBackticks(text: string): string { + /** + * If we find backticks, return the code snippet from within them + */ + const prunedText = text.replace("```sql", ""); + const found = prunedText.match(/```(.*?)```/s); + if (found && found.length > 1) { + return found[1]; + } else { + return prunedText; + } +} + +export function cleanClosingBraces(text: string): string { + /** + * For Claude + */ + return text.replace("", ""); +} \ No newline at end of file diff --git a/packages/empiricalrun/src/bin/config.ts b/packages/empiricalrun/src/bin/config.ts index 28a9accb..76dfed60 100644 --- a/packages/empiricalrun/src/bin/config.ts +++ b/packages/empiricalrun/src/bin/config.ts @@ -21,6 +21,7 @@ export async function readEmpiricalConfig(): Promise { }); return config; } catch (err: any) { + console.error(err); console.log(buildErrorLog(`Failed to read ${fileName} file`)); console.log(buildWarningLog("Please ensure running init command first")); process.exit(1); diff --git a/packages/empiricalrun/src/bin/dataset/dataset.test.ts b/packages/empiricalrun/src/bin/dataset/dataset.test.ts index dbf730d7..23d95a86 100644 --- a/packages/empiricalrun/src/bin/dataset/dataset.test.ts +++ b/packages/empiricalrun/src/bin/dataset/dataset.test.ts @@ -2,33 +2,6 @@ import { expect, test, vi } from "vitest"; import { loadDataset } from "./index"; import { LoaderType, loaders } from "./loaders"; -test("can load dataset without any ids", async () => { - const dataset = await loadDataset({ - samples: [ - { - inputs: {}, - }, - ], - }); - expect(dataset?.id).toBe("0d41a81e415558e36aef80cbbaf9a61a"); - const sample = dataset?.samples[0]; - expect(sample?.id).toBe("1"); -}); - -test("can load dataset sample which has an id", async () => { - const dataset = await loadDataset({ - samples: [ - { - id: "test-sample-id", - inputs: {}, - }, - ], - }); - expect(dataset?.id).toBe("e66638e3d1cb0b830c5ecced806f2d38"); - const sample = dataset?.samples[0]; - expect(sample?.id).toBe("test-sample-id"); -}); - test("can load dataset from jsonl with ids", async () => { vi.mock("node:fs", async () => { const mockedData = { key1: "value1", key2: "value2" }; @@ -42,7 +15,6 @@ test("can load dataset from jsonl with ids", async () => { const dataset = await loadDataset({ path: `test.jsonl`, }); - expect(dataset?.id).toBe("608d158ebd6d2dc2ccf2b4140e95406f"); const sample = dataset?.samples[0]; expect(sample?.id).toBe("1"); expect(sample?.inputs.key1).toBe("value1"); @@ -52,7 +24,6 @@ test("load dataset from google sheet", async () => { const dataset = await loadDataset({ path: "https://docs.google.com/spreadsheets/d/1AsMekKCG74m1PbBZQN_sEJgaW0b9Xarg4ms4mhG3i5k/edit#gid=0", }); - expect(dataset.id).toBeDefined(); expect(dataset.samples?.[0]?.id).toBeDefined(); expect(dataset.samples?.[0]?.inputs).toBeDefined(); }); @@ -61,7 +32,6 @@ test("load dataset from a specific sheet of google sheet", async () => { const dataset = await loadDataset({ path: "https://docs.google.com/spreadsheets/d/1AsMekKCG74m1PbBZQN_sEJgaW0b9Xarg4ms4mhG3i5k/edit#gid=1009685491", }); - expect(dataset.id).toBeDefined(); expect(dataset.samples?.[0]?.id).toBeDefined(); expect(dataset.samples?.[0]?.inputs).toBeDefined(); expect(dataset.samples?.[0]?.inputs?.user_name).toBe("Jimmy"); diff --git a/packages/empiricalrun/src/bin/dataset/index.ts b/packages/empiricalrun/src/bin/dataset/index.ts index 6a0fa433..b268e061 100644 --- a/packages/empiricalrun/src/bin/dataset/index.ts +++ b/packages/empiricalrun/src/bin/dataset/index.ts @@ -1,6 +1,6 @@ -import { Dataset, DatasetConfig, DatasetSample } from "@empiricalrun/types"; +import { DatasetConfig, DatasetSample } from "@empiricalrun/types"; import { promises as fs } from "fs"; -import { loaders, hashContents, LoaderType } from "./loaders"; +import { loaders, LoaderType } from "./loaders"; import { DatasetError, DatasetErrorEnum } from "../error"; import { fetchWithRetry } from "@empiricalrun/fetch"; @@ -55,7 +55,9 @@ async function fetchContents(path: string): Promise { } } -export async function loadDataset(config: DatasetConfig): Promise { +export async function loadDataset( + config: DatasetConfig, +): Promise<{ samples: DatasetSample[] }> { let samples: DatasetSample[] = []; let contents: string; @@ -96,7 +98,6 @@ export async function loadDataset(config: DatasetConfig): Promise { } return { - id: hashContents(contents), samples, }; } diff --git a/packages/empiricalrun/src/bin/dataset/loaders.ts b/packages/empiricalrun/src/bin/dataset/loaders.ts index 5e9b99ea..93c102ba 100644 --- a/packages/empiricalrun/src/bin/dataset/loaders.ts +++ b/packages/empiricalrun/src/bin/dataset/loaders.ts @@ -1,4 +1,4 @@ -import { DatasetSample } from "@empiricalrun/types"; +import { DatasetSample, DatasetSampleInputs } from "@empiricalrun/types"; import crypto from "crypto"; import { DatasetError, DatasetErrorEnum } from "../error"; import csv from "csvtojson"; @@ -7,9 +7,9 @@ type LoaderFunction = (contents: string) => Promise; async function jsonLoader(contents: string): Promise { try { - const parsed: Record[] = JSON.parse(contents); + const parsed: DatasetSampleInputs[] = JSON.parse(contents); const datasetSamples: DatasetSample[] = parsed.map( - (inputs: Record, index: number) => { + (inputs, index: number) => { return { id: `${index + 1}`, inputs, diff --git a/packages/empiricalrun/src/bin/index.ts b/packages/empiricalrun/src/bin/index.ts index 17fae079..b104e7d0 100644 --- a/packages/empiricalrun/src/bin/index.ts +++ b/packages/empiricalrun/src/bin/index.ts @@ -22,6 +22,7 @@ import { RunCompletion, RunStatsUpdate, RuntimeOptions, + DatasetSample, } from "@empiricalrun/types"; import { failedOutputsSummary, @@ -37,6 +38,7 @@ import { getCliProgressLoggerInstance, } from "./logger/cli-logger"; import { readEmpiricalConfig } from "./config"; +import { hashContents } from "./dataset/loaders"; const cwd = process.cwd(); @@ -76,10 +78,19 @@ program const startTime = performance.now(); const { runs, dataset: datasetConfig } = await readEmpiricalConfig(); + let samples: DatasetSample[]; let dataset: Dataset; const store = new EmpiricalStore(); try { - dataset = await loadDataset(datasetConfig); + if (typeof datasetConfig === "function") { + samples = (await datasetConfig()).samples; + } else { + samples = (await loadDataset(datasetConfig)).samples; + } + dataset = { + samples, + id: hashContents(JSON.stringify(samples)), + }; const datasetRecorder = store.getDatasetRecorder(); await datasetRecorder(dataset); } catch (error) { @@ -272,6 +283,8 @@ program dataset: Dataset; persistToFile: boolean; }; + const { runs: actualRuns } = await readEmpiricalConfig(); + runs[0]!.scorers = actualRuns[0]!.scorers; telemetry.logEvent("ui.run.start", { ...runEventProperties(runs, dataset), persist_to_file: persistToFile, diff --git a/packages/empiricalrun/src/index.ts b/packages/empiricalrun/src/index.ts index 06d74b26..8ba7e091 100644 --- a/packages/empiricalrun/src/index.ts +++ b/packages/empiricalrun/src/index.ts @@ -4,3 +4,4 @@ export * from "./store"; export * from "./db"; export * from "./telemetry"; export * from "@empiricalrun/types"; +export * from "./bin/dataset"; diff --git a/packages/scorer/src/index.ts b/packages/scorer/src/index.ts index c70fc8f7..6870aff3 100644 --- a/packages/scorer/src/index.ts +++ b/packages/scorer/src/index.ts @@ -5,8 +5,7 @@ import { RunOutput, RuntimeOptions, } from "@empiricalrun/types"; -import { ScorerError, ScorerErrorEnum } from "./error"; -import getScoringFn from "./provider"; +import scoreUsingConfig from "./provider"; export default async function score({ sample, @@ -28,25 +27,7 @@ export default async function score({ scorers .filter((s) => !!s) .map((scorer) => { - const scoringFn = getScoringFn(scorer); - if (!scoringFn) { - const errorMessage = (scorer: Scorer) => { - let recommendation: string = - "See supported scorers: https://docs.empirical.run/scoring/basics"; - if ((scorer.type as string) === "llm-criteria") { - recommendation = 'Did you mean "llm-critic"?'; - } else if ((scorer.type as string) === "is-json") { - recommendation = 'Did you mean "json-syntax"?'; - } - return `Invalid scorer name "${scorer.type}". ${recommendation}`; - }; - throw new ScorerError( - ScorerErrorEnum.INCORRECT_PARAMETERS, - errorMessage(scorer), - ); - } - return scoringFn({ - config: scorer, + return scoreUsingConfig(scorer, { sample, output, options, diff --git a/packages/scorer/src/provider/deterministic/js-script.ts b/packages/scorer/src/provider/deterministic/js-script.ts new file mode 100644 index 00000000..a9287302 --- /dev/null +++ b/packages/scorer/src/provider/deterministic/js-script.ts @@ -0,0 +1,42 @@ +import { + DatasetSample, + JSScriptScorer, + RunOutput, + Score, +} from "@empiricalrun/types"; + +function camelToKebab(str: string) { + if (!str) { + return str; + } + return str + .replace(/([a-z0-9])([A-Z])/g, "$1-$2") // handle lowercase or digit followed by uppercase + .replace(/([A-Z])([A-Z][a-z])/g, "$1-$2") // handle uppercase followed by uppercase-lowercase + .toLowerCase(); // convert the entire string to lowercase +} + +export default async function scoreWithJSScript({ + output, + config, + sample, +}: { + output: RunOutput; + config: JSScriptScorer; + sample: DatasetSample; +}): Promise { + const { inputs } = sample; + let score = config({ output, inputs }); + if ("then" in score) { + score = await score; + } + if (!Array.isArray(score)) { + return [ + { + ...score, + name: score.name || camelToKebab(config.name) || "js-script", + }, + ]; + } else { + return score; + } +} diff --git a/packages/scorer/src/provider/deterministic/json.test.ts b/packages/scorer/src/provider/deterministic/json.test.ts index f18cbbab..76d1342e 100644 --- a/packages/scorer/src/provider/deterministic/json.test.ts +++ b/packages/scorer/src/provider/deterministic/json.test.ts @@ -4,11 +4,7 @@ import { isJson } from "./json"; test("json-syntax on empty json", async () => { expect( await isJson({ - sample: { id: "1", inputs: {} }, output: { value: "{}" }, - config: { - type: "json-syntax", - }, }), ).toStrictEqual([ { diff --git a/packages/scorer/src/provider/deterministic/json.ts b/packages/scorer/src/provider/deterministic/json.ts index 0621a12b..28da7f98 100644 --- a/packages/scorer/src/provider/deterministic/json.ts +++ b/packages/scorer/src/provider/deterministic/json.ts @@ -1,17 +1,12 @@ -import { ScoringFn } from "../../interface/scorer"; +import { RunOutput, Score } from "@empiricalrun/types"; export const name = "json-syntax"; -export const isJson: ScoringFn = async ({ output, config }) => { - if (config.type !== name) { - return [ - { - score: 0, - name, - message: "invalid type of scorer detected", - }, - ]; - } +export const isJson = async ({ + output, +}: { + output: RunOutput; +}): Promise => { let isValid = false; let invalidMsg = "JSON is invalid"; if (output !== undefined && output !== null) { diff --git a/packages/scorer/src/provider/deterministic/script.test.ts b/packages/scorer/src/provider/deterministic/py-script.test.ts similarity index 91% rename from packages/scorer/src/provider/deterministic/script.test.ts rename to packages/scorer/src/provider/deterministic/py-script.test.ts index 4f84efc6..48e8a64d 100644 --- a/packages/scorer/src/provider/deterministic/script.test.ts +++ b/packages/scorer/src/provider/deterministic/py-script.test.ts @@ -1,6 +1,6 @@ import { DatasetSample, RunOutput, Scorer } from "@empiricalrun/types"; import { expect, test } from "vitest"; -import { scoreWithPythonScript } from "./script"; +import { scoreWithPythonScript } from "./py-script"; import score from "../../index"; const humanEvalSample = { @@ -154,12 +154,12 @@ test("py-script scorer works when returning array of scores", async () => { }; const result = await score({ sample, output, scorers: [scorer] }); expect(result.length).toBe(2); - expect(result[0].score).toBe(1); - expect(result[0].name).toBe("score_1"); - expect(result[0].message).toBe(undefined); - expect(result[1].score).toBe(0); - expect(result[1].name).toBe("score_2"); - expect(result[1].message).toBe("why this failed"); + expect(result[0]?.score).toBe(1); + expect(result[0]?.name).toBe("score_1"); + expect(result[0]?.message).toBe(undefined); + expect(result[1]?.score).toBe(0); + expect(result[1]?.name).toBe("score_2"); + expect(result[1]?.message).toBe("why this failed"); }); test("py-script scorer works when returning single score without name", async () => { @@ -177,7 +177,7 @@ test("py-script scorer works when returning single score without name", async () }; const result = await score({ sample, output, scorers: [scorer] }); expect(result.length).toBe(1); - expect(result[0].score).toBe(1); - expect(result[0].message).toBe(undefined); - expect(result[0].name).toBe("single-score"); + expect(result[0]?.score).toBe(1); + expect(result[0]?.message).toBe(undefined); + expect(result[0]?.name).toBe("single-score"); }); diff --git a/packages/scorer/src/provider/deterministic/script.ts b/packages/scorer/src/provider/deterministic/py-script.ts similarity index 91% rename from packages/scorer/src/provider/deterministic/script.ts rename to packages/scorer/src/provider/deterministic/py-script.ts index c566ca32..6f3c502e 100644 --- a/packages/scorer/src/provider/deterministic/script.ts +++ b/packages/scorer/src/provider/deterministic/py-script.ts @@ -1,7 +1,11 @@ -import { ScoringFn } from "../../interface/scorer"; import { PythonShell } from "python-shell"; import path from "path"; -import { Score } from "@empiricalrun/types"; +import { + DatasetSample, + RunOutput, + Score, + ScriptScorer, +} from "@empiricalrun/types"; export const name = "py-script"; @@ -10,11 +14,16 @@ const wrapperScriptDirectory = path.join(__dirname, "..", "..", "python"); const wrapperScriptFile = "wrapper.py"; const executionOutputIdentifier = "scorer_output:"; -export const scoreWithPythonScript: ScoringFn = async ({ +export const scoreWithPythonScript = async ({ sample, output, config, options, +}: { + sample: DatasetSample; + output: RunOutput; + config: ScriptScorer; + options?: any; }): Promise => { if (config.type !== "py-script") { return [ diff --git a/packages/scorer/src/provider/deterministic/sql.test.ts b/packages/scorer/src/provider/deterministic/sql.test.ts index b7050380..6c87ed6f 100644 --- a/packages/scorer/src/provider/deterministic/sql.test.ts +++ b/packages/scorer/src/provider/deterministic/sql.test.ts @@ -4,13 +4,9 @@ import { checkSqlSyntax } from "./sql"; test("sql-syntax works with backticks", async () => { expect( await checkSqlSyntax({ - sample: { id: "1", inputs: {} }, output: { value: "SELECT `column` FROM `table`", }, - config: { - type: "sql-syntax", - }, }), ).toStrictEqual([ { @@ -24,13 +20,9 @@ test("sql-syntax works with backticks", async () => { test("sql-syntax fails with empty output", async () => { expect( await checkSqlSyntax({ - sample: { id: "1", inputs: {} }, output: { value: "", }, - config: { - type: "sql-syntax", - }, }), ).toStrictEqual([ { @@ -44,11 +36,7 @@ test("sql-syntax fails with empty output", async () => { test("sql-syntax works with markdown", async () => { expect( await checkSqlSyntax({ - sample: { id: "1", inputs: {} }, output: { value: "```SELECT table * FROM" }, - config: { - type: "sql-syntax", - }, }), ).toStrictEqual([ { @@ -73,13 +61,9 @@ WHERE stadium_id = ( );`; expect( await checkSqlSyntax({ - sample: { id: "1", inputs: {} }, output: { value: query, }, - config: { - type: "sql-syntax", - }, }), ).toStrictEqual([ { diff --git a/packages/scorer/src/provider/deterministic/sql.ts b/packages/scorer/src/provider/deterministic/sql.ts index 6f3c4ff2..585d019b 100644 --- a/packages/scorer/src/provider/deterministic/sql.ts +++ b/packages/scorer/src/provider/deterministic/sql.ts @@ -1,9 +1,13 @@ import { Parser } from "node-sql-parser"; -import { ScoringFn } from "../../interface/scorer"; +import { RunOutput, Score } from "@empiricalrun/types"; export const syntaxName = "sql-syntax"; -export const checkSqlSyntax: ScoringFn = async ({ output }) => { +export const checkSqlSyntax = async ({ + output, +}: { + output: RunOutput; +}): Promise => { let isSQLQuery = false; let errorMsg = "SQL is invalid"; const parser = new Parser(); diff --git a/packages/scorer/src/provider/index.ts b/packages/scorer/src/provider/index.ts index 7393c0a1..ab673aa7 100644 --- a/packages/scorer/src/provider/index.ts +++ b/packages/scorer/src/provider/index.ts @@ -1,23 +1,61 @@ -import { ScoringFn } from "../interface/scorer"; -import { isJson, name as jsonName } from "./deterministic/json"; -import { - scoreWithPythonScript, - name as scriptName, -} from "./deterministic/script"; -import { syntaxName, checkSqlSyntax } from "./deterministic/sql"; -import { name as llmName, checkLlmCriteria } from "./model-graded/llm"; +import { DatasetSample, RunOutput, Score, Scorer } from "@empiricalrun/types"; +import { isJson } from "./deterministic/json"; +import { scoreWithPythonScript } from "./deterministic/py-script"; +import { checkSqlSyntax } from "./deterministic/sql"; +import { checkLlmCriteria } from "./model-graded/llm"; +import { ScorerError, ScorerErrorEnum } from "../error"; +import scoreWithJSScript from "./deterministic/js-script"; -const map = new Map([ - [jsonName, isJson], - [syntaxName, checkSqlSyntax], - [llmName, checkLlmCriteria], - [scriptName, scoreWithPythonScript], -]); +function buildErrorMessage(config: Scorer): string { + let recommendation: string = + "See supported scorers: https://docs.empirical.run/scoring/basics"; + let errorMessage = `Invalid scorer. ${recommendation}`; + if ("type" in config) { + if ((config.type as string) === "llm-criteria") { + recommendation = 'Did you mean "llm-critic"?'; + } else if ((config.type as string) === "is-json") { + recommendation = 'Did you mean "json-syntax"?'; + } + errorMessage = `Invalid scorer name "${config.type}". ${recommendation}`; + } + return errorMessage; +} -export default function getScoringFn({ - type, -}: { - type: string; -}): ScoringFn | undefined { - return map.get(type); +export default async function scoreUsingConfig( + config: Scorer, + { + sample, + output, + options, + }: { + sample: DatasetSample; + output: RunOutput; + options?: any; + }, +): Promise { + if ("type" in config) { + if (config.type === "py-script") { + return scoreWithPythonScript({ sample, output, config, options }); + } + if (config.type === "llm-critic") { + return checkLlmCriteria({ sample, output, config }); + } + if (config.type === "json-syntax") { + return isJson({ output }); + } + if (config.type === "sql-syntax") { + return checkSqlSyntax({ output }); + } + } + if (typeof config === "function") { + return scoreWithJSScript({ + sample, + output, + config, + }); + } + throw new ScorerError( + ScorerErrorEnum.INCORRECT_PARAMETERS, + buildErrorMessage(config), + ); } diff --git a/packages/scorer/src/provider/model-graded/llm.ts b/packages/scorer/src/provider/model-graded/llm.ts index a2499f5f..bb8a4292 100644 --- a/packages/scorer/src/provider/model-graded/llm.ts +++ b/packages/scorer/src/provider/model-graded/llm.ts @@ -1,6 +1,11 @@ -import { ScoringFn } from "../../interface/scorer"; import OpenAI from "openai"; import { EmpiricalAI, replacePlaceholders } from "@empiricalrun/ai"; +import { + DatasetSample, + LLMScorer, + RunOutput, + Score, +} from "@empiricalrun/types"; async function askLlmForEvalResult( messages: OpenAI.ChatCompletionMessageParam[], @@ -45,21 +50,16 @@ export const name = "llm-critic"; const systemPrompt = `You are an expert evaluator who grades an output string based on a criteria. The output must fulfil the criteria to pass the evaluation.`; -export const checkLlmCriteria: ScoringFn = async ({ +export const checkLlmCriteria = async ({ sample, output, config, -}) => { +}: { + sample: DatasetSample; + output: RunOutput; + config: LLMScorer; +}): Promise => { let criteria = ""; - if (config.type !== "llm-critic") { - return [ - { - name, - score: 0, - message: "invalid scoring function detected", - }, - ]; - } const scorerName = config.name || name; if (config.criteria) { let replacements: any = { ...sample.inputs }; diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index fe54bd3d..0a6e725c 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -38,8 +38,21 @@ export interface ScriptScorer extends ScorerBase { name?: string; path: string; } +export interface JSScriptScorerParams { + inputs: Record; + output: RunOutput; +} -export type Scorer = LLMScorer | SyntaxScorer | ScriptScorer; +export interface JSScriptScorer { + ( + args: JSScriptScorerParams, + ): + | Score[] + | (Partial & { score: number }) + | Promise & { score: number })>; +} + +export type Scorer = LLMScorer | SyntaxScorer | ScriptScorer | JSScriptScorer; export type Prompt = string | ChatPrompt[]; @@ -89,7 +102,7 @@ export interface ModelRunConfig extends RunConfigBase { | "fireworks" | "azure-openai"; model: string; - prompt?: Prompt; + prompt: Prompt; parameters?: ModelParameters; } @@ -110,11 +123,6 @@ export interface AssistantsRunConfig extends RunConfigBase { }; } -export interface JSScriptRunConfig extends RunConfigBase { - type: "js-script"; - path: string; -} - export interface PyScriptRunConfig extends RunConfigBase { type: "py-script"; path: string; @@ -127,7 +135,6 @@ export interface PyScriptRunConfig extends RunConfigBase { export type RunConfig = | ModelRunConfig | PyScriptRunConfig - | JSScriptRunConfig | AssistantsRunConfig; export interface ScoreStats { @@ -223,7 +230,7 @@ export type RunSampleOutput = { export type Score = { score: number; name: string; - message: string; + message?: string; }; export interface RunMetadataUpdate { @@ -267,9 +274,13 @@ export interface RuntimeOptions { pythonPath: string; } +export interface DatasetLoader { + (): Promise<{ samples: DatasetSample[] }>; +} + export type Config = { $schema?: string; runs: RunConfig[]; - dataset: DatasetConfig; + dataset: DatasetConfig | DatasetLoader; scorers?: Scorer[]; }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b8c3d208..1c27a0f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3123,6 +3123,7 @@ packages: /are-we-there-yet@3.0.1: resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. dependencies: delegates: 1.0.0 readable-stream: 3.6.2 @@ -5121,6 +5122,7 @@ packages: /gauge@4.0.4: resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. dependencies: aproba: 2.0.0 color-support: 1.1.3 @@ -6484,6 +6486,7 @@ packages: /npmlog@6.0.2: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. dependencies: are-we-there-yet: 3.0.1 console-control-strings: 1.1.0 @@ -7442,6 +7445,7 @@ packages: /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} + hasBin: true dependencies: lru-cache: 6.0.0