diff --git a/.vscode/launch.json b/.vscode/launch.json
index eafdeb3dea..5bb9457378 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -10,7 +10,7 @@
"type": "node",
"cwd": "${workspaceFolder}",
"preLaunchTask": "npm: compile-cli",
- "args": ["run", "packages/sample/genaisrc/summarize-import.genai.mjs", "packages/sample/src/questions.md"]
+ "args": ["run", "summarize", "packages/sample/src/rag/markdown.md", "--json"]
},
{
"name": "Run - sample",
diff --git a/docs/src/content/docs/getting-started/testing-scripts.mdx b/docs/src/content/docs/getting-started/testing-scripts.mdx
new file mode 100644
index 0000000000..11286c6bab
--- /dev/null
+++ b/docs/src/content/docs/getting-started/testing-scripts.mdx
@@ -0,0 +1,51 @@
+---
+title: Testing scripts
+sidebar:
+ order: 4.6
+---
+import providerSrc from "../../../../../packages/core/src/genaiscript-api-provider.mjs?raw"
+import { Code } from '@astrojs/starlight/components';
+
+It is possible to declare tests and assertions in the `script` function
+to validate the output of the script.
+
+The tests are executed by [promptfoo](https://promptfoo.dev/).
+[promptfoo](https://promptfoo.dev/) is tool for evaluating LLM output quality.
+
+## Declaring tests
+
+The tests are added as an array of objects in the `tests` key of the `script` function.
+
+```js title="proofreader.genai.js"
+scripts({
+ ...,
+ tests: [{
+ files: "src/rag/testcode.ts",
+ rubrics: "is a report with a list of issues",
+ facts: ["The report says that the input string should be validated before use."]
+ }]
+})
+```
+
+## Running tests
+
+You can use the cli to run the tests for one or more scripts.
+
+```sh
+npx genaiscript test proofreader
+```
+
+If `script` is not provided, all scripts with tests will be tested.
+
+## Viewing results
+
+The results of the tests can be explored through the [promptfoo web ui](https://promptfoo.dev/docs/usage/web-ui).
+
+```sh
+npx promptfoo view
+```
+
+## Known limitations
+
+Currently, promptfoo treats the script source as the prompt text. Therefore, one cannot use assertions
+that also rely on the input text, such as `answer_relevance`.
diff --git a/docs/src/content/docs/guides/promptfoo.mdx b/docs/src/content/docs/guides/promptfoo.mdx
deleted file mode 100644
index 650f50c1f4..0000000000
--- a/docs/src/content/docs/guides/promptfoo.mdx
+++ /dev/null
@@ -1,71 +0,0 @@
----
-title: Testing with promptfoo
-sidebar:
- order: 20
----
-import providerSrc from "../../../../../packages/cli/src/genaiscript-api-provider.mjs?raw"
-import { Code } from '@astrojs/starlight/components';
-
-[promptfoo](https://promptfoo.dev/) is a CLI and library for evaluating LLM output quality.
-The guide below shows how to use genaiscript in your promptfoo configurations.
-
-## Configuring
-
-GenAIScript uses a [custom javascript](https://promptfoo.dev/docs/providers/custom-api/)
-provider to integrate with promptfoo. It allows to import the GenAIScript script files (`.genai.js` files)
-as prompts in the promptfoo configuration.
-
-- Install [promptfoo](https://www.promptfoo.dev/docs/installation)
-- Save `genaiscript-api-provider.mjs` below in your project.
-- Add the provider to your `genaiscript.config.yaml` file.
-
-```yaml
-providers:
- - id: ./genaiscript-api-provider.mjs
- label: genaiscript:gpt35
- config:
- model: gpt-3.5-turbo
-```
-
-- Add the script ids or file path to the `prompts` section
-
-```yaml
-prompts:
- - summarize # we have a script with id "summarize.genai.js"
-```
-
-### Limitations
-
-Currently, promptfoo treats the genaiscript javascript source as the prompt. Therefore, one cannot use assertions
-that also rely on the input text, such as `answer_relevance`.
-
-## Configuration parameters
-
-The provider calls the [cli](/genaiscript/reference/cli) to run the prompt.
-The configuration contains various parameters that are converted to command line arguments.
-
-| Parameter | Description |
-|--------------------|------------------|
-| `model` | The LLM model to use. |
-| `temperature` | The temperature to use. |
-| `top_p` | The `top p` to use. |
-| `cache` | set to `false` to disable cache |
-| `version` | The genaiscript version to use if you need to pin it. |
-
-
-## Test vars
-
-The `var.files` can be used to pass the markdown file or files to
-the genaiscript provider. It will populate the `env.files` variable in the script.
-
-```js
-tests:
- - vars:
- files: ./mydocument.md
-```
-
-### GenAIScript provider
-
-
-
-- [GitHub source](https://github.com/microsoft/genaiscript/blob/main/packages/cli/src/genaiscript-api-provider.mjs)
\ No newline at end of file
diff --git a/docs/src/content/docs/reference/cli/commands.md b/docs/src/content/docs/reference/cli/commands.md
index 01dd2fe2d0..80fa62aa8d 100644
--- a/docs/src/content/docs/reference/cli/commands.md
+++ b/docs/src/content/docs/reference/cli/commands.md
@@ -85,6 +85,29 @@ Options:
-h, --help display help for command
```
+## `test`
+
+```
+Usage: genaiscript test [options] [script]
+
+Runs the tests for scripts
+
+Arguments:
+ script Script id. If not provided, all scripts are
+ tested
+
+Options:
+ --models [models...] models to test where mode is the key value
+ pair list of m (model), t (temperature), p
+ (top-p)
+ -o, --out output folder
+ -rmo, --remove-out remove output folder if it exists
+ --cli override path to the cli
+ -tp, --test-provider test provider
+ --view open test viewer once tests are executed
+ -h, --help display help for command
+```
+
## `scripts`
```
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 9b70a299ca..75be124e7e 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -23,10 +23,10 @@
"description": "A CLI for GenAIScript, a generative AI scripting framework.",
"license": "MIT",
"dependencies": {
- "tree-sitter-wasms": "^0.1.11",
- "web-tree-sitter": "^0.22.2",
"pdfjs-dist": "4.0.379",
- "typescript": "5.4.5"
+ "tree-sitter-wasms": "^0.1.11",
+ "typescript": "5.4.5",
+ "web-tree-sitter": "^0.22.2"
},
"optionalDependencies": {
"llamaindex": "0.1.21"
@@ -35,6 +35,7 @@
"node": ">=20.0.0"
},
"devDependencies": {
+ "promptfoo": "^0.55.0",
"@llamaindex/env": "^0.0.5",
"@types/fs-extra": "^11.0.4",
"@types/node": "^20.12.7",
@@ -62,7 +63,7 @@
"zx": "^8.0.2"
},
"scripts": {
- "compile": "esbuild src/main.ts --bundle --platform=node --target=node20 --outfile=built/genaiscript.cjs --external:pdfjs-dist --external:llamaindex --external:web-tree-sitter --external:tree-sitter-wasms && node ../../scripts/patch-cli.mjs",
+ "compile": "esbuild src/main.ts --bundle --platform=node --target=node20 --outfile=built/genaiscript.cjs --external:pdfjs-dist --external:llamaindex --external:web-tree-sitter --external:tree-sitter-wasms --external:promptfoo && node ../../scripts/patch-cli.mjs",
"postcompile": "node built/genaiscript.cjs info help > ../../docs/src/content/docs/reference/cli/commands.md",
"go": "yarn compile && node built/genaiscript.cjs",
"test": "node --import tsx --test src/**.test.ts",
diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts
index 755b482234..564e1adaa1 100644
--- a/packages/cli/src/cli.ts
+++ b/packages/cli/src/cli.ts
@@ -34,6 +34,7 @@ import {
import { compileScript, createScript, listScripts } from "./scripts"
import { codeQuery } from "./codequery"
import { modelInfo, systemInfo } from "./info"
+import { scriptsTest } from "./test"
export async function cli() {
process.on("uncaughtException", (err) => {
@@ -157,28 +158,51 @@ export async function cli() {
)
.action(batchScript)
+ program
+ .command("test")
+ .description("Runs the tests for scripts")
+ .argument(
+ "[script]",
+ "Script id. If not provided, all scripts are tested"
+ )
+ .action(scriptsTest)
+ .option(
+ "--models [models...]",
+ "models to test where mode is the key value pair list of m (model), t (temperature), p (top-p)"
+ )
+ .option("-o, --out ", "output folder")
+ .option("-rmo, --remove-out", "remove output folder if it exists")
+ .option("--cli ", "override path to the cli")
+ .option("-tp, --test-provider ", "test provider")
+ .option("--view", "open test viewer once tests are executed")
+
const scripts = program
- .command("scripts").alias("script")
+ .command("scripts")
+ .alias("script")
.description("Utility tasks for scripts")
- scripts.command("list", { isDefault: true })
+ scripts
+ .command("list", { isDefault: true })
.description("List all available scripts in workspace")
.action(listScripts)
- scripts.command("create")
+ scripts
+ .command("create")
.description("Create a new script")
.argument("", "Name of the script")
.action(createScript)
- scripts.command("compile")
+ scripts
+ .command("compile")
.description("Compile all script in workspace")
.action(compileScript)
- scripts.command("model")
+ scripts
+ .command("model")
.description("Show model connection information for scripts")
.argument("[script]", "Script id or file")
.option("-t, --token", "show token")
.action(modelInfo)
-
const retrieval = program
- .command("retrieval").alias("retreival")
+ .command("retrieval")
+ .alias("retreival")
.description("RAG support")
retrieval
.command("index")
@@ -221,7 +245,8 @@ export async function cli() {
.action(startServer)
const parser = program
- .command("parse").alias("parsers")
+ .command("parse")
+ .alias("parsers")
.description("Parse various outputs")
parser
.command("fence ")
@@ -259,9 +284,7 @@ export async function cli() {
.argument("", "input JSONL files")
.action(jsonl2json)
- const info = program
- .command("info")
- .description("Utility tasks")
+ const info = program.command("info").description("Utility tasks")
info.command("help")
.description("Show help for all commands")
.action(helpAll)
diff --git a/packages/cli/src/genaiscript-api-provider.mjs b/packages/cli/src/genaiscript-api-provider.mjs
deleted file mode 100644
index 89e4387d3e..0000000000
--- a/packages/cli/src/genaiscript-api-provider.mjs
+++ /dev/null
@@ -1,66 +0,0 @@
-import { execa } from "execa"
-
-// https://promptfoo.dev/docs/providers/custom-api
-class GenAIScriptApiProvider {
- constructor(options) {
- this.config = options.config
- this.providerId =
- options.id || `genaiscript:${this.config.model || "default"}`
- }
-
- id() {
- return this.providerId
- }
-
- /**
- @returns interface ProviderResponse {
- error?: string;
- output?: string | object;
- tokenUsage?: Partial<{
- total: number;
- prompt: number;
- completion: number;
- cached?: number;
- }>;
- cached?: boolean;
- cost?: number; // required for cost assertion
- logProbs?: number[]; // required for perplexity assertion
- }
- */
- async callApi(prompt, context) {
- const { model, temperature, top_p, cache, version } = this.config
- const { vars } = context
- let files = vars.files // string or string[]
- if (files && !Array.isArray(files)) files = [files] // ensure array
-
- const command = "npx"
- const package = version ? `genaiscript@${version}` : "genaiscript"
- const args = ["--yes", package, "run", prompt]
- if (files) args.push(...files)
- if (model) args.push("--model", model)
- if (temperature !== undefined) args.push("--temperature", temperature)
- if (top_p !== undefined) args.push("--top_p", top_p)
- if (vars.vars) args.push("--vars", vars.vars)
- if (cache === false) args.push("--no-cache")
-
- const { stdout, exitCode, failed } = await execa(command, args, {
- cleanup: true,
- preferLocal: true,
- stripFinalNewline: true,
- })
-
- // warning issued with pdfjs
- const output = stdout?.replace(
- "Warning: TT: undefined function: 32",
- ""
- )
- const error = failed ? `exit code ${exitCode}` : undefined
-
- return {
- output,
- error,
- }
- }
-}
-
-export default GenAIScriptApiProvider
diff --git a/packages/cli/src/run.ts b/packages/cli/src/run.ts
index 52989fe1e6..8a6a106b6c 100644
--- a/packages/cli/src/run.ts
+++ b/packages/cli/src/run.ts
@@ -63,8 +63,8 @@ export async function runScript(
}
) {
const excludedFiles = options.excludedFiles
- const stream = !options.json && !options.yaml && !options.out
const out = options.out
+ const stream = !options.json && !options.yaml && !out
const skipLLM = !!options.prompt
const retry = parseInt(options.retry) || 8
const retryDelay = parseInt(options.retryDelay) || 15000
@@ -88,7 +88,9 @@ export async function runScript(
const spinner =
!stream && !isQuiet
- ? createProgressSpinner("preparing tool and files")
+ ? createProgressSpinner(
+ `preparing tools in ${process.cwd()}`
+ )
: undefined
const fail = (msg: string, exitCode: number) => {
if (spinner) spinner.fail(msg)
@@ -171,20 +173,20 @@ ${Array.from(files)
parseVars(options.vars)
)
- spinner?.start("Querying")
-
let tokens = 0
let res: FragmentTransformResponse
try {
res = await runTemplate(script, fragment, {
infoCb: ({ text }) => {
- if (spinner) spinner.start(text)
- else logVerbose(text)
+ if (text) {
+ if (spinner) spinner.start(text)
+ else if (!isQuiet) logVerbose(text)
+ }
},
partialCb: ({ responseChunk, tokensSoFar }) => {
tokens = tokensSoFar
- if (stream) process.stdout.write(responseChunk)
- else if (spinner) spinner.report({ count: tokens })
+ if (stream && responseChunk) process.stdout.write(responseChunk)
+ if (spinner) spinner.report({ count: tokens })
},
skipLLM,
label,
@@ -307,6 +309,4 @@ ${Array.from(files)
logVerbose(`error annotations found, exiting with error code`)
process.exit(ANNOTATION_ERROR_CODE)
}
-
- if (!skipLLM) logVerbose(`genaiscript generated ${tokens} tokens`)
}
diff --git a/packages/cli/src/test.ts b/packages/cli/src/test.ts
new file mode 100644
index 0000000000..3bc7184ea1
--- /dev/null
+++ b/packages/cli/src/test.ts
@@ -0,0 +1,90 @@
+import { generatePromptFooConfiguration } from "genaiscript-core/src/test"
+import { buildProject } from "./build"
+import {
+ GENAISCRIPT_FOLDER,
+ YAMLStringify,
+ logVerbose,
+ normalizeFloat,
+ parseKeyValuePairs,
+ promptFooDriver,
+} from "genaiscript-core"
+import { writeFile } from "fs/promises"
+import { execa } from "execa"
+import { join } from "node:path"
+import { emptyDir, ensureDir } from "fs-extra"
+
+function parseModelSpec(m: string): ModelOptions {
+ const vals = parseKeyValuePairs(m)
+ if (Object.keys(vals).length)
+ return {
+ model: vals["m"],
+ temperature: normalizeFloat(vals["t"]),
+ topP: normalizeFloat(vals["p"]),
+ }
+ else return { model: m }
+}
+
+export async function scriptsTest(
+ id: string,
+ options: {
+ out?: string
+ cli?: string
+ removeOut?: boolean
+ testProvider?: string
+ models?: string[]
+ view?: boolean
+ }
+) {
+ const prj = await buildProject()
+ const scripts = prj.templates
+ .filter((t) => t.tests?.length)
+ .filter((t) => !id || t.id === id)
+ if (!scripts.length) throw new Error(`no script with tests found`)
+
+ const cli = options.cli || __filename
+ const out = options.out || join(GENAISCRIPT_FOLDER, "tests")
+ const provider = join(out, "provider.mjs")
+ const testProvider = options?.testProvider
+ const models = options?.models
+ logVerbose(`writing tests to ${out}`)
+
+ if (options?.removeOut) await emptyDir(out)
+ await ensureDir(out)
+ await writeFile(provider, promptFooDriver)
+ for (const script of scripts) {
+ const fn = out
+ ? join(out, `${script.id}.promptfoo.yaml`)
+ : script.filename.replace(/\.genai\.js$/, ".promptfoo.yaml")
+ logVerbose(` ${fn}`)
+ const config = generatePromptFooConfiguration(script, {
+ out,
+ cli,
+ models: models?.map(parseModelSpec),
+ provider: "provider.mjs",
+ testProvider,
+ })
+ await writeFile(fn, YAMLStringify(config))
+ }
+
+ logVerbose(`running tests with promptfoo`)
+ const cmd = "npx"
+ const args = [
+ "--yes",
+ `promptfoo@latest`,
+ "eval",
+ "--config",
+ `${out}/*.promptfoo.yaml`,
+ "--verbose",
+ ]
+ const exec = execa(cmd, args, {
+ preferLocal: true,
+ cleanup: true,
+ stripFinalNewline: true,
+ })
+ exec.pipeStdout(process.stdout)
+ exec.pipeStderr(process.stdout)
+ const res = await exec
+
+ if (options.view) await execa("npx", ["--yes", "promptfoo@latest", "view", "-y"])
+ else process.exit(res.exitCode)
+}
diff --git a/packages/cli/src/version.ts b/packages/cli/src/version.ts
index 7c7569a9ad..52508dee01 100644
--- a/packages/cli/src/version.ts
+++ b/packages/cli/src/version.ts
@@ -2,4 +2,5 @@ import packageJson from "../package.json"
export const NODE_MIN_VERSION = packageJson.engines.node
export const LLAMAINDEX_VERSION = packageJson.optionalDependencies.llamaindex
+export const PROMPTFOO_VERSION = packageJson.devDependencies.promptfoo
export const TYPESCRIPT_VERSION = packageJson.dependencies.typescript
diff --git a/packages/core/bundleprompts.mjs b/packages/core/bundleprompts.mjs
index bcef47ff01..6f90fdcdac 100644
--- a/packages/core/bundleprompts.mjs
+++ b/packages/core/bundleprompts.mjs
@@ -15,6 +15,10 @@ for (const prompt of prompts) {
if (prompt.endsWith(".genai.js"))
promptMap[prompt.replace(/\.genai\.js$/i, "")] = text
}
+const promptFooDriver = readFileSync(
+ "./src/genaiscript-api-provider.mjs",
+ "utf-8"
+)
const promptDefs = {
".gitattributes": "genaiscript.d.ts -diff merge=ours linguist-generated",
"jsconfig.json": JSON.stringify(
@@ -64,6 +68,8 @@ export const promptDefinitions = Object.freeze>(${JSON.st
)});
export const treeSitterWasms: string[] = ${JSON.stringify(wasms)};
+
+export const promptFooDriver = ${JSON.stringify(promptFooDriver)}
\n`
writeFileSync(fp, text, "utf-8")
diff --git a/packages/core/src/clihelp.ts b/packages/core/src/clihelp.ts
index 525365bba8..a54459f015 100644
--- a/packages/core/src/clihelp.ts
+++ b/packages/core/src/clihelp.ts
@@ -1,6 +1,7 @@
-import { CORE_VERSION, RunTemplateOptions } from "."
+import { CORE_VERSION, RunTemplateOptions, YAMLStringify } from "."
import { Fragment } from "./ast"
import { NPM_CLI_PACKAGE } from "./constants"
+import { generatePromptFooConfiguration } from "./test"
import { MarkdownTrace } from "./trace"
export function generateCliArguments(
@@ -47,4 +48,23 @@ ${generateCliArguments(template, fragment, options, "run")}
- The CLI uses the same secrets in the \`.env\` file.
`
)
+
+ if (template.tests?.length) {
+ trace.details(
+ "🧪 testing",
+ `
+- [promptfoo](https://www.promptfoo.dev/) configuration
+
+\`\`\`yaml
+${YAMLStringify(generatePromptFooConfiguration(template, { models: [options] }))}
+\`\`\`
+
+- run the test command
+
+\`\`\`sh
+npx --yes genaiscript test ${template.id}
+\`\`\`
+`
+ )
+ }
}
diff --git a/packages/core/src/genaiscript-api-provider.mjs b/packages/core/src/genaiscript-api-provider.mjs
new file mode 100644
index 0000000000..61e1282e64
--- /dev/null
+++ b/packages/core/src/genaiscript-api-provider.mjs
@@ -0,0 +1,69 @@
+import { promisify } from "node:util"
+import { exec } from "node:child_process"
+
+const execAsync = promisify(exec)
+
+// https://promptfoo.dev/docs/providers/custom-api
+class GenAIScriptApiProvider {
+ constructor(options) {
+ this.config = options.config
+ this.providerId =
+ options.id || `genaiscript:${this.config.model || "default"}`
+ }
+
+ id() {
+ return this.providerId
+ }
+
+ async callApi(prompt, context) {
+ const { model, temperature, top_p, cache, version, cli, quiet } =
+ this.config
+ const { vars } = context
+ let files = vars.files // string or string[]
+ if (files && !Array.isArray(files)) files = [files] // ensure array
+
+ const args = []
+ if (cli) args.push(`node`, cli)
+ else
+ args.push(
+ `npx`,
+ `--yes`,
+ version ? `genaiscript@${version}` : "genaiscript"
+ )
+
+ args.push("run", prompt)
+ if (files) args.push(...files)
+ args.push("--json")
+ if (quiet) args.push("--quiet")
+ if (model) args.push("--model", model)
+ if (temperature !== undefined) args.push("--temperature", temperature)
+ if (top_p !== undefined) args.push("--top_p", top_p)
+ if (vars.vars) args.push("--vars", vars.vars)
+ if (cache === false) args.push("--no-cache")
+
+ const cmd = args
+ .map((a) =>
+ typeof a === "string" && a.includes(" ") ? JSON.stringify(a) : a
+ )
+ .join(" ")
+ const { stdout, error } = await execAsync(cmd)
+
+ const outputText = stdout.slice(Math.max(0, stdout.indexOf("{")))
+ let output
+ try {
+ output = JSON.parse(outputText)
+ } catch (e) {
+ output = {
+ text: outputText,
+ error: e,
+ }
+ }
+
+ return {
+ output,
+ error,
+ }
+ }
+}
+
+export default GenAIScriptApiProvider
diff --git a/packages/core/src/promptrunner.ts b/packages/core/src/promptrunner.ts
index dfc2b62e11..19dab42bed 100644
--- a/packages/core/src/promptrunner.ts
+++ b/packages/core/src/promptrunner.ts
@@ -716,6 +716,11 @@ ${repair}
frames,
genVars,
}
- options?.infoCb?.(res)
+ options?.infoCb?.({
+ label: res.label,
+ vars: res.vars,
+ summary: res.summary,
+ text: template.id,
+ })
return res
}
diff --git a/packages/core/src/template.ts b/packages/core/src/template.ts
index d23bfa3a6a..7cfb95b1bf 100644
--- a/packages/core/src/template.ts
+++ b/packages/core/src/template.ts
@@ -445,6 +445,7 @@ export async function parsePromptTemplate(
c.checkRecord("parameters")
c.checkBool("lineNumbers")
+ c.checkObjectArray("tests")
})
const r = c.template
diff --git a/packages/core/src/test.ts b/packages/core/src/test.ts
new file mode 100644
index 0000000000..8f97a0fd18
--- /dev/null
+++ b/packages/core/src/test.ts
@@ -0,0 +1,83 @@
+import { DEFAULT_MODEL } from "./constants"
+import { arrayify } from "./util"
+
+export function generatePromptFooConfiguration(
+ script: PromptScript,
+ options?: {
+ provider?: string
+ testProvider?: string
+ out?: string
+ cli?: string
+ models?: ModelOptions[]
+ }
+) {
+ const { provider = "provider.mjs", testProvider } = options || {}
+ const { description, title, tests = [], id } = script
+ const models = options?.models || []
+ if (!models.length) models.push(script)
+ const cli = options?.cli
+
+ const res = {
+ description: [title, description].filter((s) => s).join("\n"),
+ prompts: [id],
+ providers: models.map(({ model, temperature, topP }) => ({
+ id: provider,
+ label: [
+ model || DEFAULT_MODEL,
+ temperature !== undefined ? `t=${temperature}` : undefined,
+ topP !== undefined ? `p=${topP}` : undefined,
+ ]
+ .filter((v) => v !== undefined)
+ .join(":"),
+ config: {
+ model: model || DEFAULT_MODEL,
+ temperature,
+ top_p: topP,
+ cli,
+ },
+ })),
+ defaultTest: {
+ options: {
+ provider: testProvider
+ ? {
+ text: {
+ id: "azureopenai:chat:gpt-4",
+ config: {
+ apiHost: "tnrllmproxy.azurewebsites.net",
+ },
+ },
+ embedding: {
+ id: "azureopenai:embeddings:text-embedding-ada-002",
+ config: {
+ apiHost: "tnrllmproxy.azurewebsites.net",
+ },
+ },
+ }
+ : undefined,
+ },
+ },
+ tests: tests.map(
+ ({ description, files = [], rubrics, facts, asserts = [] }) => ({
+ description,
+ vars: {
+ files,
+ },
+ assert: [
+ ...arrayify(rubrics).map((value) => ({
+ type: "llm-rubric",
+ value,
+ })),
+ ...arrayify(facts).map((value) => ({
+ type: "factuality",
+ value,
+ })),
+ ...arrayify(asserts).map((assert) => ({
+ ...assert,
+ })),
+ ],
+ })
+ ),
+ }
+
+ return res
+}
diff --git a/packages/core/src/types/prompt_template.d.ts b/packages/core/src/types/prompt_template.d.ts
index 6e06232b05..fe20ccd3e0 100644
--- a/packages/core/src/types/prompt_template.d.ts
+++ b/packages/core/src/types/prompt_template.d.ts
@@ -190,10 +190,46 @@ type PromptParameterType =
type PromptParametersSchema = Record
type PromptParameters = Record
-interface PromptScript
- extends PromptLike,
- ModelOptions,
- ScriptRuntimeOptions {
+type PromptAssertion =
+ | {
+ /**
+ * output contains substring, case insensitive
+ **/
+ type: "icontains"
+ value: string
+ }
+ | {
+ /**
+ * Perplexity is below a threshold
+ */
+ type: "perplexity"
+ threshold: number
+ }
+
+interface PromptTest {
+ /**
+ * Description of the test.
+ */
+ description?: string
+ /**
+ * List of files to apply the test to.
+ */
+ files: string | string[]
+ /**
+ * LLM output matches a given rubric, using a Language Model to grade output.
+ */
+ rubrics?: string | string[]
+ /**
+ * LLM output adheres to the given facts, using Factuality method from OpenAI evaluation.
+ */
+ facts?: string | string[]
+ /**
+ * Additional deterministic assertions.
+ */
+ asserts?: PromptAssertion | PromptAssertion[]
+}
+
+interface PromptScript extends PromptLike, ModelOptions, ScriptRuntimeOptions {
/**
* Groups template in UI
*/
@@ -204,6 +240,11 @@ interface PromptScript
*/
parameters?: PromptParametersSchema
+ /**
+ * Tests to validate this script.
+ */
+ tests?: PromptTest[]
+
/**
* Don't show it to the user in lists. Template `system.*` are automatically unlisted.
*/
@@ -404,7 +445,7 @@ type PromptArgs = Omit
type PromptSystemArgs = Omit<
PromptArgs,
- "model" | "temperature" | "topP" | "maxTokens" | "seed"
+ "model" | "temperature" | "topP" | "maxTokens" | "seed" | "tests"
>
type StringLike = string | LinkedFile | LinkedFile[]
diff --git a/packages/core/src/util.ts b/packages/core/src/util.ts
index 05433eaaad..3f083cd53e 100644
--- a/packages/core/src/util.ts
+++ b/packages/core/src/util.ts
@@ -17,6 +17,12 @@ export function strcmp(a: string, b: string) {
else return 1
}
+export function arrayify(a: T | T[]): T[] {
+ if (a === undefined) return []
+ if (Array.isArray(a)) return a
+ return [a]
+}
+
export function toArray(a: ArrayLike): T[] {
if (!a) return undefined
const r: T[] = new Array(a.length)
diff --git a/packages/sample/genaisrc/genaiscript.d.ts b/packages/sample/genaisrc/genaiscript.d.ts
index 5b3a97ec28..23edf63357 100644
--- a/packages/sample/genaisrc/genaiscript.d.ts
+++ b/packages/sample/genaisrc/genaiscript.d.ts
@@ -190,10 +190,42 @@ type PromptParameterType =
type PromptParametersSchema = Record
type PromptParameters = Record
-interface PromptScript
- extends PromptLike,
- ModelOptions,
- ScriptRuntimeOptions {
+type PromptAssertion =
+ | {
+ /**
+ * output contains substring, case insensitive
+ **/
+ type: "icontains"
+ value: string
+ }
+ | {
+ /**
+ * Perplexity is below a threshold
+ */
+ type: "perplexity"
+ threshold: number
+ }
+
+interface PromptTest {
+ /**
+ * List of files to apply the test to.
+ */
+ files: string | string[]
+ /**
+ * LLM output matches a given rubric, using a Language Model to grade output.
+ */
+ rubrics?: string | string[]
+ /**
+ * LLM output adheres to the given facts, using Factuality method from OpenAI evaluation.
+ */
+ facts?: string | string[]
+ /**
+ * Additional deterministic assertions.
+ */
+ asserts?: PromptAssertion | PromptAssertion[]
+}
+
+interface PromptScript extends PromptLike, ModelOptions, ScriptRuntimeOptions {
/**
* Groups template in UI
*/
@@ -204,6 +236,11 @@ interface PromptScript
*/
parameters?: PromptParametersSchema
+ /**
+ * Tests to validate this script.
+ */
+ tests?: PromptTest[]
+
/**
* Don't show it to the user in lists. Template `system.*` are automatically unlisted.
*/
@@ -404,7 +441,7 @@ type PromptArgs = Omit
type PromptSystemArgs = Omit<
PromptArgs,
- "model" | "temperature" | "topP" | "maxTokens" | "seed"
+ "model" | "temperature" | "topP" | "maxTokens" | "seed" | "tests"
>
type StringLike = string | LinkedFile | LinkedFile[]
diff --git a/packages/sample/genaisrc/node/genaiscript.d.ts b/packages/sample/genaisrc/node/genaiscript.d.ts
index 5b3a97ec28..23edf63357 100644
--- a/packages/sample/genaisrc/node/genaiscript.d.ts
+++ b/packages/sample/genaisrc/node/genaiscript.d.ts
@@ -190,10 +190,42 @@ type PromptParameterType =
type PromptParametersSchema = Record
type PromptParameters = Record
-interface PromptScript
- extends PromptLike,
- ModelOptions,
- ScriptRuntimeOptions {
+type PromptAssertion =
+ | {
+ /**
+ * output contains substring, case insensitive
+ **/
+ type: "icontains"
+ value: string
+ }
+ | {
+ /**
+ * Perplexity is below a threshold
+ */
+ type: "perplexity"
+ threshold: number
+ }
+
+interface PromptTest {
+ /**
+ * List of files to apply the test to.
+ */
+ files: string | string[]
+ /**
+ * LLM output matches a given rubric, using a Language Model to grade output.
+ */
+ rubrics?: string | string[]
+ /**
+ * LLM output adheres to the given facts, using Factuality method from OpenAI evaluation.
+ */
+ facts?: string | string[]
+ /**
+ * Additional deterministic assertions.
+ */
+ asserts?: PromptAssertion | PromptAssertion[]
+}
+
+interface PromptScript extends PromptLike, ModelOptions, ScriptRuntimeOptions {
/**
* Groups template in UI
*/
@@ -204,6 +236,11 @@ interface PromptScript
*/
parameters?: PromptParametersSchema
+ /**
+ * Tests to validate this script.
+ */
+ tests?: PromptTest[]
+
/**
* Don't show it to the user in lists. Template `system.*` are automatically unlisted.
*/
@@ -404,7 +441,7 @@ type PromptArgs = Omit
type PromptSystemArgs = Omit<
PromptArgs,
- "model" | "temperature" | "topP" | "maxTokens" | "seed"
+ "model" | "temperature" | "topP" | "maxTokens" | "seed" | "tests"
>
type StringLike = string | LinkedFile | LinkedFile[]
diff --git a/packages/sample/genaisrc/python/genaiscript.d.ts b/packages/sample/genaisrc/python/genaiscript.d.ts
index 5b3a97ec28..23edf63357 100644
--- a/packages/sample/genaisrc/python/genaiscript.d.ts
+++ b/packages/sample/genaisrc/python/genaiscript.d.ts
@@ -190,10 +190,42 @@ type PromptParameterType =
type PromptParametersSchema = Record
type PromptParameters = Record
-interface PromptScript
- extends PromptLike,
- ModelOptions,
- ScriptRuntimeOptions {
+type PromptAssertion =
+ | {
+ /**
+ * output contains substring, case insensitive
+ **/
+ type: "icontains"
+ value: string
+ }
+ | {
+ /**
+ * Perplexity is below a threshold
+ */
+ type: "perplexity"
+ threshold: number
+ }
+
+interface PromptTest {
+ /**
+ * List of files to apply the test to.
+ */
+ files: string | string[]
+ /**
+ * LLM output matches a given rubric, using a Language Model to grade output.
+ */
+ rubrics?: string | string[]
+ /**
+ * LLM output adheres to the given facts, using Factuality method from OpenAI evaluation.
+ */
+ facts?: string | string[]
+ /**
+ * Additional deterministic assertions.
+ */
+ asserts?: PromptAssertion | PromptAssertion[]
+}
+
+interface PromptScript extends PromptLike, ModelOptions, ScriptRuntimeOptions {
/**
* Groups template in UI
*/
@@ -204,6 +236,11 @@ interface PromptScript
*/
parameters?: PromptParametersSchema
+ /**
+ * Tests to validate this script.
+ */
+ tests?: PromptTest[]
+
/**
* Don't show it to the user in lists. Template `system.*` are automatically unlisted.
*/
@@ -404,7 +441,7 @@ type PromptArgs = Omit
type PromptSystemArgs = Omit<
PromptArgs,
- "model" | "temperature" | "topP" | "maxTokens" | "seed"
+ "model" | "temperature" | "topP" | "maxTokens" | "seed" | "tests"
>
type StringLike = string | LinkedFile | LinkedFile[]
diff --git a/packages/sample/genaisrc/style/genaiscript.d.ts b/packages/sample/genaisrc/style/genaiscript.d.ts
index 5b3a97ec28..23edf63357 100644
--- a/packages/sample/genaisrc/style/genaiscript.d.ts
+++ b/packages/sample/genaisrc/style/genaiscript.d.ts
@@ -190,10 +190,42 @@ type PromptParameterType =
type PromptParametersSchema = Record
type PromptParameters = Record
-interface PromptScript
- extends PromptLike,
- ModelOptions,
- ScriptRuntimeOptions {
+type PromptAssertion =
+ | {
+ /**
+ * output contains substring, case insensitive
+ **/
+ type: "icontains"
+ value: string
+ }
+ | {
+ /**
+ * Perplexity is below a threshold
+ */
+ type: "perplexity"
+ threshold: number
+ }
+
+interface PromptTest {
+ /**
+ * List of files to apply the test to.
+ */
+ files: string | string[]
+ /**
+ * LLM output matches a given rubric, using a Language Model to grade output.
+ */
+ rubrics?: string | string[]
+ /**
+ * LLM output adheres to the given facts, using Factuality method from OpenAI evaluation.
+ */
+ facts?: string | string[]
+ /**
+ * Additional deterministic assertions.
+ */
+ asserts?: PromptAssertion | PromptAssertion[]
+}
+
+interface PromptScript extends PromptLike, ModelOptions, ScriptRuntimeOptions {
/**
* Groups template in UI
*/
@@ -204,6 +236,11 @@ interface PromptScript
*/
parameters?: PromptParametersSchema
+ /**
+ * Tests to validate this script.
+ */
+ tests?: PromptTest[]
+
/**
* Don't show it to the user in lists. Template `system.*` are automatically unlisted.
*/
@@ -404,7 +441,7 @@ type PromptArgs = Omit
type PromptSystemArgs = Omit<
PromptArgs,
- "model" | "temperature" | "topP" | "maxTokens" | "seed"
+ "model" | "temperature" | "topP" | "maxTokens" | "seed" | "tests"
>
type StringLike = string | LinkedFile | LinkedFile[]
diff --git a/packages/sample/genaisrc/summarize.genai.js b/packages/sample/genaisrc/summarize.genai.js
index 7346d0d410..3fb2aab853 100644
--- a/packages/sample/genaisrc/summarize.genai.js
+++ b/packages/sample/genaisrc/summarize.genai.js
@@ -1,6 +1,15 @@
script({
title:"summarize all files",
- system: []
+ system: [],
+ tests: [{
+ files: "src/rag/markdown.md",
+ rubrics: "is a summary",
+ facts: "Markdown is a text-based syntax to generate documents",
+ asserts: {
+ type: "icontains",
+ value: "Markdown"
+ }
+ }]
})
def("FILE", env.files)
diff --git a/packages/sample/package.json b/packages/sample/package.json
index f0a5d07ee8..86a657d4bb 100644
--- a/packages/sample/package.json
+++ b/packages/sample/package.json
@@ -9,7 +9,7 @@
"typecheck": "tsc -p src",
"test": "node --import tsx --test src/**.test.ts",
"test:watch": "node --import tsx --watch --test-name-pattern=run --test src/**.test.ts",
- "promptfoo:eval": "npx --yes promptfoo@latest eval -c src/*.promptfoo.yaml --no-cache -j 1 --verbose",
+ "test:scripts": "node ../cli/built/genaiscript.cjs test -rmo -tp tnrllmproxy.azurewebsites.net",
"promptfoo:view": "npx --yes promptfoo@latest view -y"
}
}
diff --git a/packages/sample/src/aici/genaiscript.d.ts b/packages/sample/src/aici/genaiscript.d.ts
index 5b3a97ec28..23edf63357 100644
--- a/packages/sample/src/aici/genaiscript.d.ts
+++ b/packages/sample/src/aici/genaiscript.d.ts
@@ -190,10 +190,42 @@ type PromptParameterType =
type PromptParametersSchema = Record
type PromptParameters = Record
-interface PromptScript
- extends PromptLike,
- ModelOptions,
- ScriptRuntimeOptions {
+type PromptAssertion =
+ | {
+ /**
+ * output contains substring, case insensitive
+ **/
+ type: "icontains"
+ value: string
+ }
+ | {
+ /**
+ * Perplexity is below a threshold
+ */
+ type: "perplexity"
+ threshold: number
+ }
+
+interface PromptTest {
+ /**
+ * List of files to apply the test to.
+ */
+ files: string | string[]
+ /**
+ * LLM output matches a given rubric, using a Language Model to grade output.
+ */
+ rubrics?: string | string[]
+ /**
+ * LLM output adheres to the given facts, using Factuality method from OpenAI evaluation.
+ */
+ facts?: string | string[]
+ /**
+ * Additional deterministic assertions.
+ */
+ asserts?: PromptAssertion | PromptAssertion[]
+}
+
+interface PromptScript extends PromptLike, ModelOptions, ScriptRuntimeOptions {
/**
* Groups template in UI
*/
@@ -204,6 +236,11 @@ interface PromptScript
*/
parameters?: PromptParametersSchema
+ /**
+ * Tests to validate this script.
+ */
+ tests?: PromptTest[]
+
/**
* Don't show it to the user in lists. Template `system.*` are automatically unlisted.
*/
@@ -404,7 +441,7 @@ type PromptArgs = Omit
type PromptSystemArgs = Omit<
PromptArgs,
- "model" | "temperature" | "topP" | "maxTokens" | "seed"
+ "model" | "temperature" | "topP" | "maxTokens" | "seed" | "tests"
>
type StringLike = string | LinkedFile | LinkedFile[]
diff --git a/packages/sample/src/makecode/genaiscript.d.ts b/packages/sample/src/makecode/genaiscript.d.ts
index 5b3a97ec28..23edf63357 100644
--- a/packages/sample/src/makecode/genaiscript.d.ts
+++ b/packages/sample/src/makecode/genaiscript.d.ts
@@ -190,10 +190,42 @@ type PromptParameterType =
type PromptParametersSchema = Record
type PromptParameters = Record
-interface PromptScript
- extends PromptLike,
- ModelOptions,
- ScriptRuntimeOptions {
+type PromptAssertion =
+ | {
+ /**
+ * output contains substring, case insensitive
+ **/
+ type: "icontains"
+ value: string
+ }
+ | {
+ /**
+ * Perplexity is below a threshold
+ */
+ type: "perplexity"
+ threshold: number
+ }
+
+interface PromptTest {
+ /**
+ * List of files to apply the test to.
+ */
+ files: string | string[]
+ /**
+ * LLM output matches a given rubric, using a Language Model to grade output.
+ */
+ rubrics?: string | string[]
+ /**
+ * LLM output adheres to the given facts, using Factuality method from OpenAI evaluation.
+ */
+ facts?: string | string[]
+ /**
+ * Additional deterministic assertions.
+ */
+ asserts?: PromptAssertion | PromptAssertion[]
+}
+
+interface PromptScript extends PromptLike, ModelOptions, ScriptRuntimeOptions {
/**
* Groups template in UI
*/
@@ -204,6 +236,11 @@ interface PromptScript
*/
parameters?: PromptParametersSchema
+ /**
+ * Tests to validate this script.
+ */
+ tests?: PromptTest[]
+
/**
* Don't show it to the user in lists. Template `system.*` are automatically unlisted.
*/
@@ -404,7 +441,7 @@ type PromptArgs = Omit
type PromptSystemArgs = Omit<
PromptArgs,
- "model" | "temperature" | "topP" | "maxTokens" | "seed"
+ "model" | "temperature" | "topP" | "maxTokens" | "seed" | "tests"
>
type StringLike = string | LinkedFile | LinkedFile[]
diff --git a/packages/sample/src/promptfoo-api-provider.mjs b/packages/sample/src/promptfoo-api-provider.mjs
deleted file mode 100644
index a1c76b69f4..0000000000
--- a/packages/sample/src/promptfoo-api-provider.mjs
+++ /dev/null
@@ -1,40 +0,0 @@
-import { execa } from "execa"
-
-// https://promptfoo.dev/docs/providers/custom-api
-class GenAIScriptApiProvider {
- constructor(options) {
- this.providerId = options.id || "genaiscript"
- this.config = options.config
- }
-
- id() {
- return this.providerId
- }
-
- async callApi(prompt, context) {
- const { model, temperature, topK, cache } = this.config
- const { vars } = context
- const { files } = vars
-
- const command = "node"
- const args = ["../cli/built/genaiscript.cjs", "run", prompt, files]
- if (model) args.push("--model", model)
- if (temperature !== undefined) args.push("--temperature", temperature)
- if (topK !== undefined) args.push("--top_k", topK)
- if (vars.vars) args.push("--vars", vars.vars)
- if (cache === false) args.push("--no-cache")
- const { stdout, exitCode, failed } = await execa(command, args, {
- cleanup: true,
- preferLocal: true,
- stripFinalNewline: true,
- })
- const output = stdout?.replace("Warning: TT: undefined function: 32", "")
- const error = failed ? `exit code ${exitCode}` : undefined
- return {
- output,
- error,
- }
- }
-}
-
-export default GenAIScriptApiProvider
diff --git a/packages/sample/src/summarize.promptfoo.yaml b/packages/sample/src/summarize.promptfoo.yaml
deleted file mode 100644
index 73c10ab90c..0000000000
--- a/packages/sample/src/summarize.promptfoo.yaml
+++ /dev/null
@@ -1,54 +0,0 @@
-description: "Summarize eval"
-
-prompts:
- - "summarize"
-
-providers:
- - id: ./promptfoo-api-provider.mjs
- label: gpt4
- config:
- model: gpt-4
- - id: ./promptfoo-api-provider.mjs
- label: gpt3.5
- config:
- model: gpt-3.5-turbo
- - id: ./promptfoo-api-provider.mjs
- label: phi3
- config:
- model: ollama:phi3
-
-defaultTest:
- options:
- provider:
- text:
- id: azureopenai:chat:gpt-4
- config:
- apiHost: "tnrllmproxy.azurewebsites.net"
- embedding:
- id: azureopenai:embeddings:text-embedding-ada-002
- config:
- apiHost: "tnrllmproxy.azurewebsites.net"
- assert:
- - type: not-starts-with
- value: Sure
- - type: not-contains
- value: AI language model
- - type: icontains
- value: "{{keyword}}"
- - type: llm-rubric
- value: is a summary
- - type: factuality
- value: "{{fact}}"
-tests:
- - vars:
- files: src/rag/markdown.md
- keyword: Markdown
- fact: Markdown is a text-based syntax to describe documents.
- - vars:
- files: src/rag/loremipsum.pdf
- keyword: Lorem
- fact: '"Lorem ipsum" is a type of placeholder text used in the publishing and design industry.'
- - vars:
- files: src/rag/Document.docx
- keyword: Microsoft
- fact: "Microsoft Word is a word processing software developed by Microsoft."
diff --git a/packages/sample/src/tla/genaiscript.d.ts b/packages/sample/src/tla/genaiscript.d.ts
index 5b3a97ec28..23edf63357 100644
--- a/packages/sample/src/tla/genaiscript.d.ts
+++ b/packages/sample/src/tla/genaiscript.d.ts
@@ -190,10 +190,42 @@ type PromptParameterType =
type PromptParametersSchema = Record
type PromptParameters = Record
-interface PromptScript
- extends PromptLike,
- ModelOptions,
- ScriptRuntimeOptions {
+type PromptAssertion =
+ | {
+ /**
+ * output contains substring, case insensitive
+ **/
+ type: "icontains"
+ value: string
+ }
+ | {
+ /**
+ * Perplexity is below a threshold
+ */
+ type: "perplexity"
+ threshold: number
+ }
+
+interface PromptTest {
+ /**
+ * List of files to apply the test to.
+ */
+ files: string | string[]
+ /**
+ * LLM output matches a given rubric, using a Language Model to grade output.
+ */
+ rubrics?: string | string[]
+ /**
+ * LLM output adheres to the given facts, using Factuality method from OpenAI evaluation.
+ */
+ facts?: string | string[]
+ /**
+ * Additional deterministic assertions.
+ */
+ asserts?: PromptAssertion | PromptAssertion[]
+}
+
+interface PromptScript extends PromptLike, ModelOptions, ScriptRuntimeOptions {
/**
* Groups template in UI
*/
@@ -204,6 +236,11 @@ interface PromptScript
*/
parameters?: PromptParametersSchema
+ /**
+ * Tests to validate this script.
+ */
+ tests?: PromptTest[]
+
/**
* Don't show it to the user in lists. Template `system.*` are automatically unlisted.
*/
@@ -404,7 +441,7 @@ type PromptArgs = Omit
type PromptSystemArgs = Omit<
PromptArgs,
- "model" | "temperature" | "topP" | "maxTokens" | "seed"
+ "model" | "temperature" | "topP" | "maxTokens" | "seed" | "tests"
>
type StringLike = string | LinkedFile | LinkedFile[]
diff --git a/packages/sample/src/vision/genaiscript.d.ts b/packages/sample/src/vision/genaiscript.d.ts
index 5b3a97ec28..23edf63357 100644
--- a/packages/sample/src/vision/genaiscript.d.ts
+++ b/packages/sample/src/vision/genaiscript.d.ts
@@ -190,10 +190,42 @@ type PromptParameterType =
type PromptParametersSchema = Record
type PromptParameters = Record
-interface PromptScript
- extends PromptLike,
- ModelOptions,
- ScriptRuntimeOptions {
+type PromptAssertion =
+ | {
+ /**
+ * output contains substring, case insensitive
+ **/
+ type: "icontains"
+ value: string
+ }
+ | {
+ /**
+ * Perplexity is below a threshold
+ */
+ type: "perplexity"
+ threshold: number
+ }
+
+interface PromptTest {
+ /**
+ * List of files to apply the test to.
+ */
+ files: string | string[]
+ /**
+ * LLM output matches a given rubric, using a Language Model to grade output.
+ */
+ rubrics?: string | string[]
+ /**
+ * LLM output adheres to the given facts, using Factuality method from OpenAI evaluation.
+ */
+ facts?: string | string[]
+ /**
+ * Additional deterministic assertions.
+ */
+ asserts?: PromptAssertion | PromptAssertion[]
+}
+
+interface PromptScript extends PromptLike, ModelOptions, ScriptRuntimeOptions {
/**
* Groups template in UI
*/
@@ -204,6 +236,11 @@ interface PromptScript
*/
parameters?: PromptParametersSchema
+ /**
+ * Tests to validate this script.
+ */
+ tests?: PromptTest[]
+
/**
* Don't show it to the user in lists. Template `system.*` are automatically unlisted.
*/
@@ -404,7 +441,7 @@ type PromptArgs = Omit
type PromptSystemArgs = Omit<
PromptArgs,
- "model" | "temperature" | "topP" | "maxTokens" | "seed"
+ "model" | "temperature" | "topP" | "maxTokens" | "seed" | "tests"
>
type StringLike = string | LinkedFile | LinkedFile[]
diff --git a/yarn.lock b/yarn.lock
index 4c0019a736..9dc4a96322 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -63,6 +63,31 @@
node-fetch "^2.6.7"
web-streams-polyfill "^3.2.1"
+"@anthropic-ai/sdk@^0.20.1":
+ version "0.20.7"
+ resolved "https://registry.yarnpkg.com/@anthropic-ai/sdk/-/sdk-0.20.7.tgz#b19b0e66ba070f928bbf583c06d76e6efdd93d5e"
+ integrity sha512-uyc+3WGLpe8ur6mSIKSab7P9JdBerTdmqb7popc/yROYLLCW/Ykyw4ZfjmN/cLmxjnAKnv5YUngzbPM0BJuGjg==
+ 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"
+
+"@apidevtools/json-schema-ref-parser@^10.1.0":
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-10.1.0.tgz#bf54494039a56fa7f77fed17dc6f01dfde50f64c"
+ integrity sha512-3e+viyMuXdrcK8v5pvP+SDoAQ77FH6OyRmuK48SZKmdHJRFm87RsSs8qm6kP39a/pOPURByJw+OXzQIqcfmKtA==
+ dependencies:
+ "@jsdevtools/ono" "^7.1.3"
+ "@types/json-schema" "^7.0.11"
+ "@types/lodash.clonedeep" "^4.5.7"
+ js-yaml "^4.1.0"
+ lodash.clonedeep "^4.5.0"
+
"@astrojs/check@^0.5.9":
version "0.5.9"
resolved "https://registry.yarnpkg.com/@astrojs/check/-/check-0.5.9.tgz#dcbbe0241ca5da8b05865a715ec85f905ea3048b"
@@ -583,6 +608,13 @@
"@babel/plugin-transform-modules-commonjs" "^7.24.1"
"@babel/plugin-transform-typescript" "^7.24.1"
+"@babel/runtime@^7.24.4":
+ version "7.24.4"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd"
+ integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
"@babel/standalone@^7.23.8":
version "7.24.4"
resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.24.4.tgz#9461220fd641a92fff4be19b34fdb9d18e80d37d"
@@ -661,6 +693,11 @@
resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz#923ca57e173c6b232bbbb07347b1be982f03e783"
integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==
+"@colors/colors@1.5.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
+ integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
+
"@colors/colors@1.6.0", "@colors/colors@^1.6.0":
version "1.6.0"
resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz"
@@ -1286,6 +1323,11 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
+"@jsdevtools/ono@^7.1.3":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796"
+ integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==
+
"@koa/cors@^5.0.0":
version "5.0.0"
resolved "https://registry.npmjs.org/@koa/cors/-/cors-5.0.0.tgz"
@@ -2076,6 +2118,11 @@
"@smithy/util-buffer-from" "^2.1.1"
tslib "^2.5.0"
+"@socket.io/component-emitter@~3.1.0":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2"
+ integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==
+
"@szmarczak/http-timer@^5.0.1":
version "5.0.1"
resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a"
@@ -2088,6 +2135,11 @@
resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz"
integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==
+"@tootallnate/quickjs-emscripten@^0.23.0":
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c"
+ integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==
+
"@types/acorn@^4.0.0":
version "4.0.6"
resolved "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz"
@@ -2128,6 +2180,18 @@
dependencies:
"@babel/types" "^7.20.7"
+"@types/cookie@^0.4.1":
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d"
+ integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==
+
+"@types/cors@^2.8.12":
+ version "2.8.17"
+ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b"
+ integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==
+ dependencies:
+ "@types/node" "*"
+
"@types/d3-scale-chromatic@^3.0.0":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz#fc0db9c10e789c351f4c42d96f31f2e4df8f5644"
@@ -2201,7 +2265,7 @@
resolved "https://registry.yarnpkg.com/@types/ini/-/ini-4.1.0.tgz#20e7327b3133627f84304210670d6406cceaba25"
integrity sha512-mTehMtc+xtnWBBvqizcqYCktKDBH2WChvx1GU3Sfe4PysFDXiNe+1YwtpVX1MDtCa4NQrSPw2+3HmvXHY3gt1w==
-"@types/json-schema@^7.0.15":
+"@types/json-schema@^7.0.11", "@types/json-schema@^7.0.15":
version "7.0.15"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
@@ -2225,6 +2289,13 @@
dependencies:
"@types/lodash" "*"
+"@types/lodash.clonedeep@^4.5.7":
+ version "4.5.9"
+ resolved "https://registry.yarnpkg.com/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz#ea48276c7cc18d080e00bb56cf965bcceb3f0fc1"
+ integrity sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==
+ dependencies:
+ "@types/lodash" "*"
+
"@types/lodash@*", "@types/lodash@^4.14.202":
version "4.14.202"
resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz"
@@ -2317,7 +2388,7 @@
dependencies:
undici-types "~5.26.4"
-"@types/node@>=20.12.5", "@types/node@^20.12.7":
+"@types/node@>=10.0.0", "@types/node@>=20.12.5", "@types/node@^20.12.7":
version "20.12.7"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384"
integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==
@@ -3225,7 +3296,7 @@ abort-controller@^3.0.0:
dependencies:
event-target-shim "^5.0.0"
-accepts@^1.3.5:
+accepts@^1.3.5, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
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==
@@ -3262,6 +3333,13 @@ agent-base@^7.0.2, agent-base@^7.1.0:
dependencies:
debug "^4.3.4"
+agent-base@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317"
+ integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==
+ dependencies:
+ debug "^4.3.4"
+
agentkeepalive@^4.2.1, agentkeepalive@^4.5.0:
version "4.5.0"
resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz"
@@ -3277,6 +3355,13 @@ aggregate-error@^4.0.1:
clean-stack "^4.0.0"
indent-string "^5.0.0"
+ajv-formats@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
+ integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
+ dependencies:
+ ajv "^8.0.0"
+
ajv@^6.12.4:
version "6.12.6"
resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
@@ -3287,7 +3372,7 @@ ajv@^6.12.4:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ajv@^8.12.0:
+ajv@^8.0.0, ajv@^8.12.0:
version "8.12.0"
resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz"
integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
@@ -3393,6 +3478,11 @@ aria-query@^5.3.0:
dependencies:
dequal "^2.0.3"
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
+
array-iterate@^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz"
@@ -3436,6 +3526,13 @@ assertion-error@^1.1.0:
resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz"
integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
+ast-types@^0.13.4:
+ version "0.13.4"
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782"
+ integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==
+ dependencies:
+ tslib "^2.0.1"
+
astring@^1.8.0:
version "1.8.6"
resolved "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz"
@@ -3519,7 +3616,12 @@ astro@^4.5.3:
optionalDependencies:
sharp "^0.32.6"
-async@^3.2.3:
+async@3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9"
+ integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==
+
+async@^3.2.3, async@^3.2.4:
version "3.2.5"
resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz"
integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==
@@ -3624,6 +3726,11 @@ base64-js@^1.3.1, base64-js@^1.5.1:
resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+base64id@2.0.0, base64id@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6"
+ integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==
+
basic-auth@~2.0.1:
version "2.0.1"
resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz"
@@ -3631,6 +3738,11 @@ basic-auth@~2.0.1:
dependencies:
safe-buffer "5.1.2"
+basic-ftp@^5.0.2:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0"
+ integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==
+
bcp-47-match@^2.0.0:
version "2.0.3"
resolved "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz"
@@ -3645,11 +3757,26 @@ bcp-47@^2.1.0:
is-alphanumerical "^2.0.0"
is-decimal "^2.0.0"
+better-sqlite3@^9.3.0:
+ version "9.6.0"
+ resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-9.6.0.tgz#b01e58ba7c48abcdc0383b8301206ee2ab81d271"
+ integrity sha512-yR5HATnqeYNVnkaUTf4bOP2dJSnyhP4puJN/QPRyx4YkBEEUxib422n2XzPqDEHjQQqazoYoADdAm5vE15+dAQ==
+ dependencies:
+ bindings "^1.5.0"
+ prebuild-install "^7.1.1"
+
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
bl@^4.0.3:
version "4.1.0"
resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz"
@@ -3678,6 +3805,24 @@ blueimp-md5@^2.19.0:
resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0"
integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==
+body-parser@1.20.2:
+ version "1.20.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
+ integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
+ 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"
+
boolbase@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
@@ -3791,6 +3936,16 @@ bundle-name@^4.1.0:
dependencies:
run-applescript "^7.0.0"
+bytes@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+ integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
+
+bytes@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+ integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
c12@^1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/c12/-/c12-1.10.0.tgz#e1936baa26fd03a9427875554aa6aeb86077b7fb"
@@ -3822,6 +3977,22 @@ cache-content-type@^1.0.0:
mime-types "^2.1.18"
ylru "^1.2.0"
+cache-manager-fs-hash@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/cache-manager-fs-hash/-/cache-manager-fs-hash-1.1.0.tgz#045ed9278977d776a2e4851b2d87440b6d77bd79"
+ integrity sha512-5D4Y2cnioxiy830a7QrWtRmsrfZCW1z3BOIZ0jessuFHIj/8e8mI4MsDYTaEz6aPn0EC4YAWWtQGJVsqccXW/w==
+ dependencies:
+ lockfile "^1.0.4"
+
+cache-manager@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cache-manager/-/cache-manager-4.1.0.tgz#aa986421f1c975a862d6de88edb9ab1d30f4bd39"
+ integrity sha512-ZGM6dLxrP65bfOZmcviWMadUOCICqpLs92+P/S5tj8onz+k+tB7Gr+SAgOUHCQtfm2gYEQDHiKeul4+tYPOJ8A==
+ dependencies:
+ async "3.2.3"
+ lodash.clonedeep "^4.5.0"
+ lru-cache "^7.10.1"
+
cacheable-lookup@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27"
@@ -3940,7 +4111,7 @@ chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@^4.0.0, chalk@^4.1.0:
+chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
version "4.1.2"
resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -4106,6 +4277,15 @@ cli-spinners@^2.9.0, cli-spinners@^2.9.2:
resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz"
integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
+cli-table3@^0.6.3:
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.4.tgz#d1c536b8a3f2e7bec58f67ac9e5769b1b30088b0"
+ integrity sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==
+ dependencies:
+ string-width "^4.2.0"
+ optionalDependencies:
+ "@colors/colors" "1.5.0"
+
cliui@^7.0.2:
version "7.0.4"
resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz"
@@ -4255,6 +4435,11 @@ commander@7, commander@^7.2.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+commander@^10.0.1:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
+ integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
+
commander@^12.0.0:
version "12.0.0"
resolved "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz"
@@ -4280,6 +4465,31 @@ common-ancestor-path@^1.0.1:
resolved "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz"
integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==
+complex.js@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.1.1.tgz#0675dac8e464ec431fb2ab7d30f41d889fb25c31"
+ integrity sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==
+
+compressible@~2.0.16:
+ version "2.0.18"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
+ integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
+ dependencies:
+ mime-db ">= 1.43.0 < 2"
+
+compression@^1.7.4:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+ integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+ dependencies:
+ accepts "~1.3.5"
+ bytes "3.0.0"
+ compressible "~2.0.16"
+ debug "2.6.9"
+ on-headers "~1.0.2"
+ safe-buffer "5.1.2"
+ vary "~1.1.2"
+
computeds@^0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e"
@@ -4315,14 +4525,14 @@ console-control-strings@^1.0.0, console-control-strings@^1.1.0:
resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz"
integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
-content-disposition@~0.5.2:
+content-disposition@0.5.4, content-disposition@~0.5.2:
version "0.5.4"
resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz"
integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
dependencies:
safe-buffer "5.2.1"
-content-type@^1.0.4:
+content-type@^1.0.4, content-type@~1.0.4, content-type@~1.0.5:
version "1.0.5"
resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz"
integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
@@ -4332,11 +4542,21 @@ convert-source-map@^2.0.0:
resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz"
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
-cookie@^0.6.0:
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
+
+cookie@0.6.0, cookie@^0.6.0:
version "0.6.0"
resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz"
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
+cookie@~0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
+ integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+
cookies@~0.9.0:
version "0.9.1"
resolved "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz"
@@ -4350,6 +4570,14 @@ core-util-is@~1.0.0:
resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz"
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+cors@^2.8.5, cors@~2.8.5:
+ version "2.8.5"
+ resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
+ integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
+ dependencies:
+ object-assign "^4"
+ vary "^1"
+
cose-base@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-1.0.3.tgz#650334b41b869578a543358b80cda7e0abe0a60a"
@@ -4434,11 +4662,16 @@ csstype@^3.1.2, csstype@^3.1.3:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
-csv-parse@^5.5.5:
+csv-parse@^5.3.8, csv-parse@^5.5.5:
version "5.5.5"
resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-5.5.5.tgz#68a271a9092877b830541805e14c8a80e6a22517"
integrity sha512-erCk7tyU3yLWAhk6wvKxnyPtftuy/6Ak622gOO7BCJ05+TYffnPCJF905wmOQm+BpkX54OdAl8pveJwUdpnCXQ==
+csv-stringify@^6.3.2:
+ version "6.4.6"
+ resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-6.4.6.tgz#9ccf87cb8b017c96673a9fa061768c8ba83e8b98"
+ integrity sha512-h2V2XZ3uOTLilF5dPIptgUfN/o2ia/80Ie0Lly18LAnw5s8Eb7kt8rfxSUy24AztJZas9f6DPZpVlzDUtFt/ag==
+
cubic2quad@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/cubic2quad/-/cubic2quad-1.2.1.tgz#2442260b72c02ee4b6a2fe998fcc1c4073622286"
@@ -4746,6 +4979,11 @@ dagre-d3-es@7.0.10:
d3 "^7.8.2"
lodash-es "^4.17.21"
+data-uri-to-buffer@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b"
+ integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==
+
dayjs@^1.11.7:
version "1.11.10"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0"
@@ -4756,6 +4994,11 @@ de-indent@^1.0.2:
resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==
+debounce@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5"
+ integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
+
debug@2.6.9, debug@^2.2.0:
version "2.6.9"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
@@ -4763,7 +5006,7 @@ debug@2.6.9, debug@^2.2.0:
dependencies:
ms "2.0.0"
-debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
+debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4:
version "4.3.4"
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -4795,6 +5038,11 @@ decamelize@^4.0.0:
resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz"
integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
+decimal.js@^10.4.3:
+ version "10.4.3"
+ resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
+ integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
+
decode-named-character-reference@^1.0.0:
version "1.0.2"
resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz"
@@ -4889,6 +5137,15 @@ defu@^6.1.4:
resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479"
integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==
+degenerator@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5"
+ integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==
+ dependencies:
+ ast-types "^0.13.4"
+ escodegen "^2.1.0"
+ esprima "^4.0.1"
+
delaunator@5:
version "5.0.1"
resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.1.tgz#39032b08053923e924d6094fe2cde1a99cc51278"
@@ -4926,7 +5183,7 @@ destr@^2.0.3:
resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.3.tgz#7f9e97cb3d16dbdca7be52aca1644ce402cfe449"
integrity sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==
-destroy@^1.0.4:
+destroy@1.2.0, destroy@^1.0.4:
version "1.2.0"
resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz"
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
@@ -5066,6 +5323,11 @@ drauu@^0.4.0:
dependencies:
"@drauu/core" "0.4.0"
+drizzle-orm@^0.29.3:
+ version "0.29.5"
+ resolved "https://registry.yarnpkg.com/drizzle-orm/-/drizzle-orm-0.29.5.tgz#b82bb6d67101fff9438dacd4b09e9cd23109f49c"
+ integrity sha512-jS3+uyzTz4P0Y2CICx8FmRQ1eplURPaIMWDn/yq6k4ShRFj9V7vlJk67lSf2kyYPzQ60GkkNGXcJcwrxZ6QCRw==
+
dset@^3.1.2, dset@^3.1.3:
version "3.1.3"
resolved "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz"
@@ -5160,6 +5422,27 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
dependencies:
once "^1.4.0"
+engine.io-parser@~5.2.1:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49"
+ integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==
+
+engine.io@~6.5.2:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc"
+ integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==
+ dependencies:
+ "@types/cookie" "^0.4.1"
+ "@types/cors" "^2.8.12"
+ "@types/node" ">=10.0.0"
+ accepts "~1.3.4"
+ base64id "2.0.0"
+ cookie "~0.4.1"
+ cors "~2.8.5"
+ debug "~4.3.1"
+ engine.io-parser "~5.2.1"
+ ws "~8.11.0"
+
enhanced-resolve@^5.0.0:
version "5.15.0"
resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz"
@@ -5331,6 +5614,11 @@ escape-html@^1.0.3, escape-html@~1.0.3:
resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
+escape-latex@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.2.0.tgz#07c03818cf7dac250cce517f4fda1b001ef2bca1"
+ integrity sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==
+
escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
@@ -5346,6 +5634,17 @@ escape-string-regexp@^1.0.5:
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+escodegen@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17"
+ integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^5.2.0"
+ esutils "^2.0.2"
+ optionalDependencies:
+ source-map "~0.6.1"
+
eslint-scope@^8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.1.tgz#a9601e4b81a0b9171657c343fb13111688963cfc"
@@ -5423,7 +5722,7 @@ espree@^10.0.1:
acorn-jsx "^5.3.2"
eslint-visitor-keys "^4.0.0"
-esprima@^4.0.0:
+esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
@@ -5503,6 +5802,11 @@ esutils@^2.0.2:
resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
+
event-emitter@^0.3.5:
version "0.3.5"
resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
@@ -5561,6 +5865,43 @@ expand-template@^2.0.3:
resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz"
integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
+express@^4.18.2:
+ version "4.19.2"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465"
+ integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==
+ 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"
+
expressive-code@^0.33.4:
version "0.33.4"
resolved "https://registry.npmjs.org/expressive-code/-/expressive-code-0.33.4.tgz"
@@ -5628,6 +5969,11 @@ fast-xml-parser@^4.3.6:
dependencies:
strnum "^1.0.5"
+fastest-levenshtein@^1.0.16:
+ version "1.0.16"
+ resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5"
+ integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==
+
fastq@^1.6.0:
version "1.17.1"
resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz"
@@ -5682,6 +6028,11 @@ file-type@^19.0.0:
strtok3 "^7.0.0"
token-types "^5.0.1"
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"
@@ -5702,6 +6053,19 @@ finalhandler@1.1.2:
statuses "~1.5.0"
unpipe "~1.0.0"
+finalhandler@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
+ integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
+ 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"
+
find-up@5.0.0, find-up@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
@@ -5819,6 +6183,16 @@ formdata-node@^4.3.2:
node-domexception "1.0.0"
web-streams-polyfill "4.0.0-beta.3"
+forwarded@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
+ integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
+
+fraction.js@4.3.4:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.4.tgz#b2bac8249a610c3396106da97c5a71da75b94b1c"
+ integrity sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==
+
framesync@6.1.2, framesync@^6.1.2:
version "6.1.2"
resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.1.2.tgz#755eff2fb5b8f3b4d2b266dd18121b300aefea27"
@@ -5826,7 +6200,7 @@ framesync@6.1.2, framesync@^6.1.2:
dependencies:
tslib "2.4.0"
-fresh@~0.5.2:
+fresh@0.5.2, fresh@~0.5.2:
version "0.5.2"
resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
@@ -5973,6 +6347,16 @@ get-tsconfig@^4.7.2:
dependencies:
resolve-pkg-maps "^1.0.0"
+get-uri@^6.0.1:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.3.tgz#0d26697bc13cf91092e519aa63aa60ee5b6f385a"
+ integrity sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==
+ dependencies:
+ basic-ftp "^5.0.2"
+ data-uri-to-buffer "^6.0.2"
+ debug "^4.3.4"
+ fs-extra "^11.2.0"
+
giget@^1.2.1:
version "1.2.3"
resolved "https://registry.yarnpkg.com/giget/-/giget-1.2.3.tgz#ef6845d1140e89adad595f7f3bb60aa31c672cb6"
@@ -6022,7 +6406,7 @@ glob@8.1.0:
minimatch "^5.0.1"
once "^1.3.0"
-glob@^10.3.12:
+glob@^10.2.6, glob@^10.3.12:
version "10.3.12"
resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b"
integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==
@@ -6602,6 +6986,17 @@ http-cache-semantics@^4.1.1:
resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz"
integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+http-errors@2.0.0, http-errors@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz"
+ integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
+ dependencies:
+ depd "2.0.0"
+ inherits "2.0.4"
+ setprototypeof "1.2.0"
+ statuses "2.0.1"
+ toidentifier "1.0.1"
+
http-errors@^1.6.3, http-errors@^1.7.3, http-errors@~1.8.0:
version "1.8.1"
resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz"
@@ -6613,17 +7008,6 @@ http-errors@^1.6.3, http-errors@^1.7.3, http-errors@~1.8.0:
statuses ">= 1.5.0 < 2"
toidentifier "1.0.1"
-http-errors@^2.0.0:
- version "2.0.0"
- resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz"
- integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
- dependencies:
- depd "2.0.0"
- inherits "2.0.4"
- setprototypeof "1.2.0"
- statuses "2.0.1"
- toidentifier "1.0.1"
-
http-errors@~1.6.2:
version "1.6.3"
resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz"
@@ -6634,7 +7018,7 @@ http-errors@~1.6.2:
setprototypeof "1.1.0"
statuses ">= 1.4.0 < 2"
-http-proxy-agent@^7.0.2:
+http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1, http-proxy-agent@^7.0.2:
version "7.0.2"
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
@@ -6658,7 +7042,7 @@ https-proxy-agent@^5.0.0:
agent-base "6"
debug "4"
-https-proxy-agent@^7.0.4:
+https-proxy-agent@^7.0.2, https-proxy-agent@^7.0.3, https-proxy-agent@^7.0.4:
version "7.0.4"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168"
integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==
@@ -6683,6 +7067,13 @@ humanize-ms@^1.2.1:
dependencies:
ms "^2.0.0"
+iconv-lite@0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
iconv-lite@0.6, iconv-lite@^0.6.2:
version "0.6.3"
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"
@@ -6794,11 +7185,24 @@ internmap@^1.0.0:
resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95"
integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==
+ip-address@^9.0.5:
+ version "9.0.5"
+ resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a"
+ integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==
+ dependencies:
+ jsbn "1.1.0"
+ sprintf-js "^1.1.3"
+
ip-regex@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-5.0.0.tgz#cd313b2ae9c80c07bd3851e12bf4fa4dc5480632"
integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==
+ipaddr.js@1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+ integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
is-alphabetical@^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz"
@@ -7066,6 +7470,11 @@ jackspeak@^2.3.6:
optionalDependencies:
"@pkgjs/parseargs" "^0.11.0"
+javascript-natural-sort@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59"
+ integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==
+
jiti@^1.21.0:
version "1.21.0"
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d"
@@ -7113,6 +7522,11 @@ js-yaml@^3.13.0, js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
+jsbn@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
+ integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
+
jsesc@^2.5.1:
version "2.5.2"
resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"
@@ -7464,11 +7878,28 @@ locate-path@^6.0.0:
dependencies:
p-locate "^5.0.0"
+lockfile@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609"
+ integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==
+ dependencies:
+ signal-exit "^3.0.2"
+
lodash-es@^4.17.21:
version "4.17.21"
resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+lodash-node@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/lodash-node/-/lodash-node-2.4.1.tgz#ea82f7b100c733d1a42af76801e506105e2a80ec"
+ integrity sha512-egEt8eNQp2kZWRmngahiqMoDCDCENv3uM188S7Ed5t4k3v6RrLELXC+FqLNMUnhCo7gvQX3G1V8opK/Lcslahg==
+
+lodash.clonedeep@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+ integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==
+
lodash.merge@^4.6.2:
version "4.6.2"
resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
@@ -7565,6 +7996,11 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
+lru-cache@^7.10.1, lru-cache@^7.14.1:
+ version "7.18.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
+ integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
+
lz-string@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
@@ -7683,6 +8119,21 @@ markdown-table@^3.0.0, markdown-table@^3.0.3:
resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz"
integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==
+mathjs@^12.4.1:
+ version "12.4.2"
+ resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-12.4.2.tgz#27fe9ac2a534b40c25c272585dfc358a90597bb1"
+ integrity sha512-lW14EzwAFgbNN7AZikxplmhs7wiXDhMphBOGCA3KS6T29ECEkHJsBtbEW5cnCz7sXtl4nDyvTdR+DqVsZyiiEw==
+ dependencies:
+ "@babel/runtime" "^7.24.4"
+ complex.js "^2.1.1"
+ decimal.js "^10.4.3"
+ escape-latex "^1.2.0"
+ fraction.js "4.3.4"
+ javascript-natural-sort "^0.7.1"
+ seedrandom "^3.0.5"
+ tiny-emitter "^2.1.0"
+ typed-function "^4.1.1"
+
md-utils-ts@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/md-utils-ts/-/md-utils-ts-2.0.0.tgz"
@@ -7979,6 +8430,11 @@ meow@^9.0.0:
type-fest "^0.18.0"
yargs-parser "^20.2.3"
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
+
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz"
@@ -8015,7 +8471,7 @@ mermaid@^10.9.0:
uuid "^9.0.0"
web-worker "^1.2.0"
-methods@^1.1.2:
+methods@^1.1.2, methods@~1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"
integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
@@ -8607,7 +9063,7 @@ micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4:
braces "^3.0.2"
picomatch "^2.3.1"
-mime-db@1.52.0:
+mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
version "1.52.0"
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
@@ -8619,7 +9075,7 @@ mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.35, mime-types@~2.1.24,
dependencies:
mime-db "1.52.0"
-mime@^1.3.4:
+mime@1.6.0, mime@^1.3.4:
version "1.6.0"
resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
@@ -8903,6 +9359,11 @@ negotiator@0.6.3:
resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz"
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+netmask@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7"
+ integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==
+
next-tick@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
@@ -9053,7 +9514,7 @@ nth-check@^2.0.0, nth-check@^2.0.1:
dependencies:
boolbase "^1.0.0"
-nunjucks@^3.2.3:
+nunjucks@^3.2.3, nunjucks@^3.2.4:
version "3.2.4"
resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.2.4.tgz#f0878eef528ce7b0aa35d67cc6898635fd74649e"
integrity sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==
@@ -9073,7 +9534,7 @@ nypm@^0.3.8:
pathe "^1.1.2"
ufo "^1.4.0"
-object-assign@^4.0.1, object-assign@^4.1.1:
+object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
@@ -9125,7 +9586,7 @@ ohash@^1.1.3:
resolved "https://registry.yarnpkg.com/ohash/-/ohash-1.1.3.tgz#f12c3c50bfe7271ce3fd1097d42568122ccdcf07"
integrity sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==
-on-finished@^2.3.0:
+on-finished@2.4.1, on-finished@^2.3.0:
version "2.4.1"
resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz"
integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
@@ -9218,6 +9679,20 @@ open@^10.0.3, open@^10.1.0:
is-inside-container "^1.0.0"
is-wsl "^3.1.0"
+openai@^4.19.0:
+ version "4.38.5"
+ resolved "https://registry.yarnpkg.com/openai/-/openai-4.38.5.tgz#87de78eed9f7e63331fb6b1307d8c9dd986b39d0"
+ integrity sha512-Ym5GJL98ZhLJJ7enBx53jjG3vwN/fsB+Ozh46nnRZZS9W1NiYqbwkJ+sXd3dkCIiWIgcyyOPL2Zr8SQAzbpj3g==
+ 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"
+
openai@^4.26.1:
version "4.28.0"
resolved "https://registry.npmjs.org/openai/-/openai-4.28.0.tgz"
@@ -9247,6 +9722,11 @@ openai@^4.33.1:
node-fetch "^2.6.7"
web-streams-polyfill "^3.2.1"
+opener@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
+ integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
+
option@~0.2.1:
version "0.2.4"
resolved "https://registry.npmjs.org/option/-/option-0.2.4.tgz"
@@ -9352,6 +9832,28 @@ p-try@^2.0.0:
resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+pac-proxy-agent@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz#6b9ddc002ec3ff0ba5fdf4a8a21d363bcc612d75"
+ integrity sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==
+ dependencies:
+ "@tootallnate/quickjs-emscripten" "^0.23.0"
+ agent-base "^7.0.2"
+ debug "^4.3.4"
+ get-uri "^6.0.1"
+ http-proxy-agent "^7.0.0"
+ https-proxy-agent "^7.0.2"
+ pac-resolver "^7.0.0"
+ socks-proxy-agent "^8.0.2"
+
+pac-resolver@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6"
+ integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==
+ dependencies:
+ degenerator "^5.0.0"
+ netmask "^2.0.2"
+
packet-reader@1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz"
@@ -9514,6 +10016,11 @@ path-scurry@^1.10.2:
lru-cache "^10.2.0"
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
+
path-to-regexp@^6.2.1:
version "6.2.1"
resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz"
@@ -9934,6 +10441,50 @@ process@^0.11.10:
resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz"
integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
+promptfoo@^0.55.0:
+ version "0.55.0"
+ resolved "https://registry.yarnpkg.com/promptfoo/-/promptfoo-0.55.0.tgz#f2f80cc54310914969ada621c7419b45043368e7"
+ integrity sha512-wb1drxoHa9jpAz7UJW4QDK0X72zHxX/RAyyhw7I2N5Lvs1smnJ7yF0F6EZKiKSUgYfydeWvqzGr9oTqeZLzBNg==
+ dependencies:
+ "@anthropic-ai/sdk" "^0.20.1"
+ "@apidevtools/json-schema-ref-parser" "^10.1.0"
+ ajv "^8.12.0"
+ ajv-formats "^2.1.1"
+ async "^3.2.4"
+ better-sqlite3 "^9.3.0"
+ cache-manager "^4.1.0"
+ cache-manager-fs-hash "^1.0.0"
+ chalk "^4.1.2"
+ chokidar "^3.5.3"
+ cli-progress "^3.12.0"
+ cli-table3 "^0.6.3"
+ commander "^10.0.1"
+ compression "^1.7.4"
+ cors "^2.8.5"
+ csv-parse "^5.3.8"
+ csv-stringify "^6.3.2"
+ debounce "^1.2.1"
+ dotenv "^16.4.5"
+ drizzle-orm "^0.29.3"
+ express "^4.18.2"
+ fastest-levenshtein "^1.0.16"
+ glob "^10.2.6"
+ js-yaml "^4.1.0"
+ mathjs "^12.4.1"
+ node-fetch "^2.6.7"
+ nunjucks "^3.2.4"
+ openai "^4.19.0"
+ opener "^1.5.2"
+ proxy-agent "^6.3.1"
+ python-shell "^5.0.0"
+ replicate "^0.27.1"
+ rouge "^1.0.3"
+ semver "^7.5.3"
+ socket.io "^4.6.1"
+ tiny-invariant "^1.3.1"
+ uuid "^9.0.0"
+ winston "^3.8.2"
+
prompts@^2.4.2:
version "2.4.2"
resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz"
@@ -9966,6 +10517,28 @@ protobufjs@^6.8.8:
"@types/node" ">=13.7.0"
long "^4.0.0"
+proxy-addr@~2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
+ integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
+ dependencies:
+ forwarded "0.2.0"
+ ipaddr.js "1.9.1"
+
+proxy-agent@^6.3.1:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.4.0.tgz#b4e2dd51dee2b377748aef8d45604c2d7608652d"
+ integrity sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==
+ dependencies:
+ agent-base "^7.0.2"
+ debug "^4.3.4"
+ http-proxy-agent "^7.0.1"
+ https-proxy-agent "^7.0.3"
+ lru-cache "^7.14.1"
+ pac-proxy-agent "^7.0.1"
+ proxy-from-env "^1.1.0"
+ socks-proxy-agent "^8.0.2"
+
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
@@ -10016,6 +10589,18 @@ punycode@^2.1.0, punycode@^2.3.0:
resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+python-shell@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/python-shell/-/python-shell-5.0.0.tgz#26fc9a0e477cb30fc98ef2d9d5f53ab38a060eac"
+ integrity sha512-RUOOOjHLhgR1MIQrCtnEqz/HJ1RMZBIN+REnpSUrfft2bXqXy69fwJASVziWExfFXsR1bCY0TznnHooNsCo0/w==
+
+qs@6.11.0:
+ version "6.11.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
+ integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
+ dependencies:
+ side-channel "^1.0.4"
+
qs@6.11.2, qs@^6.9.1:
version "6.11.2"
resolved "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz"
@@ -10065,6 +10650,11 @@ randombytes@^2.1.0:
dependencies:
safe-buffer "^5.1.0"
+range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
ranges-apply@^7.0.15:
version "7.0.15"
resolved "https://registry.npmjs.org/ranges-apply/-/ranges-apply-7.0.15.tgz"
@@ -10096,6 +10686,16 @@ ranges-sort@^6.0.11:
resolved "https://registry.npmjs.org/ranges-sort/-/ranges-sort-6.0.11.tgz"
integrity sha512-fhNEG0vGi7bESitNNqNBAfYPdl2efB+1paFlI8BQDCNkruERKuuhG8LkQClDIVqUJLkrmKuOSPQ3xZHqVnVo3Q==
+raw-body@2.5.2:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
+ integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
+ dependencies:
+ bytes "3.1.2"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
rc9@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/rc9/-/rc9-2.1.2.tgz#6282ff638a50caa0a91a31d76af4a0b9cbd1080d"
@@ -10215,6 +10815,11 @@ redent@^3.0.0:
indent-string "^4.0.0"
strip-indent "^3.0.0"
+regenerator-runtime@^0.14.0:
+ version "0.14.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
+ integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
+
rehype-parse@^9.0.0:
version "9.0.0"
resolved "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.0.tgz"
@@ -10342,6 +10947,13 @@ replicate@^0.25.2:
optionalDependencies:
readable-stream ">=4.0.0"
+replicate@^0.27.1:
+ version "0.27.1"
+ resolved "https://registry.yarnpkg.com/replicate/-/replicate-0.27.1.tgz#5ddd8057ec25b3499cac80b9b02f228fe468522f"
+ integrity sha512-oCPVE3cRWlim9wvNtsRyfZCfHblVArc5wAt8rbwrUQ7guHcz2cNiha9/rES/kkb5x3RNAy1JyD6BY900FMTydA==
+ optionalDependencies:
+ readable-stream ">=4.0.0"
+
request-light@^0.7.0:
version "0.7.0"
resolved "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz"
@@ -10533,6 +11145,13 @@ rollup@^4.2.0:
"@rollup/rollup-win32-x64-msvc" "4.10.0"
fsevents "~2.3.2"
+rouge@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/rouge/-/rouge-1.0.3.tgz#27225b57f60d1f71272d9cb0a150179d0806baa3"
+ integrity sha512-YCt74Dxsi99E8/uh943FTa80EmGboaOu1ij4q8WD4EAGyvyWYaH7MRHorrDbGgLY7iFUwDwyW/g9KJZx7D5fUQ==
+ dependencies:
+ lodash-node "^2.4.1"
+
roughjs@^4.6.6:
version "4.6.6"
resolved "https://registry.yarnpkg.com/roughjs/-/roughjs-4.6.6.tgz#1059f49a5e0c80dee541a005b20cc322b222158b"
@@ -10582,7 +11201,7 @@ safe-stable-stringify@^2.3.1:
resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz"
integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==
-"safer-buffer@>= 2.1.2 < 3.0.0":
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2"
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -10605,6 +11224,11 @@ section-matter@^1.0.0:
extend-shallow "^2.0.1"
kind-of "^6.0.0"
+seedrandom@^3.0.5:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7"
+ integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==
+
selderee@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/selderee/-/selderee-0.11.0.tgz#6af0c7983e073ad3e35787ffe20cefd9daf0ec8a"
@@ -10622,13 +11246,32 @@ semver@^6.0.0, semver@^6.3.1:
resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.2, semver@^7.5.4, semver@^7.6.0:
+semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0:
version "7.6.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
dependencies:
lru-cache "^6.0.0"
+send@0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
+ integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
+ 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"
+
serialize-error@^11.0.3:
version "11.0.3"
resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-11.0.3.tgz#b54f439e15da5b4961340fbbd376b6b04aa52e92"
@@ -10643,6 +11286,16 @@ serialize-javascript@6.0.0:
dependencies:
randombytes "^2.1.0"
+serve-static@1.15.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
+ integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.18.0"
+
set-blocking@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"
@@ -10834,6 +11487,57 @@ slash@^5.1.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce"
integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==
+smart-buffer@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+ integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+
+socket.io-adapter@~2.5.2:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz#4fdb1358667f6d68f25343353bd99bd11ee41006"
+ integrity sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==
+ dependencies:
+ debug "~4.3.4"
+ ws "~8.11.0"
+
+socket.io-parser@~4.2.4:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83"
+ integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==
+ dependencies:
+ "@socket.io/component-emitter" "~3.1.0"
+ debug "~4.3.1"
+
+socket.io@^4.6.1:
+ version "4.7.5"
+ resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.5.tgz#56eb2d976aef9d1445f373a62d781a41c7add8f8"
+ integrity sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==
+ dependencies:
+ accepts "~1.3.4"
+ base64id "~2.0.0"
+ cors "~2.8.5"
+ debug "~4.3.2"
+ engine.io "~6.5.2"
+ socket.io-adapter "~2.5.2"
+ socket.io-parser "~4.2.4"
+
+socks-proxy-agent@^8.0.2:
+ version "8.0.3"
+ resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz#6b2da3d77364fde6292e810b496cb70440b9b89d"
+ integrity sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==
+ dependencies:
+ agent-base "^7.1.1"
+ debug "^4.3.4"
+ socks "^2.7.1"
+
+socks@^2.7.1:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5"
+ integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==
+ dependencies:
+ ip-address "^9.0.5"
+ smart-buffer "^4.2.0"
+
source-map-js@^1.0.1, source-map-js@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
@@ -10849,6 +11553,11 @@ source-map@^0.7.0, source-map@^0.7.4:
resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz"
integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
+source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
space-separated-tokens@^2.0.0:
version "2.0.2"
resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz"
@@ -10892,6 +11601,11 @@ split2@^4.1.0:
resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz"
integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
+sprintf-js@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
+ integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
+
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
@@ -11318,6 +12032,11 @@ through2@^2.0.3:
readable-stream "~2.3.6"
xtend "~4.0.1"
+tiny-emitter@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
+ integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
+
tiny-invariant@^1.3.1:
version "1.3.1"
resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz"
@@ -11453,7 +12172,7 @@ tslib@^1.11.1:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.5.0, tslib@^2.6.2:
+tslib@^2.0.1, tslib@^2.5.0, tslib@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
@@ -11561,7 +12280,7 @@ type-fest@^2.12.2, type-fest@^2.13.0:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz"
integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
-type-is@^1.6.16:
+type-is@^1.6.16, type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
@@ -11574,6 +12293,11 @@ type@^2.7.2:
resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0"
integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==
+typed-function@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-4.1.1.tgz#38ce3cae31f4f513bcb263563fdad27b2afa73e8"
+ integrity sha512-Pq1DVubcvibmm8bYcMowjVnnMwPVMeh0DIdA8ad8NZY2sJgapANJmiigSUwlt+EgXxpfIv8MWrQXTIzkfYZLYQ==
+
typed-rest-client@^1.8.4:
version "1.8.11"
resolved "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz"
@@ -11883,7 +12607,7 @@ unocss@^0.59.0:
"@unocss/transformer-variant-group" "0.59.1"
"@unocss/vite" "0.59.1"
-unpipe@~1.0.0:
+unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
@@ -12045,7 +12769,7 @@ varstream@^0.3.2:
dependencies:
readable-stream "^1.0.33"
-vary@^1.1.2:
+vary@^1, vary@^1.1.2, vary@~1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
@@ -12553,7 +13277,7 @@ wink-nlp@^1.14.3:
resolved "https://registry.npmjs.org/wink-nlp/-/wink-nlp-1.14.3.tgz"
integrity sha512-lvY5iCs3T8I34F8WKS70+2P0U9dWLn3vdPf/Z+m2VK14N7OmqnPzmHfh3moHdusajoQ37Em39z0IZB9K4x/96A==
-winston-transport@^4.5.0:
+winston-transport@^4.5.0, winston-transport@^4.7.0:
version "4.7.0"
resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz"
integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==
@@ -12579,6 +13303,23 @@ winston@^3.7.2:
triple-beam "^1.3.0"
winston-transport "^4.5.0"
+winston@^3.8.2:
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/winston/-/winston-3.13.0.tgz#e76c0d722f78e04838158c61adc1287201de7ce3"
+ integrity sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==
+ dependencies:
+ "@colors/colors" "^1.6.0"
+ "@dabh/diagnostics" "^2.0.2"
+ async "^3.2.3"
+ is-stream "^2.0.0"
+ logform "^2.4.0"
+ one-time "^1.0.0"
+ readable-stream "^3.4.0"
+ safe-stable-stringify "^2.3.1"
+ stack-trace "0.0.x"
+ triple-beam "^1.3.0"
+ winston-transport "^4.7.0"
+
workerpool@6.2.1:
version "6.2.1"
resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz"
@@ -12621,6 +13362,11 @@ ws@^8.13.0:
resolved "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz"
integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==
+ws@~8.11.0:
+ version "8.11.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143"
+ integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==
+
xml2js@^0.4.23:
version "0.4.23"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"