diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9a076928b58f1ccfc9c7837901cab00ed7c4da2b..bfef176f5ca99b228f5e7d8b622a61ea8a3bb31f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -61,10 +61,13 @@ jobs: run: pnpm run build --filter llamaindex - name: Copy examples run: rsync -rv --exclude=node_modules ./examples ${{ runner.temp }} - - name: Pack + - name: Pack @llamaindex/env + run: pnpm pack --pack-destination ${{ runner.temp }} + working-directory: packages/env + - name: Pack llamaindex run: pnpm pack --pack-destination ${{ runner.temp }} working-directory: packages/core - - name: Install llamaindex + - name: Install run: npm add ${{ runner.temp }}/*.tgz working-directory: ${{ runner.temp }}/examples - name: Run Type Check diff --git a/.vscode/settings.json b/.vscode/settings.json index 6c61f975722f67002db9e59a89a88d2c138c18fb..2e30bf86b8481cc1c35f8974ef3f47424ce1063d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,7 +5,6 @@ "[xml]": { "editor.defaultFormatter": "redhat.vscode-xml" }, - "jest.rootPath": "./packages/core", "[python]": { "editor.defaultFormatter": "ms-python.black-formatter" }, diff --git a/examples/ollama.ts b/examples/ollama.ts index 57b2b781bb7755fafbcf0357dc337c011d696fec..d5cd145e6f5973b11ff8267fb0f1dd8154535791 100644 --- a/examples/ollama.ts +++ b/examples/ollama.ts @@ -1,4 +1,4 @@ -import { Ollama } from "llamaindex"; +import { Ollama } from "llamaindex/llm/ollama"; (async () => { const llm = new Ollama({ model: "llama2", temperature: 0.75 }); diff --git a/package.json b/package.json index 217c8f0a52e12d3b25201688ed60ff889329b325..0a441a11ac24afb0747a62ac357593443571577d 100644 --- a/package.json +++ b/package.json @@ -18,15 +18,12 @@ }, "devDependencies": { "@changesets/cli": "^2.27.1", - "@types/jest": "^29.5.12", "eslint": "^8.56.0", "eslint-config-custom": "workspace:*", "husky": "^9.0.10", - "jest": "^29.7.0", "lint-staged": "^15.2.2", "prettier": "^3.2.5", "prettier-plugin-organize-imports": "^3.2.4", - "ts-jest": "^29.1.2", "turbo": "^1.12.3", "typescript": "^5.3.3" }, diff --git a/packages/core/.cjs.swcrc b/packages/core/.cjs.swcrc new file mode 100644 index 0000000000000000000000000000000000000000..14193839df49abbada7bcc60e6fe4bc73a477b42 --- /dev/null +++ b/packages/core/.cjs.swcrc @@ -0,0 +1,11 @@ +{ + "jsc": { + "parser": { + "syntax": "typescript" + }, + "target": "esnext" + }, + "module": { + "type": "commonjs" + } +} diff --git a/packages/core/.swcrc b/packages/core/.swcrc new file mode 100644 index 0000000000000000000000000000000000000000..60e144e7209dd5b8297d793f22a7a9c1cc49c215 --- /dev/null +++ b/packages/core/.swcrc @@ -0,0 +1,8 @@ +{ + "jsc": { + "parser": { + "syntax": "typescript" + }, + "target": "esnext" + } +} diff --git a/packages/core/jest.config.cjs b/packages/core/jest.config.cjs deleted file mode 100644 index 3f6d6b1470c105da06953348d096b8a6c7ed025c..0000000000000000000000000000000000000000 --- a/packages/core/jest.config.cjs +++ /dev/null @@ -1,6 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} */ -module.exports = { - preset: "ts-jest", - testEnvironment: "node", - testPathIgnorePatterns: ["/lib/", "/node_modules/", "/dist/"], -}; diff --git a/packages/core/package.json b/packages/core/package.json index bf31b6e6914f62ce11b46c562df0c2ee16c7e97f..9e9de9d429c13a338589d64f4e04c0efd243e543 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -3,9 +3,13 @@ "private": true, "version": "0.1.12", "license": "MIT", + "type": "module", "dependencies": { "@anthropic-ai/sdk": "^0.13.0", + "@aws-crypto/sha256-js": "^5.2.0", "@datastax/astra-db-ts": "^0.1.4", + "@llamaindex/cloud": "^0.0.1", + "@llamaindex/env": "workspace:*", "@mistralai/mistralai": "^0.0.10", "@notionhq/client": "^2.2.14", "@pinecone-database/pinecone": "^2.0.1", @@ -34,171 +38,46 @@ "wink-nlp": "^1.14.3" }, "devDependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@llamaindex/cloud": "^0.0.1", - "@types/edit-json-file": "^1.7.3", - "@types/jest": "^29.5.12", + "@swc/cli": "^0.3.9", + "@swc/core": "^1.4.2", "@types/lodash": "^4.14.202", "@types/node": "^18.19.14", "@types/papaparse": "^5.3.14", "@types/pg": "^8.11.0", - "bunchee": "^4.4.6", - "edit-json-file": "^1.8.0", + "concurrently": "^8.2.2", + "glob": "^10.3.10", "madge": "^6.1.0", "typescript": "^5.3.3" }, "engines": { "node": ">=18.0.0" }, - "types": "./dist/index.d.ts", - "main": "./dist/index.js", + "types": "./dist/type/index.d.ts", + "main": "./dist/cjs/index.cjs", "exports": { ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs", - "edge-light": "./dist/index.edge-light.mjs", - "require": "./dist/index.js" - }, - "./env": { - "types": "./dist/env.d.mts", - "import": "./dist/env.mjs", - "edge-light": "./dist/env.edge-light.mjs", - "require": "./dist/env.js" - }, - "./ChatEngine": { - "types": "./dist/ChatEngine.d.mts", - "import": "./dist/ChatEngine.mjs", - "require": "./dist/ChatEngine.js" - }, - "./ChatHistory": { - "types": "./dist/ChatHistory.d.mts", - "import": "./dist/ChatHistory.mjs", - "require": "./dist/ChatHistory.js" - }, - "./constants": { - "types": "./dist/constants.d.mts", - "import": "./dist/constants.mjs", - "require": "./dist/constants.js" - }, - "./GlobalsHelper": { - "types": "./dist/GlobalsHelper.d.mts", - "import": "./dist/GlobalsHelper.mjs", - "require": "./dist/GlobalsHelper.js" - }, - "./Node": { - "types": "./dist/Node.d.mts", - "import": "./dist/Node.mjs", - "require": "./dist/Node.js" - }, - "./OutputParser": { - "types": "./dist/OutputParser.d.mts", - "import": "./dist/OutputParser.mjs", - "require": "./dist/OutputParser.js" - }, - "./Prompt": { - "types": "./dist/Prompt.d.mts", - "import": "./dist/Prompt.mjs", - "require": "./dist/Prompt.js" - }, - "./PromptHelper": { - "types": "./dist/PromptHelper.d.mts", - "import": "./dist/PromptHelper.mjs", - "require": "./dist/PromptHelper.js" - }, - "./QueryEngine": { - "types": "./dist/QueryEngine.d.mts", - "import": "./dist/QueryEngine.mjs", - "require": "./dist/QueryEngine.js" - }, - "./QuestionGenerator": { - "types": "./dist/QuestionGenerator.d.mts", - "import": "./dist/QuestionGenerator.mjs", - "require": "./dist/QuestionGenerator.js" - }, - "./Response": { - "types": "./dist/Response.d.mts", - "import": "./dist/Response.mjs", - "require": "./dist/Response.js" - }, - "./ServiceContext": { - "types": "./dist/ServiceContext.d.mts", - "import": "./dist/ServiceContext.mjs", - "require": "./dist/ServiceContext.js" - }, - "./TextSplitter": { - "types": "./dist/TextSplitter.d.mts", - "import": "./dist/TextSplitter.mjs", - "require": "./dist/TextSplitter.js" - }, - "./tools": { - "types": "./dist/tools.d.mts", - "import": "./dist/tools.mjs", - "require": "./dist/tools.js" - }, - "./objects": { - "types": "./dist/objects.d.mts", - "import": "./dist/objects.mjs", - "require": "./dist/objects.js" - }, - "./readers": { - "types": "./dist/readers.d.mts", - "import": "./dist/readers.mjs", - "require": "./dist/readers.js" - }, - "./readers/AssemblyAIReader": { - "types": "./dist/readers/AssemblyAIReader.d.mts", - "import": "./dist/readers/AssemblyAIReader.mjs", - "require": "./dist/readers/AssemblyAIReader.js" - }, - "./readers/CSVReader": { - "types": "./dist/readers/CSVReader.d.mts", - "import": "./dist/readers/CSVReader.mjs", - "require": "./dist/readers/CSVReader.js" - }, - "./readers/DocxReader": { - "types": "./dist/readers/DocxReader.d.mts", - "import": "./dist/readers/DocxReader.mjs", - "require": "./dist/readers/DocxReader.js" - }, - "./readers/HTMLReader": { - "types": "./dist/readers/HTMLReader.d.mts", - "import": "./dist/readers/HTMLReader.mjs", - "require": "./dist/readers/HTMLReader.js" - }, - "./readers/ImageReader": { - "types": "./dist/readers/ImageReader.d.mts", - "import": "./dist/readers/ImageReader.mjs", - "require": "./dist/readers/ImageReader.js" - }, - "./readers/MarkdownReader": { - "types": "./dist/readers/MarkdownReader.d.mts", - "import": "./dist/readers/MarkdownReader.mjs", - "require": "./dist/readers/MarkdownReader.js" - }, - "./readers/NotionReader": { - "types": "./dist/readers/NotionReader.d.mts", - "import": "./dist/readers/NotionReader.mjs", - "require": "./dist/readers/NotionReader.js" - }, - "./readers/PDFReader": { - "types": "./dist/readers/PDFReader.d.mts", - "import": "./dist/readers/PDFReader.mjs", - "require": "./dist/readers/PDFReader.js" - }, - "./readers/SimpleDirectoryReader": { - "types": "./dist/readers/SimpleDirectoryReader.d.mts", - "import": "./dist/readers/SimpleDirectoryReader.mjs", - "require": "./dist/readers/SimpleDirectoryReader.js" - }, - "./readers/SimpleMongoReader": { - "types": "./dist/readers/SimpleMongoReader.d.mts", - "import": "./dist/readers/SimpleMongoReader.mjs", - "require": "./dist/readers/SimpleMongoReader.js" - }, - "./cloud": { - "types": "./dist/cloud.d.mts", - "import": "./dist/cloud.mjs", - "require": "./dist/cloud.js" + "import": { + "types": "./dist/type/index.d.ts", + "default": "./dist/index.js" + }, + "edge-light": { + "types": "./dist/type/index.d.ts", + "default": "./dist/index.edge-light.js" + }, + "require": { + "types": "./dist/type/index.d.ts", + "default": "./dist/cjs/index.cjs" + } + }, + "./*": { + "import": { + "types": "./dist/type/*.d.ts", + "default": "./dist/*.js" + }, + "require": { + "types": "./dist/type/*.d.ts", + "default": "./dist/cjs/*.cjs" + } } }, "files": [ @@ -211,13 +90,11 @@ }, "scripts": { "lint": "eslint .", - "test": "jest", - "build": "rm -rf ./dist && NODE_OPTIONS=\"--max-old-space-size=12288\" bunchee", - "postbuild": "pnpm run copy && pnpm run modify-package-json", - "copy": "cp -r package.json CHANGELOG.md ../../README.md ../../LICENSE examples src dist/", - "modify-package-json": "node ./scripts/modify-package-json.mjs", - "prepublish": "pnpm run modify-package-json && echo \"please cd ./dist and run pnpm publish\" && exit 1", - "dev": "NODE_OPTIONS=\"--max-old-space-size=16384\" bunchee -w", - "circular-check": "madge -c ./src/index.ts" + "build": "rm -rf ./dist && pnpm run build:esm && pnpm run build:cjs && pnpm run build:type", + "build:esm": "swc src -d dist --strip-leading-paths --config-file .swcrc", + "build:cjs": "swc src -d dist/cjs --strip-leading-paths --config-file .cjs.swcrc --out-file-extension cjs", + "build:type": "tsc -p tsconfig.json", + "circular-check": "madge -c ./src/index.ts", + "dev": "concurrently \"pnpm run build:esm --watch\" \"pnpm run build:cjs --watch\" \"pnpm run build:type --watch\"" } } diff --git a/packages/core/scripts/modify-package-json.mjs b/packages/core/scripts/modify-package-json.mjs deleted file mode 100755 index 6f529a58124b25f4980ed73ceb3164abbb084988..0000000000000000000000000000000000000000 --- a/packages/core/scripts/modify-package-json.mjs +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env node -/** - * This script is used to modify the package.json file in the dist folder - * so that it can be published to npm. - */ -import editJsonFile from "edit-json-file"; -import fs from "node:fs/promises"; - -{ - await fs.copyFile("./package.json", "./dist/package.json"); - const file = editJsonFile("./dist/package.json"); - - file.unset("scripts"); - file.unset("private"); - await new Promise((resolve) => file.save(resolve)); -} -{ - const packageJson = await fs.readFile("./dist/package.json", "utf8"); - const modifiedPackageJson = packageJson.replaceAll("./dist/", "./"); - await fs.writeFile( - "./dist/package.json", - JSON.stringify(JSON.parse(modifiedPackageJson), null, 2), - "utf8", - ); -} diff --git a/packages/core/src/ChatHistory.ts b/packages/core/src/ChatHistory.ts index 52f692156f27eb0882a44f1eaaafcdc8cd22fe9a..31ff9dd707cc81c4cc519ee4598b5abcfa646733 100644 --- a/packages/core/src/ChatHistory.ts +++ b/packages/core/src/ChatHistory.ts @@ -1,10 +1,10 @@ -import { OpenAI } from "./llm/LLM"; -import { ChatMessage, LLM, MessageType } from "./llm/types"; +import { OpenAI } from "./llm/LLM.js"; +import { ChatMessage, LLM, MessageType } from "./llm/types.js"; import { defaultSummaryPrompt, messagesToHistoryStr, SummaryPrompt, -} from "./Prompt"; +} from "./Prompt.js"; /** * A ChatHistory is used to keep the state of back and forth chat messages diff --git a/packages/core/src/GlobalsHelper.ts b/packages/core/src/GlobalsHelper.ts index a6bd825002a9ff02994345a10ad75eec1272cdca..7df884840b6158ccc1e6555eeb8d0b3280d95978 100644 --- a/packages/core/src/GlobalsHelper.ts +++ b/packages/core/src/GlobalsHelper.ts @@ -1,7 +1,7 @@ import { encodingForModel } from "js-tiktoken"; -import { Event, EventTag, EventType } from "./callbacks/CallbackManager"; -import { randomUUID } from "./env"; +import { randomUUID } from "@llamaindex/env"; +import { Event, EventTag, EventType } from "./callbacks/CallbackManager.js"; export enum Tokenizers { CL100K_BASE = "cl100k_base", diff --git a/packages/core/src/Node.ts b/packages/core/src/Node.ts index 99ae46af656cbc4a3abbab635a09b1477c86f192..b03a6d2c5a48cf3bf2f0294465a749db2bbc4d1e 100644 --- a/packages/core/src/Node.ts +++ b/packages/core/src/Node.ts @@ -1,5 +1,5 @@ +import { createSHA256, path, randomUUID } from "@llamaindex/env"; import _ from "lodash"; -import { createSHA256, path, randomUUID } from "./env"; export enum NodeRelationship { SOURCE = "SOURCE", diff --git a/packages/core/src/OutputParser.ts b/packages/core/src/OutputParser.ts index de356f6a83aeca58ba91dd12ac00ffa1999cf79a..37f016f5bea2ed3296ef979e34fdb5ae4eaa30e0 100644 --- a/packages/core/src/OutputParser.ts +++ b/packages/core/src/OutputParser.ts @@ -1,5 +1,5 @@ -import { SubQuestion } from "./engines/query/types"; -import { BaseOutputParser, StructuredOutput } from "./types"; +import { SubQuestion } from "./engines/query/types.js"; +import { BaseOutputParser, StructuredOutput } from "./types.js"; /** * Error class for output parsing. Due to the nature of LLMs, anytime we use LLM diff --git a/packages/core/src/Prompt.ts b/packages/core/src/Prompt.ts index 41888540e78a371a6305ed6bb7667d529f3de8d7..bf967d15c1eb1487cd4d4110e49334c31e30b068 100644 --- a/packages/core/src/Prompt.ts +++ b/packages/core/src/Prompt.ts @@ -1,6 +1,6 @@ -import { SubQuestion } from "./engines/query/types"; -import { ChatMessage } from "./llm/types"; -import { ToolMetadata } from "./types"; +import { SubQuestion } from "./engines/query/types.js"; +import { ChatMessage } from "./llm/types.js"; +import { ToolMetadata } from "./types.js"; /** * A SimplePrompt is a function that takes a dictionary of inputs and returns a string. diff --git a/packages/core/src/PromptHelper.ts b/packages/core/src/PromptHelper.ts index 8b497df9340b9ae73d1b889df012b16382682229..ff11819d509a1039a243e6d4479b382c8c4c4dd3 100644 --- a/packages/core/src/PromptHelper.ts +++ b/packages/core/src/PromptHelper.ts @@ -1,12 +1,12 @@ -import { globalsHelper } from "./GlobalsHelper"; -import { SimplePrompt } from "./Prompt"; -import { SentenceSplitter } from "./TextSplitter"; +import { globalsHelper } from "./GlobalsHelper.js"; +import { SimplePrompt } from "./Prompt.js"; +import { SentenceSplitter } from "./TextSplitter.js"; import { DEFAULT_CHUNK_OVERLAP_RATIO, DEFAULT_CONTEXT_WINDOW, DEFAULT_NUM_OUTPUTS, DEFAULT_PADDING, -} from "./constants"; +} from "./constants.js"; export function getEmptyPromptTxt(prompt: SimplePrompt) { return prompt({}); diff --git a/packages/core/src/QuestionGenerator.ts b/packages/core/src/QuestionGenerator.ts index 5dc1fa9ae34257bb661ba754d08f9bf289685f80..1d1053967dfb4a123275b59f3cb56ac9e519ccf6 100644 --- a/packages/core/src/QuestionGenerator.ts +++ b/packages/core/src/QuestionGenerator.ts @@ -1,14 +1,14 @@ -import { SubQuestionOutputParser } from "./OutputParser"; +import { SubQuestionOutputParser } from "./OutputParser.js"; import { SubQuestionPrompt, buildToolsText, defaultSubQuestionPrompt, -} from "./Prompt"; -import { BaseQuestionGenerator, SubQuestion } from "./engines/query/types"; -import { OpenAI } from "./llm/LLM"; -import { LLM } from "./llm/types"; -import { PromptMixin } from "./prompts"; -import { BaseOutputParser, StructuredOutput, ToolMetadata } from "./types"; +} from "./Prompt.js"; +import { BaseQuestionGenerator, SubQuestion } from "./engines/query/types.js"; +import { OpenAI } from "./llm/LLM.js"; +import { LLM } from "./llm/types.js"; +import { PromptMixin } from "./prompts/index.js"; +import { BaseOutputParser, StructuredOutput, ToolMetadata } from "./types.js"; /** * LLMQuestionGenerator uses the LLM to generate new questions for the LLM using tools and a user query. diff --git a/packages/core/src/Response.ts b/packages/core/src/Response.ts index 5ae9514b77666000b306c7617d988b12dc7db88d..3f6b9b633f435a0033e7b3d33b892accbfb38fd9 100644 --- a/packages/core/src/Response.ts +++ b/packages/core/src/Response.ts @@ -1,4 +1,4 @@ -import { BaseNode } from "./Node"; +import { BaseNode } from "./Node.js"; /** * Response is the output of a LLM diff --git a/packages/core/src/Retriever.ts b/packages/core/src/Retriever.ts index 6b0f1024db9e2c2ae146c1363ab8c5eff7477702..f5ed6c15d5c5166e4fd23875702711c7bb68f6ce 100644 --- a/packages/core/src/Retriever.ts +++ b/packages/core/src/Retriever.ts @@ -1,6 +1,6 @@ -import { Event } from "./callbacks/CallbackManager"; -import { NodeWithScore } from "./Node"; -import { ServiceContext } from "./ServiceContext"; +import { Event } from "./callbacks/CallbackManager.js"; +import { NodeWithScore } from "./Node.js"; +import { ServiceContext } from "./ServiceContext.js"; /** * Retrievers retrieve the nodes that most closely match our query in similarity. diff --git a/packages/core/src/ServiceContext.ts b/packages/core/src/ServiceContext.ts index 7bdb2c66484d6e3ce55b5632346af4cf199cb1b9..ba72d2f363f730830fb57597affdb8ff814939d4 100644 --- a/packages/core/src/ServiceContext.ts +++ b/packages/core/src/ServiceContext.ts @@ -1,8 +1,10 @@ -import { CallbackManager } from "./callbacks/CallbackManager"; -import { BaseEmbedding, OpenAIEmbedding } from "./embeddings"; -import { LLM, OpenAI } from "./llm"; -import { NodeParser, SimpleNodeParser } from "./nodeParsers"; -import { PromptHelper } from "./PromptHelper"; +import { PromptHelper } from "./PromptHelper.js"; +import { CallbackManager } from "./callbacks/CallbackManager.js"; +import { OpenAIEmbedding } from "./embeddings/OpenAIEmbedding.js"; +import { BaseEmbedding } from "./embeddings/types.js"; +import { LLM, OpenAI } from "./llm/index.js"; +import { SimpleNodeParser } from "./nodeParsers/SimpleNodeParser.js"; +import { NodeParser } from "./nodeParsers/types.js"; /** * The ServiceContext is a collection of components that are used in different parts of the application. diff --git a/packages/core/src/TextSplitter.ts b/packages/core/src/TextSplitter.ts index 94c7816762ce8f44afb57854d9eec6b3d3206a76..10b8dd5276f424751448eeca3519998adfc8c3b4 100644 --- a/packages/core/src/TextSplitter.ts +++ b/packages/core/src/TextSplitter.ts @@ -1,7 +1,7 @@ -import { EOL } from "./env"; +import { EOL } from "@llamaindex/env"; // GitHub translated -import { globalsHelper } from "./GlobalsHelper"; -import { DEFAULT_CHUNK_OVERLAP, DEFAULT_CHUNK_SIZE } from "./constants"; +import { globalsHelper } from "./GlobalsHelper.js"; +import { DEFAULT_CHUNK_OVERLAP, DEFAULT_CHUNK_SIZE } from "./constants.js"; class TextSplit { textChunk: string; diff --git a/packages/core/src/agent/index.ts b/packages/core/src/agent/index.ts index 1ef9f464e53137db00a74a7dfcfaf359a6af8fad..bbf0a4481c4ae9aff71e0eafec80f15a0b40cb11 100644 --- a/packages/core/src/agent/index.ts +++ b/packages/core/src/agent/index.ts @@ -1,5 +1,5 @@ -export * from "./openai/base"; -export * from "./openai/worker"; -export * from "./react/base"; -export * from "./react/worker"; -export * from "./types"; +export * from "./openai/base.js"; +export * from "./openai/worker.js"; +export * from "./react/base.js"; +export * from "./react/worker.js"; +export * from "./types.js"; diff --git a/packages/core/src/agent/openai/base.ts b/packages/core/src/agent/openai/base.ts index 6c5c15e6182127958e6457a697ac52ff9c0e1b77..a39a4fee725b65237e15e7230eb47c1845c33bcb 100644 --- a/packages/core/src/agent/openai/base.ts +++ b/packages/core/src/agent/openai/base.ts @@ -1,9 +1,9 @@ -import { CallbackManager } from "../../callbacks/CallbackManager"; -import { ChatMessage, OpenAI } from "../../llm"; -import { ObjectRetriever } from "../../objects/base"; -import { BaseTool } from "../../types"; -import { AgentRunner } from "../runner/base"; -import { OpenAIAgentWorker } from "./worker"; +import { CallbackManager } from "../../callbacks/CallbackManager.js"; +import { ChatMessage, OpenAI } from "../../llm/index.js"; +import { ObjectRetriever } from "../../objects/base.js"; +import { BaseTool } from "../../types.js"; +import { AgentRunner } from "../runner/base.js"; +import { OpenAIAgentWorker } from "./worker.js"; type OpenAIAgentParams = { tools?: BaseTool[]; diff --git a/packages/core/src/agent/openai/utils.ts b/packages/core/src/agent/openai/utils.ts index fb2094b0e55e0a6db0d11c7acbaefcf2fcc4d269..4dd913f5ba6dcd1f2e1ab3ed6f8022f3fad86f62 100644 --- a/packages/core/src/agent/openai/utils.ts +++ b/packages/core/src/agent/openai/utils.ts @@ -1,4 +1,4 @@ -import { ToolMetadata } from "../../types"; +import { ToolMetadata } from "../../types.js"; export type OpenAIFunction = { type: "function"; diff --git a/packages/core/src/agent/openai/worker.ts b/packages/core/src/agent/openai/worker.ts index 779a7c0142e112ac060a44eac9226fa220b97a07..401645ae7a218dbba9730f9b6288f7d6f70e3c80 100644 --- a/packages/core/src/agent/openai/worker.ts +++ b/packages/core/src/agent/openai/worker.ts @@ -1,23 +1,26 @@ // Assuming that the necessary interfaces and classes (like BaseTool, OpenAI, ChatMessage, CallbackManager, etc.) are defined elsewhere -import { CallbackManager } from "../../callbacks/CallbackManager"; -import { AgentChatResponse, ChatResponseMode } from "../../engines/chat"; -import { randomUUID } from "../../env"; +import { randomUUID } from "@llamaindex/env"; +import { CallbackManager } from "../../callbacks/CallbackManager.js"; +import { + AgentChatResponse, + ChatResponseMode, +} from "../../engines/chat/types.js"; import { ChatMessage, ChatResponse, ChatResponseChunk, OpenAI, -} from "../../llm"; -import { ChatMemoryBuffer } from "../../memory/ChatMemoryBuffer"; -import { ObjectRetriever } from "../../objects/base"; -import { ToolOutput } from "../../tools/types"; -import { callToolWithErrorHandling } from "../../tools/utils"; -import { BaseTool } from "../../types"; -import { AgentWorker, Task, TaskStep, TaskStepOutput } from "../types"; -import { addUserStepToMemory, getFunctionByName } from "../utils"; -import { OpenAIToolCall } from "./types/chat"; -import { toOpenAiTool } from "./utils"; +} from "../../llm/index.js"; +import { ChatMemoryBuffer } from "../../memory/ChatMemoryBuffer.js"; +import { ObjectRetriever } from "../../objects/base.js"; +import { ToolOutput } from "../../tools/types.js"; +import { callToolWithErrorHandling } from "../../tools/utils.js"; +import { BaseTool } from "../../types.js"; +import { AgentWorker, Task, TaskStep, TaskStepOutput } from "../types.js"; +import { addUserStepToMemory, getFunctionByName } from "../utils.js"; +import { OpenAIToolCall } from "./types/chat.js"; +import { toOpenAiTool } from "./utils.js"; const DEFAULT_MAX_FUNCTION_CALLS = 5; diff --git a/packages/core/src/agent/react/base.ts b/packages/core/src/agent/react/base.ts index e0883e4bbe027a06e6650cfe9d029ceade8076cf..fa97c30110f4f25217eaed5763eac4fce5a28a37 100644 --- a/packages/core/src/agent/react/base.ts +++ b/packages/core/src/agent/react/base.ts @@ -1,9 +1,9 @@ -import { CallbackManager } from "../../callbacks/CallbackManager"; -import { ChatMessage, LLM } from "../../llm"; -import { ObjectRetriever } from "../../objects/base"; -import { BaseTool } from "../../types"; -import { AgentRunner } from "../runner/base"; -import { ReActAgentWorker } from "./worker"; +import { CallbackManager } from "../../callbacks/CallbackManager.js"; +import { ChatMessage, LLM } from "../../llm/index.js"; +import { ObjectRetriever } from "../../objects/base.js"; +import { BaseTool } from "../../types.js"; +import { AgentRunner } from "../runner/base.js"; +import { ReActAgentWorker } from "./worker.js"; type ReActAgentParams = { tools: BaseTool[]; diff --git a/packages/core/src/agent/react/formatter.ts b/packages/core/src/agent/react/formatter.ts index bcf25aa052889eabd0de022377056a23a234bcb3..ce2744390d6a233dc3755d63435b08b0bad9498d 100644 --- a/packages/core/src/agent/react/formatter.ts +++ b/packages/core/src/agent/react/formatter.ts @@ -1,7 +1,7 @@ -import { ChatMessage } from "../../llm"; -import { BaseTool } from "../../types"; -import { getReactChatSystemHeader } from "./prompts"; -import { BaseReasoningStep, ObservationReasoningStep } from "./types"; +import { ChatMessage } from "../../llm/index.js"; +import { BaseTool } from "../../types.js"; +import { getReactChatSystemHeader } from "./prompts.js"; +import { BaseReasoningStep, ObservationReasoningStep } from "./types.js"; function getReactToolDescriptions(tools: BaseTool[]): string[] { const toolDescs: string[] = []; diff --git a/packages/core/src/agent/react/outputParser.ts b/packages/core/src/agent/react/outputParser.ts index 3ed1d7be3c9edeb76c241beb443b7dac6378d1de..d1c1d573f6b5858f1d341179b9b1eb753d3bef00 100644 --- a/packages/core/src/agent/react/outputParser.ts +++ b/packages/core/src/agent/react/outputParser.ts @@ -3,7 +3,7 @@ import { BaseOutputParser, BaseReasoningStep, ResponseReasoningStep, -} from "./types"; +} from "./types.js"; function extractJsonStr(text: string): string { const pattern = /\{.*\}/s; diff --git a/packages/core/src/agent/react/types.ts b/packages/core/src/agent/react/types.ts index 04e7889e2bebda15a1d33ad831e9fb309ba7d068..660bc1c7906b909321bae72b465932c2ba752b4b 100644 --- a/packages/core/src/agent/react/types.ts +++ b/packages/core/src/agent/react/types.ts @@ -1,4 +1,4 @@ -import { ChatMessage } from "../../llm"; +import { ChatMessage } from "../../llm/index.js"; export interface BaseReasoningStep { getContent(): string; diff --git a/packages/core/src/agent/react/worker.ts b/packages/core/src/agent/react/worker.ts index 1bb48691a8c5fbb4ee46fbd5dbe7c5fbac126a7e..1af501792fc24788374220f8facfdc1b2c43124a 100644 --- a/packages/core/src/agent/react/worker.ts +++ b/packages/core/src/agent/react/worker.ts @@ -1,20 +1,20 @@ import { randomUUID } from "crypto"; -import { CallbackManager } from "../../callbacks/CallbackManager"; -import { AgentChatResponse } from "../../engines/chat"; -import { ChatResponse, LLM, OpenAI } from "../../llm"; -import { ChatMemoryBuffer } from "../../memory/ChatMemoryBuffer"; -import { ObjectRetriever } from "../../objects/base"; -import { ToolOutput } from "../../tools"; -import { BaseTool } from "../../types"; -import { AgentWorker, Task, TaskStep, TaskStepOutput } from "../types"; -import { ReActChatFormatter } from "./formatter"; -import { ReActOutputParser } from "./outputParser"; +import { CallbackManager } from "../../callbacks/CallbackManager.js"; +import { AgentChatResponse } from "../../engines/chat/index.js"; +import { ChatResponse, LLM, OpenAI } from "../../llm/index.js"; +import { ChatMemoryBuffer } from "../../memory/ChatMemoryBuffer.js"; +import { ObjectRetriever } from "../../objects/base.js"; +import { ToolOutput } from "../../tools/index.js"; +import { BaseTool } from "../../types.js"; +import { AgentWorker, Task, TaskStep, TaskStepOutput } from "../types.js"; +import { ReActChatFormatter } from "./formatter.js"; +import { ReActOutputParser } from "./outputParser.js"; import { ActionReasoningStep, BaseReasoningStep, ObservationReasoningStep, ResponseReasoningStep, -} from "./types"; +} from "./types.js"; type ReActAgentWorkerParams = { tools: BaseTool[]; diff --git a/packages/core/src/agent/runner/base.ts b/packages/core/src/agent/runner/base.ts index 5183f16f98015fe6c1a77aa6eb5bafcc87729922..5a0764895c8a43bab78877b19c935f7c6ef6d780 100644 --- a/packages/core/src/agent/runner/base.ts +++ b/packages/core/src/agent/runner/base.ts @@ -1,15 +1,15 @@ import { randomUUID } from "crypto"; -import { CallbackManager } from "../../callbacks/CallbackManager"; +import { CallbackManager } from "../../callbacks/CallbackManager.js"; import { AgentChatResponse, ChatEngineAgentParams, ChatResponseMode, -} from "../../engines/chat"; -import { ChatMessage, LLM } from "../../llm"; -import { ChatMemoryBuffer } from "../../memory/ChatMemoryBuffer"; -import { BaseMemory } from "../../memory/types"; -import { AgentWorker, Task, TaskStep, TaskStepOutput } from "../types"; -import { AgentState, BaseAgentRunner, TaskState } from "./types"; +} from "../../engines/chat/index.js"; +import { ChatMessage, LLM } from "../../llm/index.js"; +import { ChatMemoryBuffer } from "../../memory/ChatMemoryBuffer.js"; +import { BaseMemory } from "../../memory/types.js"; +import { AgentWorker, Task, TaskStep, TaskStepOutput } from "../types.js"; +import { AgentState, BaseAgentRunner, TaskState } from "./types.js"; const validateStepFromArgs = ( taskId: string, diff --git a/packages/core/src/agent/runner/types.ts b/packages/core/src/agent/runner/types.ts index b4e7a2236a05e2bd486b2c2404a9aeb285138831..3def71e6ab07b1226f59f068846e0ae3b241fb7f 100644 --- a/packages/core/src/agent/runner/types.ts +++ b/packages/core/src/agent/runner/types.ts @@ -1,5 +1,5 @@ -import { AgentChatResponse } from "../../engines/chat"; -import { BaseAgent, Task, TaskStep, TaskStepOutput } from "../types"; +import { AgentChatResponse } from "../../engines/chat/index.js"; +import { BaseAgent, Task, TaskStep, TaskStepOutput } from "../types.js"; export class TaskState { task!: Task; diff --git a/packages/core/src/agent/types.ts b/packages/core/src/agent/types.ts index e862825f583acaf96e3b46036d1395ab48796b51..e82060c2e67b6b1198fbfb7d0980aac4d8270162 100644 --- a/packages/core/src/agent/types.ts +++ b/packages/core/src/agent/types.ts @@ -1,5 +1,8 @@ -import { AgentChatResponse, ChatEngineAgentParams } from "../engines/chat"; -import { QueryEngineParamsNonStreaming } from "../types"; +import { + AgentChatResponse, + ChatEngineAgentParams, +} from "../engines/chat/index.js"; +import { QueryEngineParamsNonStreaming } from "../types.js"; export interface AgentWorker { initializeStep(task: Task, kwargs?: any): TaskStep; diff --git a/packages/core/src/agent/utils.ts b/packages/core/src/agent/utils.ts index 4d6aa8098d884315030c15558f6adb2f138d34cf..d1953bf47ff696dbe118848b75f73846af893243 100644 --- a/packages/core/src/agent/utils.ts +++ b/packages/core/src/agent/utils.ts @@ -1,7 +1,7 @@ -import { ChatMessage } from "../llm"; -import { ChatMemoryBuffer } from "../memory/ChatMemoryBuffer"; -import { BaseTool } from "../types"; -import { TaskStep } from "./types"; +import { ChatMessage } from "../llm/index.js"; +import { ChatMemoryBuffer } from "../memory/ChatMemoryBuffer.js"; +import { BaseTool } from "../types.js"; +import { TaskStep } from "./types.js"; /** * Adds the user's input to the memory. diff --git a/packages/core/src/callbacks/CallbackManager.ts b/packages/core/src/callbacks/CallbackManager.ts index 43e314e893d40be5079975e918d830620f784d51..038707bf0d66711de54cbfa9fa27b7e900c3d075 100644 --- a/packages/core/src/callbacks/CallbackManager.ts +++ b/packages/core/src/callbacks/CallbackManager.ts @@ -1,5 +1,5 @@ import type { Anthropic } from "@anthropic-ai/sdk"; -import { NodeWithScore } from "../Node"; +import { NodeWithScore } from "../Node.js"; /* An event is a wrapper that groups related operations. diff --git a/packages/core/src/cloud/LlamaCloudIndex.ts b/packages/core/src/cloud/LlamaCloudIndex.ts index 0daa76c8d19d268ef42c662f7577dbca8d66cf03..ff433c157a67aaf4e89d6ddb5cc5ea6df46f04f5 100644 --- a/packages/core/src/cloud/LlamaCloudIndex.ts +++ b/packages/core/src/cloud/LlamaCloudIndex.ts @@ -1,10 +1,10 @@ -import { BaseRetriever } from "../Retriever"; -import { RetrieverQueryEngine } from "../engines/query/RetrieverQueryEngine"; -import { BaseNodePostprocessor } from "../postprocessors"; -import { BaseSynthesizer } from "../synthesizers"; -import { BaseQueryEngine } from "../types"; -import { LlamaCloudRetriever, RetrieveParams } from "./LlamaCloudRetriever"; -import { CloudConstructorParams } from "./types"; +import { BaseRetriever } from "../Retriever.js"; +import { RetrieverQueryEngine } from "../engines/query/RetrieverQueryEngine.js"; +import { BaseNodePostprocessor } from "../postprocessors/types.js"; +import { BaseSynthesizer } from "../synthesizers/types.js"; +import { BaseQueryEngine } from "../types.js"; +import { LlamaCloudRetriever, RetrieveParams } from "./LlamaCloudRetriever.js"; +import { CloudConstructorParams } from "./types.js"; export class LlamaCloudIndex { params: CloudConstructorParams; diff --git a/packages/core/src/cloud/LlamaCloudRetriever.ts b/packages/core/src/cloud/LlamaCloudRetriever.ts index 9773831342a4416f68657636c14084d1f06cf33a..c3e3613f9e0671a4ecf7055c50d749da46a1a1c2 100644 --- a/packages/core/src/cloud/LlamaCloudRetriever.ts +++ b/packages/core/src/cloud/LlamaCloudRetriever.ts @@ -1,15 +1,18 @@ import { PlatformApi, PlatformApiClient } from "@llamaindex/cloud"; -import { globalsHelper } from "../GlobalsHelper"; -import { NodeWithScore, ObjectType, jsonToNode } from "../Node"; -import { BaseRetriever } from "../Retriever"; -import { ServiceContext, serviceContextFromDefaults } from "../ServiceContext"; -import { Event } from "../callbacks/CallbackManager"; +import { globalsHelper } from "../GlobalsHelper.js"; +import { NodeWithScore, ObjectType, jsonToNode } from "../Node.js"; +import { BaseRetriever } from "../Retriever.js"; +import { + ServiceContext, + serviceContextFromDefaults, +} from "../ServiceContext.js"; +import { Event } from "../callbacks/CallbackManager.js"; import { ClientParams, CloudConstructorParams, DEFAULT_PROJECT_NAME, -} from "./types"; -import { getClient } from "./utils"; +} from "./types.js"; +import { getClient } from "./utils.js"; export type RetrieveParams = Omit< PlatformApi.RetrievalParams, diff --git a/packages/core/src/cloud/index.ts b/packages/core/src/cloud/index.ts index 629b2e2ace2f96205a6242f59a029b975fa2d9ac..15558abb0db5a5ee9b7a4590dec79e3d413d9099 100644 --- a/packages/core/src/cloud/index.ts +++ b/packages/core/src/cloud/index.ts @@ -1,2 +1,2 @@ -export * from "./LlamaCloudIndex"; -export * from "./LlamaCloudRetriever"; +export * from "./LlamaCloudIndex.js"; +export * from "./LlamaCloudRetriever.js"; diff --git a/packages/core/src/cloud/types.ts b/packages/core/src/cloud/types.ts index de74bc2edb14520cc2ee261c5e5cfae4769d0fb5..3fc118344130f33ae9ed80b8a60849e60e4fd9b6 100644 --- a/packages/core/src/cloud/types.ts +++ b/packages/core/src/cloud/types.ts @@ -1,4 +1,4 @@ -import { ServiceContext } from "../ServiceContext"; +import { ServiceContext } from "../ServiceContext.js"; export const DEFAULT_PROJECT_NAME = "default"; export const DEFAULT_BASE_URL = "https://api.cloud.llamaindex.ai"; diff --git a/packages/core/src/cloud/utils.ts b/packages/core/src/cloud/utils.ts index 9aaaab805c4020cd2837e658e5a49de74c46c17b..e6a7a1dc5430b4c36f84d69e26e8996be717f1b9 100644 --- a/packages/core/src/cloud/utils.ts +++ b/packages/core/src/cloud/utils.ts @@ -1,5 +1,5 @@ import { PlatformApiClient } from "@llamaindex/cloud"; -import { ClientParams, DEFAULT_BASE_URL } from "./types"; +import { ClientParams, DEFAULT_BASE_URL } from "./types.js"; export async function getClient({ apiKey, diff --git a/packages/core/src/embeddings/ClipEmbedding.ts b/packages/core/src/embeddings/ClipEmbedding.ts index d97dad94459346a2e84c8af7229007a2379a474a..6658342cf76af8affe1d0bdd36b9fec5e6504b4b 100644 --- a/packages/core/src/embeddings/ClipEmbedding.ts +++ b/packages/core/src/embeddings/ClipEmbedding.ts @@ -1,6 +1,6 @@ -import { ImageType } from "../Node"; -import { MultiModalEmbedding } from "./MultiModalEmbedding"; -import { readImage } from "./utils"; +import { ImageType } from "../Node.js"; +import { MultiModalEmbedding } from "./MultiModalEmbedding.js"; +import { readImage } from "./utils.js"; export enum ClipEmbeddingModelType { XENOVA_CLIP_VIT_BASE_PATCH32 = "Xenova/clip-vit-base-patch32", diff --git a/packages/core/src/embeddings/HuggingFaceEmbedding.ts b/packages/core/src/embeddings/HuggingFaceEmbedding.ts index 810bc14fbcedb66b0b039704534f417bfa531884..91b6514e9b2c9763050e575f83fa7b2c6ca38da4 100644 --- a/packages/core/src/embeddings/HuggingFaceEmbedding.ts +++ b/packages/core/src/embeddings/HuggingFaceEmbedding.ts @@ -1,4 +1,4 @@ -import { BaseEmbedding } from "./types"; +import { BaseEmbedding } from "./types.js"; export enum HuggingFaceEmbeddingModelType { XENOVA_ALL_MINILM_L6_V2 = "Xenova/all-MiniLM-L6-v2", diff --git a/packages/core/src/embeddings/MistralAIEmbedding.ts b/packages/core/src/embeddings/MistralAIEmbedding.ts index 8ade99282abf8fc61ec50054e6230fd2f8920a50..fdef08085ea2b6ccc50c7ae73771a0fb2a5f002b 100644 --- a/packages/core/src/embeddings/MistralAIEmbedding.ts +++ b/packages/core/src/embeddings/MistralAIEmbedding.ts @@ -1,5 +1,5 @@ -import { MistralAISession } from "../llm/mistral"; -import { BaseEmbedding } from "./types"; +import { MistralAISession } from "../llm/mistral.js"; +import { BaseEmbedding } from "./types.js"; export enum MistralAIEmbeddingModelType { MISTRAL_EMBED = "mistral-embed", diff --git a/packages/core/src/embeddings/MultiModalEmbedding.ts b/packages/core/src/embeddings/MultiModalEmbedding.ts index 46d68ec25948db03c0137c35094acb72f6af557d..df1958f6b15269c58ab84f667a3817e3a2a26602 100644 --- a/packages/core/src/embeddings/MultiModalEmbedding.ts +++ b/packages/core/src/embeddings/MultiModalEmbedding.ts @@ -1,5 +1,5 @@ -import { ImageType } from "../Node"; -import { BaseEmbedding } from "./types"; +import { ImageType } from "../Node.js"; +import { BaseEmbedding } from "./types.js"; /* * Base class for Multi Modal embeddings. diff --git a/packages/core/src/embeddings/OllamaEmbedding.ts b/packages/core/src/embeddings/OllamaEmbedding.ts index 896282c5884dac955019d0536a5fc4ae867cb71f..a6c326ef61a9e6b5c9ec870232316a1a221836e4 100644 --- a/packages/core/src/embeddings/OllamaEmbedding.ts +++ b/packages/core/src/embeddings/OllamaEmbedding.ts @@ -1,5 +1,5 @@ -import { Ollama } from "../llm/ollama"; -import { BaseEmbedding } from "./types"; +import { Ollama } from "../llm/ollama.js"; +import { BaseEmbedding } from "./types.js"; /** * OllamaEmbedding is an alias for Ollama that implements the BaseEmbedding interface. diff --git a/packages/core/src/embeddings/OpenAIEmbedding.ts b/packages/core/src/embeddings/OpenAIEmbedding.ts index 321c3da0c93aeeeb08226c52b5794660b4fa545d..5402111f9ba15df9112b558a0dec38aa138b168c 100644 --- a/packages/core/src/embeddings/OpenAIEmbedding.ts +++ b/packages/core/src/embeddings/OpenAIEmbedding.ts @@ -5,9 +5,9 @@ import { getAzureConfigFromEnv, getAzureModel, shouldUseAzure, -} from "../llm/azure"; -import { OpenAISession, getOpenAISession } from "../llm/open_ai"; -import { BaseEmbedding } from "./types"; +} from "../llm/azure.js"; +import { OpenAISession, getOpenAISession } from "../llm/open_ai.js"; +import { BaseEmbedding } from "./types.js"; export const ALL_OPENAI_EMBEDDING_MODELS = { "text-embedding-ada-002": { diff --git a/packages/core/src/embeddings/fireworks.ts b/packages/core/src/embeddings/fireworks.ts index a2abfa1313b5ecf29abc8cc2268b669827f2f3de..651e3919b1e7b2dbef28ede8d6f15f6002b0d0f8 100644 --- a/packages/core/src/embeddings/fireworks.ts +++ b/packages/core/src/embeddings/fireworks.ts @@ -1,4 +1,4 @@ -import { OpenAIEmbedding } from "./OpenAIEmbedding"; +import { OpenAIEmbedding } from "./OpenAIEmbedding.js"; export class FireworksEmbedding extends OpenAIEmbedding { constructor(init?: Partial<OpenAIEmbedding>) { diff --git a/packages/core/src/embeddings/index.ts b/packages/core/src/embeddings/index.ts index 4660233c0897c78bb8676c167cc761a1237127f6..005f1aaa3183015e6e02bcecdba32303996decc7 100644 --- a/packages/core/src/embeddings/index.ts +++ b/packages/core/src/embeddings/index.ts @@ -1,10 +1,10 @@ -export * from "./ClipEmbedding"; -export * from "./HuggingFaceEmbedding"; -export * from "./MistralAIEmbedding"; -export * from "./MultiModalEmbedding"; -export { OllamaEmbedding } from "./OllamaEmbedding"; -export * from "./OpenAIEmbedding"; -export { FireworksEmbedding } from "./fireworks"; -export { TogetherEmbedding } from "./together"; -export * from "./types"; -export * from "./utils"; +export * from "./ClipEmbedding.js"; +export * from "./HuggingFaceEmbedding.js"; +export * from "./MistralAIEmbedding.js"; +export * from "./MultiModalEmbedding.js"; +export { OllamaEmbedding } from "./OllamaEmbedding.js"; +export * from "./OpenAIEmbedding.js"; +export { FireworksEmbedding } from "./fireworks.js"; +export { TogetherEmbedding } from "./together.js"; +export * from "./types.js"; +export * from "./utils.js"; diff --git a/packages/core/src/embeddings/together.ts b/packages/core/src/embeddings/together.ts index d271a67333dd7655a8e943987f8f557168c50165..4c2ca91c671a3a1325667004882b81e0ee0fc544 100644 --- a/packages/core/src/embeddings/together.ts +++ b/packages/core/src/embeddings/together.ts @@ -1,4 +1,4 @@ -import { OpenAIEmbedding } from "./OpenAIEmbedding"; +import { OpenAIEmbedding } from "./OpenAIEmbedding.js"; export class TogetherEmbedding extends OpenAIEmbedding { constructor(init?: Partial<OpenAIEmbedding>) { diff --git a/packages/core/src/embeddings/types.ts b/packages/core/src/embeddings/types.ts index 1058e3ead02758c2289820349b52f1c35a921d7f..c365dfa1cb958e45b9dad4bb3777b36068026373 100644 --- a/packages/core/src/embeddings/types.ts +++ b/packages/core/src/embeddings/types.ts @@ -1,6 +1,6 @@ -import { BaseNode, MetadataMode } from "../Node"; -import { TransformComponent } from "../ingestion"; -import { SimilarityType, similarity } from "./utils"; +import { BaseNode, MetadataMode } from "../Node.js"; +import { TransformComponent } from "../ingestion/types.js"; +import { SimilarityType, similarity } from "./utils.js"; const DEFAULT_EMBED_BATCH_SIZE = 10; diff --git a/packages/core/src/embeddings/utils.ts b/packages/core/src/embeddings/utils.ts index ce1848e8716d59cc17489dd4fd927f6a31bc3d87..d69b5c3c160e32a3bc76404f3dbe38e4db72e843 100644 --- a/packages/core/src/embeddings/utils.ts +++ b/packages/core/src/embeddings/utils.ts @@ -1,8 +1,8 @@ +import { defaultFS } from "@llamaindex/env"; import _ from "lodash"; -import { ImageType } from "../Node"; -import { DEFAULT_SIMILARITY_TOP_K } from "../constants"; -import { defaultFS } from "../env"; -import { VectorStoreQueryMode } from "../storage/vectorStore/types"; +import { ImageType } from "../Node.js"; +import { DEFAULT_SIMILARITY_TOP_K } from "../constants.js"; +import { VectorStoreQueryMode } from "../storage/vectorStore/types.js"; /** * Similarity type diff --git a/packages/core/src/engines/chat/CondenseQuestionChatEngine.ts b/packages/core/src/engines/chat/CondenseQuestionChatEngine.ts index 0c73a1017f3b6fb9ddd69c78fe1f60b5faca06d9..22524203df891043da253c424f79e3171201e3c5 100644 --- a/packages/core/src/engines/chat/CondenseQuestionChatEngine.ts +++ b/packages/core/src/engines/chat/CondenseQuestionChatEngine.ts @@ -1,23 +1,23 @@ -import { ChatHistory, getHistory } from "../../ChatHistory"; +import { ChatHistory, getHistory } from "../../ChatHistory.js"; import { CondenseQuestionPrompt, defaultCondenseQuestionPrompt, messagesToHistoryStr, -} from "../../Prompt"; -import { Response } from "../../Response"; +} from "../../Prompt.js"; +import { Response } from "../../Response.js"; import { ServiceContext, serviceContextFromDefaults, -} from "../../ServiceContext"; -import { ChatMessage, LLM } from "../../llm"; -import { extractText, streamReducer } from "../../llm/utils"; -import { PromptMixin } from "../../prompts"; -import { BaseQueryEngine } from "../../types"; +} from "../../ServiceContext.js"; +import { ChatMessage, LLM } from "../../llm/index.js"; +import { extractText, streamReducer } from "../../llm/utils.js"; +import { PromptMixin } from "../../prompts/index.js"; +import { BaseQueryEngine } from "../../types.js"; import { ChatEngine, ChatEngineParamsNonStreaming, ChatEngineParamsStreaming, -} from "./types"; +} from "./types.js"; /** * CondenseQuestionChatEngine is used in conjunction with a Index (for example VectorStoreIndex). diff --git a/packages/core/src/engines/chat/ContextChatEngine.ts b/packages/core/src/engines/chat/ContextChatEngine.ts index c56ce0c50e35db7974ed8e2b47f0b3b55e4961e1..7d63c74d049f62ca5a09610dc636189e326df0a2 100644 --- a/packages/core/src/engines/chat/ContextChatEngine.ts +++ b/packages/core/src/engines/chat/ContextChatEngine.ts @@ -1,21 +1,30 @@ -import { ChatHistory, getHistory } from "../../ChatHistory"; -import { ContextSystemPrompt } from "../../Prompt"; -import { Response } from "../../Response"; -import { BaseRetriever } from "../../Retriever"; -import { Event } from "../../callbacks/CallbackManager"; -import { randomUUID } from "../../env"; -import { ChatMessage, ChatResponseChunk, LLM, OpenAI } from "../../llm"; -import { MessageContent } from "../../llm/types"; -import { extractText, streamConverter, streamReducer } from "../../llm/utils"; -import { BaseNodePostprocessor } from "../../postprocessors"; -import { PromptMixin } from "../../prompts"; -import { DefaultContextGenerator } from "./DefaultContextGenerator"; +import { randomUUID } from "@llamaindex/env"; +import { ChatHistory, getHistory } from "../../ChatHistory.js"; +import { ContextSystemPrompt } from "../../Prompt.js"; +import { Response } from "../../Response.js"; +import { BaseRetriever } from "../../Retriever.js"; +import { Event } from "../../callbacks/CallbackManager.js"; +import { + ChatMessage, + ChatResponseChunk, + LLM, + OpenAI, +} from "../../llm/index.js"; +import { MessageContent } from "../../llm/types.js"; +import { + extractText, + streamConverter, + streamReducer, +} from "../../llm/utils.js"; +import { BaseNodePostprocessor } from "../../postprocessors/index.js"; +import { PromptMixin } from "../../prompts/Mixin.js"; +import { DefaultContextGenerator } from "./DefaultContextGenerator.js"; import { ChatEngine, ChatEngineParamsNonStreaming, ChatEngineParamsStreaming, ContextGenerator, -} from "./types"; +} from "./types.js"; /** * ContextChatEngine uses the Index to get the appropriate context for each query. diff --git a/packages/core/src/engines/chat/DefaultContextGenerator.ts b/packages/core/src/engines/chat/DefaultContextGenerator.ts index 4b359ac0fea4de9a4c48e8284ecaab9fdbae0881..4c96c744c14ed7ec53a10b2cb1d427c6d601ccf1 100644 --- a/packages/core/src/engines/chat/DefaultContextGenerator.ts +++ b/packages/core/src/engines/chat/DefaultContextGenerator.ts @@ -1,11 +1,14 @@ -import { NodeWithScore, TextNode } from "../../Node"; -import { ContextSystemPrompt, defaultContextSystemPrompt } from "../../Prompt"; -import { BaseRetriever } from "../../Retriever"; -import { Event } from "../../callbacks/CallbackManager"; -import { randomUUID } from "../../env"; -import { BaseNodePostprocessor } from "../../postprocessors"; -import { PromptMixin } from "../../prompts"; -import { Context, ContextGenerator } from "./types"; +import { randomUUID } from "@llamaindex/env"; +import { NodeWithScore, TextNode } from "../../Node.js"; +import { + ContextSystemPrompt, + defaultContextSystemPrompt, +} from "../../Prompt.js"; +import { BaseRetriever } from "../../Retriever.js"; +import { Event } from "../../callbacks/CallbackManager.js"; +import { BaseNodePostprocessor } from "../../postprocessors/index.js"; +import { PromptMixin } from "../../prompts/index.js"; +import { Context, ContextGenerator } from "./types.js"; export class DefaultContextGenerator extends PromptMixin diff --git a/packages/core/src/engines/chat/SimpleChatEngine.ts b/packages/core/src/engines/chat/SimpleChatEngine.ts index 370e32cfe91d0ad851d431aebcc0e696c4ce1653..16617331b22027a682f65f15e76eaf7b8c0c2765 100644 --- a/packages/core/src/engines/chat/SimpleChatEngine.ts +++ b/packages/core/src/engines/chat/SimpleChatEngine.ts @@ -1,12 +1,12 @@ -import { ChatHistory, getHistory } from "../../ChatHistory"; -import { Response } from "../../Response"; -import { ChatResponseChunk, LLM, OpenAI } from "../../llm"; -import { streamConverter, streamReducer } from "../../llm/utils"; +import { ChatHistory, getHistory } from "../../ChatHistory.js"; +import { Response } from "../../Response.js"; +import { ChatResponseChunk, LLM, OpenAI } from "../../llm/index.js"; +import { streamConverter, streamReducer } from "../../llm/utils.js"; import { ChatEngine, ChatEngineParamsNonStreaming, ChatEngineParamsStreaming, -} from "./types"; +} from "./types.js"; /** * SimpleChatEngine is the simplest possible chat engine. Useful for using your own custom prompts. diff --git a/packages/core/src/engines/chat/index.ts b/packages/core/src/engines/chat/index.ts index 3049bfa5780b8da2e6981098037bb8a3ae655a2d..c66c20fbf7ddd46ac904a887dc186effc03eb790 100644 --- a/packages/core/src/engines/chat/index.ts +++ b/packages/core/src/engines/chat/index.ts @@ -1,4 +1,4 @@ -export { CondenseQuestionChatEngine } from "./CondenseQuestionChatEngine"; -export { ContextChatEngine } from "./ContextChatEngine"; -export { SimpleChatEngine } from "./SimpleChatEngine"; -export * from "./types"; +export { CondenseQuestionChatEngine } from "./CondenseQuestionChatEngine.js"; +export { ContextChatEngine } from "./ContextChatEngine.js"; +export { SimpleChatEngine } from "./SimpleChatEngine.js"; +export * from "./types.js"; diff --git a/packages/core/src/engines/chat/types.ts b/packages/core/src/engines/chat/types.ts index f11329110e411327526ad51f209f4b5217689f1a..80140fb45dd0df0ed61cd09f40aeea6df3a7b58c 100644 --- a/packages/core/src/engines/chat/types.ts +++ b/packages/core/src/engines/chat/types.ts @@ -1,10 +1,10 @@ -import { ChatHistory } from "../../ChatHistory"; -import { BaseNode, NodeWithScore } from "../../Node"; -import { Response } from "../../Response"; -import { Event } from "../../callbacks/CallbackManager"; -import { ChatMessage } from "../../llm"; -import { MessageContent } from "../../llm/types"; -import { ToolOutput } from "../../tools/types"; +import { ChatHistory } from "../../ChatHistory.js"; +import { BaseNode, NodeWithScore } from "../../Node.js"; +import { Response } from "../../Response.js"; +import { Event } from "../../callbacks/CallbackManager.js"; +import { ChatMessage } from "../../llm/index.js"; +import { MessageContent } from "../../llm/types.js"; +import { ToolOutput } from "../../tools/types.js"; /** * Represents the base parameters for ChatEngine. diff --git a/packages/core/src/engines/query/RetrieverQueryEngine.ts b/packages/core/src/engines/query/RetrieverQueryEngine.ts index 94c5b86c452c8f483d0cdd3d8d3583c3ac732da6..cc6fa25911bc8346cfe8ab76e31b2f068c0a5f89 100644 --- a/packages/core/src/engines/query/RetrieverQueryEngine.ts +++ b/packages/core/src/engines/query/RetrieverQueryEngine.ts @@ -1,17 +1,20 @@ -import { NodeWithScore } from "../../Node"; -import { Response } from "../../Response"; -import { BaseRetriever } from "../../Retriever"; -import { ServiceContext } from "../../ServiceContext"; -import { Event } from "../../callbacks/CallbackManager"; -import { randomUUID } from "../../env"; -import { BaseNodePostprocessor } from "../../postprocessors"; -import { PromptMixin } from "../../prompts"; -import { BaseSynthesizer, ResponseSynthesizer } from "../../synthesizers"; +import { randomUUID } from "@llamaindex/env"; +import { NodeWithScore } from "../../Node.js"; +import { Response } from "../../Response.js"; +import { BaseRetriever } from "../../Retriever.js"; +import { ServiceContext } from "../../ServiceContext.js"; +import { Event } from "../../callbacks/CallbackManager.js"; +import { BaseNodePostprocessor } from "../../postprocessors/index.js"; +import { PromptMixin } from "../../prompts/Mixin.js"; +import { + BaseSynthesizer, + ResponseSynthesizer, +} from "../../synthesizers/index.js"; import { BaseQueryEngine, QueryEngineParamsNonStreaming, QueryEngineParamsStreaming, -} from "../../types"; +} from "../../types.js"; /** * A query engine that uses a retriever to query an index and then synthesizes the response. diff --git a/packages/core/src/engines/query/RouterQueryEngine.ts b/packages/core/src/engines/query/RouterQueryEngine.ts index d48a23cf4cc0bbe7fe32a46334b5732c69f9bdf7..7fa54accdf1a7b7ed447a82281a95ba6daa20909 100644 --- a/packages/core/src/engines/query/RouterQueryEngine.ts +++ b/packages/core/src/engines/query/RouterQueryEngine.ts @@ -1,18 +1,18 @@ -import { BaseNode } from "../../Node"; -import { Response } from "../../Response"; +import { BaseNode } from "../../Node.js"; +import { Response } from "../../Response.js"; import { ServiceContext, serviceContextFromDefaults, -} from "../../ServiceContext"; -import { PromptMixin } from "../../prompts"; -import { BaseSelector, LLMSingleSelector } from "../../selectors"; -import { TreeSummarize } from "../../synthesizers"; +} from "../../ServiceContext.js"; +import { PromptMixin } from "../../prompts/index.js"; +import { BaseSelector, LLMSingleSelector } from "../../selectors/index.js"; +import { TreeSummarize } from "../../synthesizers/index.js"; import { BaseQueryEngine, QueryBundle, QueryEngineParamsNonStreaming, QueryEngineParamsStreaming, -} from "../../types"; +} from "../../types.js"; type RouterQueryEngineTool = { queryEngine: BaseQueryEngine; diff --git a/packages/core/src/engines/query/SubQuestionQueryEngine.ts b/packages/core/src/engines/query/SubQuestionQueryEngine.ts index 0139ecd0a255ad240b24f31b4c55bdf60c98be48..6e60a1dbf6159ca278d4f0bef1ff8351ab1df974 100644 --- a/packages/core/src/engines/query/SubQuestionQueryEngine.ts +++ b/packages/core/src/engines/query/SubQuestionQueryEngine.ts @@ -1,18 +1,18 @@ -import { NodeWithScore, TextNode } from "../../Node"; -import { LLMQuestionGenerator } from "../../QuestionGenerator"; -import { Response } from "../../Response"; +import { randomUUID } from "@llamaindex/env"; +import { NodeWithScore, TextNode } from "../../Node.js"; +import { LLMQuestionGenerator } from "../../QuestionGenerator.js"; +import { Response } from "../../Response.js"; import { ServiceContext, serviceContextFromDefaults, -} from "../../ServiceContext"; -import { Event } from "../../callbacks/CallbackManager"; -import { randomUUID } from "../../env"; -import { PromptMixin } from "../../prompts"; +} from "../../ServiceContext.js"; +import { Event } from "../../callbacks/CallbackManager.js"; +import { PromptMixin } from "../../prompts/Mixin.js"; import { BaseSynthesizer, CompactAndRefine, ResponseSynthesizer, -} from "../../synthesizers"; +} from "../../synthesizers/index.js"; import { BaseQueryEngine, @@ -20,9 +20,9 @@ import { QueryEngineParamsNonStreaming, QueryEngineParamsStreaming, ToolMetadata, -} from "../../types"; +} from "../../types.js"; -import { BaseQuestionGenerator, SubQuestion } from "./types"; +import { BaseQuestionGenerator, SubQuestion } from "./types.js"; /** * SubQuestionQueryEngine decomposes a question into subquestions and then diff --git a/packages/core/src/engines/query/index.ts b/packages/core/src/engines/query/index.ts index ef1cb9f8341ea1835ab92bc9bafa33b6f36416ab..f07a7c0e7c19af98760d403d661977031e605806 100644 --- a/packages/core/src/engines/query/index.ts +++ b/packages/core/src/engines/query/index.ts @@ -1,3 +1,3 @@ -export * from "./RetrieverQueryEngine"; -export * from "./RouterQueryEngine"; -export * from "./SubQuestionQueryEngine"; +export * from "./RetrieverQueryEngine.js"; +export * from "./RouterQueryEngine.js"; +export * from "./SubQuestionQueryEngine.js"; diff --git a/packages/core/src/engines/query/types.ts b/packages/core/src/engines/query/types.ts index 4fd9c63dd838bebfe3a764cc9f16389893510485..0db0e32592e04c0f2d3c0b57307dd57af18855a7 100644 --- a/packages/core/src/engines/query/types.ts +++ b/packages/core/src/engines/query/types.ts @@ -1,4 +1,4 @@ -import { ToolMetadata } from "../../types"; +import { ToolMetadata } from "../../types.js"; /** * QuestionGenerators generate new questions for the LLM using tools and a user query. diff --git a/packages/core/src/extractors/MetadataExtractors.ts b/packages/core/src/extractors/MetadataExtractors.ts index f41e3f8605bc16d416b47c0b9ae7162cc8d472be..b3db824dcab26e1ed0fa7f43fbfd7d1f585b3e31 100644 --- a/packages/core/src/extractors/MetadataExtractors.ts +++ b/packages/core/src/extractors/MetadataExtractors.ts @@ -1,13 +1,13 @@ -import { BaseNode, MetadataMode, TextNode } from "../Node"; -import { LLM, OpenAI } from "../llm"; +import { BaseNode, MetadataMode, TextNode } from "../Node.js"; +import { LLM, OpenAI } from "../llm/index.js"; import { defaultKeywordExtractorPromptTemplate, defaultQuestionAnswerPromptTemplate, defaultSummaryExtractorPromptTemplate, defaultTitleCombinePromptTemplate, defaultTitleExtractorPromptTemplate, -} from "./prompts"; -import { BaseExtractor } from "./types"; +} from "./prompts.js"; +import { BaseExtractor } from "./types.js"; const STRIP_REGEX = /(\r\n|\n|\r)/gm; diff --git a/packages/core/src/extractors/index.ts b/packages/core/src/extractors/index.ts index b54a52845b987dd5f542ceeef2ab41de967a63f8..18f6c25efeb84fd47099fe33c481382ed963c0f3 100644 --- a/packages/core/src/extractors/index.ts +++ b/packages/core/src/extractors/index.ts @@ -3,5 +3,5 @@ export { QuestionsAnsweredExtractor, SummaryExtractor, TitleExtractor, -} from "./MetadataExtractors"; -export { BaseExtractor } from "./types"; +} from "./MetadataExtractors.js"; +export { BaseExtractor } from "./types.js"; diff --git a/packages/core/src/extractors/types.ts b/packages/core/src/extractors/types.ts index adac96be438c411151c731c040c8add367bb4b0a..58f3da987561e2e51fd92177d5f72c16b735e9bf 100644 --- a/packages/core/src/extractors/types.ts +++ b/packages/core/src/extractors/types.ts @@ -1,6 +1,6 @@ -import { BaseNode, MetadataMode, TextNode } from "../Node"; -import { TransformComponent } from "../ingestion"; -import { defaultNodeTextTemplate } from "./prompts"; +import { BaseNode, MetadataMode, TextNode } from "../Node.js"; +import { TransformComponent } from "../ingestion/types.js"; +import { defaultNodeTextTemplate } from "./prompts.js"; /* * Abstract class for all extractors. diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 87b465845a87f14720c4499eedbc1e40c4e2e9bf..5cdaacea490a71e3947dec5b6b5f4ef254ff4160 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,31 +1,31 @@ -export * from "./ChatHistory"; -export * from "./GlobalsHelper"; -export * from "./Node"; -export * from "./OutputParser"; -export * from "./Prompt"; -export * from "./PromptHelper"; -export * from "./QuestionGenerator"; -export * from "./Response"; -export * from "./Retriever"; -export * from "./ServiceContext"; -export * from "./TextSplitter"; -export * from "./agent"; -export * from "./callbacks/CallbackManager"; -export * from "./cloud"; -export * from "./constants"; -export * from "./embeddings"; -export * from "./engines/chat"; -export * from "./engines/query"; -export * from "./extractors"; -export * from "./indices"; -export * from "./ingestion"; -export * from "./llm"; -export * from "./nodeParsers"; -export * from "./objects"; -export * from "./postprocessors"; -export * from "./prompts"; -export * from "./readers"; -export * from "./selectors"; -export * from "./storage"; -export * from "./synthesizers"; -export * from "./tools"; +export * from "./ChatHistory.js"; +export * from "./GlobalsHelper.js"; +export * from "./Node.js"; +export * from "./OutputParser.js"; +export * from "./Prompt.js"; +export * from "./PromptHelper.js"; +export * from "./QuestionGenerator.js"; +export * from "./Response.js"; +export * from "./Retriever.js"; +export * from "./ServiceContext.js"; +export * from "./TextSplitter.js"; +export * from "./agent/index.js"; +export * from "./callbacks/CallbackManager.js"; +export * from "./cloud/index.js"; +export * from "./constants.js"; +export * from "./embeddings/index.js"; +export * from "./engines/chat/index.js"; +export * from "./engines/query/index.js"; +export * from "./extractors/index.js"; +export * from "./indices/index.js"; +export * from "./ingestion/index.js"; +export * from "./llm/index.js"; +export * from "./nodeParsers/index.js"; +export * from "./objects/index.js"; +export * from "./postprocessors/index.js"; +export * from "./prompts/index.js"; +export * from "./readers/index.js"; +export * from "./selectors/index.js"; +export * from "./storage/index.js"; +export * from "./synthesizers/index.js"; +export * from "./tools/index.js"; diff --git a/packages/core/src/indices/BaseIndex.ts b/packages/core/src/indices/BaseIndex.ts index db04a12853d4c12aa910d68f601dfe71726c4e8f..cf0083e0628c6cf850b78de9049664c2b909d7d3 100644 --- a/packages/core/src/indices/BaseIndex.ts +++ b/packages/core/src/indices/BaseIndex.ts @@ -1,112 +1,15 @@ -import { BaseNode, Document, jsonToNode } from "../Node"; -import { BaseRetriever } from "../Retriever"; -import { ServiceContext } from "../ServiceContext"; -import { randomUUID } from "../env"; -import { runTransformations } from "../ingestion"; -import { StorageContext } from "../storage/StorageContext"; -import { BaseDocumentStore } from "../storage/docStore/types"; -import { BaseIndexStore } from "../storage/indexStore/types"; -import { VectorStore } from "../storage/vectorStore/types"; -import { BaseSynthesizer } from "../synthesizers"; -import { BaseQueryEngine } from "../types"; - -/** - * The underlying structure of each index. - */ -export abstract class IndexStruct { - indexId: string; - summary?: string; - - constructor(indexId = randomUUID(), summary = undefined) { - this.indexId = indexId; - this.summary = summary; - } - - toJson(): Record<string, unknown> { - return { - indexId: this.indexId, - summary: this.summary, - }; - } - - getSummary(): string { - if (this.summary === undefined) { - throw new Error("summary field of the index dict is not set"); - } - return this.summary; - } -} - -export enum IndexStructType { - SIMPLE_DICT = "simple_dict", - LIST = "list", - KEYWORD_TABLE = "keyword_table", -} - -export class IndexDict extends IndexStruct { - nodesDict: Record<string, BaseNode> = {}; - type: IndexStructType = IndexStructType.SIMPLE_DICT; - - getSummary(): string { - if (this.summary === undefined) { - throw new Error("summary field of the index dict is not set"); - } - return this.summary; - } - - addNode(node: BaseNode, textId?: string) { - const vectorId = textId ?? node.id_; - this.nodesDict[vectorId] = node; - } - - toJson(): Record<string, unknown> { - return { - ...super.toJson(), - nodesDict: this.nodesDict, - type: this.type, - }; - } - - delete(nodeId: string) { - delete this.nodesDict[nodeId]; - } -} - -export function jsonToIndexStruct(json: any): IndexStruct { - if (json.type === IndexStructType.LIST) { - const indexList = new IndexList(json.indexId, json.summary); - indexList.nodes = json.nodes; - return indexList; - } else if (json.type === IndexStructType.SIMPLE_DICT) { - const indexDict = new IndexDict(json.indexId, json.summary); - indexDict.nodesDict = Object.entries(json.nodesDict).reduce< - Record<string, BaseNode> - >((acc, [key, value]) => { - acc[key] = jsonToNode(value); - return acc; - }, {}); - return indexDict; - } else { - throw new Error(`Unknown index struct type: ${json.type}`); - } -} - -export class IndexList extends IndexStruct { - nodes: string[] = []; - type: IndexStructType = IndexStructType.LIST; - - addNode(node: BaseNode) { - this.nodes.push(node.id_); - } - - toJson(): Record<string, unknown> { - return { - ...super.toJson(), - nodes: this.nodes, - type: this.type, - }; - } -} +import { BaseNode, Document } from "../Node.js"; +import { BaseRetriever } from "../Retriever.js"; +import { ServiceContext } from "../ServiceContext.js"; +import { runTransformations } from "../ingestion/IngestionPipeline.js"; +import { StorageContext } from "../storage/StorageContext.js"; +import { BaseDocumentStore } from "../storage/docStore/types.js"; +import { BaseIndexStore } from "../storage/indexStore/types.js"; +import { VectorStore } from "../storage/vectorStore/types.js"; +import { BaseSynthesizer } from "../synthesizers/types.js"; +import { BaseQueryEngine } from "../types.js"; +import { IndexStruct } from "./IndexStruct.js"; +import { IndexStructType } from "./json-to-index-struct.js"; // A table of keywords mapping keywords to text chunks. export class KeywordTable extends IndexStruct { diff --git a/packages/core/src/indices/IndexStruct.ts b/packages/core/src/indices/IndexStruct.ts new file mode 100644 index 0000000000000000000000000000000000000000..462fa92150c237862fb440b214b8a029e3a4770d --- /dev/null +++ b/packages/core/src/indices/IndexStruct.ts @@ -0,0 +1,28 @@ +import { randomUUID } from "@llamaindex/env"; + +/** + * The underlying structure of each index. + */ +export abstract class IndexStruct { + indexId: string; + summary?: string; + + constructor(indexId = randomUUID(), summary = undefined) { + this.indexId = indexId; + this.summary = summary; + } + + toJson(): Record<string, unknown> { + return { + indexId: this.indexId, + summary: this.summary, + }; + } + + getSummary(): string { + if (this.summary === undefined) { + throw new Error("summary field of the index dict is not set"); + } + return this.summary; + } +} diff --git a/packages/core/src/indices/index.ts b/packages/core/src/indices/index.ts index 8bda05b2d954cefd6a58893edc0efb095971a102..9fce474e42c7d132cb9634d4559fd71f6735914e 100644 --- a/packages/core/src/indices/index.ts +++ b/packages/core/src/indices/index.ts @@ -1,4 +1,4 @@ -export * from "./BaseIndex"; -export * from "./keyword"; -export * from "./summary"; -export * from "./vectorStore"; +export * from "./BaseIndex.js"; +export * from "./keyword/index.js"; +export * from "./summary/index.js"; +export * from "./vectorStore/index.js"; diff --git a/packages/core/src/indices/json-to-index-struct.ts b/packages/core/src/indices/json-to-index-struct.ts new file mode 100644 index 0000000000000000000000000000000000000000..ebe72174e22ee41481978a325f1c1ce909e5a4eb --- /dev/null +++ b/packages/core/src/indices/json-to-index-struct.ts @@ -0,0 +1,71 @@ +import { BaseNode, jsonToNode } from "../Node.js"; +import { IndexStruct } from "./IndexStruct.js"; + +export enum IndexStructType { + SIMPLE_DICT = "simple_dict", + LIST = "list", + KEYWORD_TABLE = "keyword_table", +} +export class IndexDict extends IndexStruct { + nodesDict: Record<string, BaseNode> = {}; + type: IndexStructType = IndexStructType.SIMPLE_DICT; + + getSummary(): string { + if (this.summary === undefined) { + throw new Error("summary field of the index dict is not set"); + } + return this.summary; + } + + addNode(node: BaseNode, textId?: string) { + const vectorId = textId ?? node.id_; + this.nodesDict[vectorId] = node; + } + + toJson(): Record<string, unknown> { + return { + ...super.toJson(), + nodesDict: this.nodesDict, + type: this.type, + }; + } + + delete(nodeId: string) { + delete this.nodesDict[nodeId]; + } +} +export function jsonToIndexStruct(json: any): IndexStruct { + if (json.type === IndexStructType.LIST) { + const indexList = new IndexList(json.indexId, json.summary); + indexList.nodes = json.nodes; + return indexList; + } else if (json.type === IndexStructType.SIMPLE_DICT) { + const indexDict = new IndexDict(json.indexId, json.summary); + indexDict.nodesDict = Object.entries(json.nodesDict).reduce< + Record<string, BaseNode> + >((acc, [key, value]) => { + acc[key] = jsonToNode(value); + return acc; + }, {}); + return indexDict; + } else { + throw new Error(`Unknown index struct type: ${json.type}`); + } +} + +export class IndexList extends IndexStruct { + nodes: string[] = []; + type: IndexStructType = IndexStructType.LIST; + + addNode(node: BaseNode) { + this.nodes.push(node.id_); + } + + toJson(): Record<string, unknown> { + return { + ...super.toJson(), + nodes: this.nodes, + type: this.type, + }; + } +} diff --git a/packages/core/src/indices/keyword/KeywordTableIndex.ts b/packages/core/src/indices/keyword/KeywordTableIndex.ts deleted file mode 100644 index 474805d7baee5f82e4df635874e6be87473b565a..0000000000000000000000000000000000000000 --- a/packages/core/src/indices/keyword/KeywordTableIndex.ts +++ /dev/null @@ -1,278 +0,0 @@ -import { BaseNode, Document, MetadataMode } from "../../Node"; -import { defaultKeywordExtractPrompt } from "../../Prompt"; -import { BaseRetriever } from "../../Retriever"; -import { - ServiceContext, - serviceContextFromDefaults, -} from "../../ServiceContext"; -import { RetrieverQueryEngine } from "../../engines/query"; -import { BaseNodePostprocessor } from "../../postprocessors"; -import { - BaseDocumentStore, - StorageContext, - storageContextFromDefaults, -} from "../../storage"; -import { BaseSynthesizer } from "../../synthesizers"; -import { BaseQueryEngine } from "../../types"; -import { - BaseIndex, - BaseIndexInit, - IndexStructType, - KeywordTable, -} from "../BaseIndex"; -import { - KeywordTableLLMRetriever, - KeywordTableRAKERetriever, - KeywordTableSimpleRetriever, -} from "./KeywordTableIndexRetriever"; -import { extractKeywordsGivenResponse } from "./utils"; - -export interface KeywordIndexOptions { - nodes?: BaseNode[]; - indexStruct?: KeywordTable; - indexId?: string; - serviceContext?: ServiceContext; - storageContext?: StorageContext; -} -export enum KeywordTableRetrieverMode { - DEFAULT = "DEFAULT", - SIMPLE = "SIMPLE", - RAKE = "RAKE", -} - -const KeywordTableRetrieverMap = { - [KeywordTableRetrieverMode.DEFAULT]: KeywordTableLLMRetriever, - [KeywordTableRetrieverMode.SIMPLE]: KeywordTableSimpleRetriever, - [KeywordTableRetrieverMode.RAKE]: KeywordTableRAKERetriever, -}; - -/** - * The KeywordTableIndex, an index that extracts keywords from each Node and builds a mapping from each keyword to the corresponding Nodes of that keyword. - */ -export class KeywordTableIndex extends BaseIndex<KeywordTable> { - constructor(init: BaseIndexInit<KeywordTable>) { - super(init); - } - - static async init(options: KeywordIndexOptions): Promise<KeywordTableIndex> { - const storageContext = - options.storageContext ?? (await storageContextFromDefaults({})); - const serviceContext = - options.serviceContext ?? serviceContextFromDefaults({}); - const { docStore, indexStore } = storageContext; - - // Setup IndexStruct from storage - const indexStructs = (await indexStore.getIndexStructs()) as KeywordTable[]; - let indexStruct: KeywordTable | null; - - if (options.indexStruct && indexStructs.length > 0) { - throw new Error( - "Cannot initialize index with both indexStruct and indexStore", - ); - } - - if (options.indexStruct) { - indexStruct = options.indexStruct; - } else if (indexStructs.length == 1) { - indexStruct = indexStructs[0]; - } else if (indexStructs.length > 1 && options.indexId) { - indexStruct = (await indexStore.getIndexStruct( - options.indexId, - )) as KeywordTable; - } else { - indexStruct = null; - } - - // check indexStruct type - if (indexStruct && indexStruct.type !== IndexStructType.KEYWORD_TABLE) { - throw new Error( - "Attempting to initialize KeywordTableIndex with non-keyword table indexStruct", - ); - } - - if (indexStruct) { - if (options.nodes) { - throw new Error( - "Cannot initialize KeywordTableIndex with both nodes and indexStruct", - ); - } - } else { - if (!options.nodes) { - throw new Error( - "Cannot initialize KeywordTableIndex without nodes or indexStruct", - ); - } - indexStruct = await KeywordTableIndex.buildIndexFromNodes( - options.nodes, - storageContext.docStore, - serviceContext, - ); - - await indexStore.addIndexStruct(indexStruct); - } - - return new KeywordTableIndex({ - storageContext, - serviceContext, - docStore, - indexStore, - indexStruct, - }); - } - - asRetriever(options?: any): BaseRetriever { - const { mode = KeywordTableRetrieverMode.DEFAULT, ...otherOptions } = - options ?? {}; - const KeywordTableRetriever = - KeywordTableRetrieverMap[mode as KeywordTableRetrieverMode]; - if (KeywordTableRetriever) { - return new KeywordTableRetriever({ index: this, ...otherOptions }); - } - throw new Error(`Unknown retriever mode: ${mode}`); - } - - asQueryEngine(options?: { - retriever?: BaseRetriever; - responseSynthesizer?: BaseSynthesizer; - preFilters?: unknown; - nodePostprocessors?: BaseNodePostprocessor[]; - }): BaseQueryEngine { - const { retriever, responseSynthesizer } = options ?? {}; - return new RetrieverQueryEngine( - retriever ?? this.asRetriever(), - responseSynthesizer, - options?.preFilters, - options?.nodePostprocessors, - ); - } - - static async extractKeywords( - text: string, - serviceContext: ServiceContext, - ): Promise<Set<string>> { - const response = await serviceContext.llm.complete({ - prompt: defaultKeywordExtractPrompt({ - context: text, - }), - }); - return extractKeywordsGivenResponse(response.text, "KEYWORDS:"); - } - - /** - * High level API: split documents, get keywords, and build index. - * @param documents - * @param storageContext - * @param serviceContext - * @returns - */ - static async fromDocuments( - documents: Document[], - args: { - storageContext?: StorageContext; - serviceContext?: ServiceContext; - } = {}, - ): Promise<KeywordTableIndex> { - let { storageContext, serviceContext } = args; - storageContext = storageContext ?? (await storageContextFromDefaults({})); - serviceContext = serviceContext ?? serviceContextFromDefaults({}); - const docStore = storageContext.docStore; - - docStore.addDocuments(documents, true); - for (const doc of documents) { - docStore.setDocumentHash(doc.id_, doc.hash); - } - - const nodes = serviceContext.nodeParser.getNodesFromDocuments(documents); - const index = await KeywordTableIndex.init({ - nodes, - storageContext, - serviceContext, - }); - return index; - } - - /** - * Get keywords for nodes and place them into the index. - * @param nodes - * @param serviceContext - * @param vectorStore - * @returns - */ - static async buildIndexFromNodes( - nodes: BaseNode[], - docStore: BaseDocumentStore, - serviceContext: ServiceContext, - ): Promise<KeywordTable> { - const indexStruct = new KeywordTable(); - await docStore.addDocuments(nodes, true); - for (const node of nodes) { - const keywords = await KeywordTableIndex.extractKeywords( - node.getContent(MetadataMode.LLM), - serviceContext, - ); - indexStruct.addNode([...keywords], node.id_); - } - return indexStruct; - } - - async insertNodes(nodes: BaseNode[]) { - for (const node of nodes) { - const keywords = await KeywordTableIndex.extractKeywords( - node.getContent(MetadataMode.LLM), - this.serviceContext, - ); - this.indexStruct.addNode([...keywords], node.id_); - } - } - - deleteNode(nodeId: string): void { - const keywordsToDelete: Set<string> = new Set(); - for (const [keyword, existingNodeIds] of Object.entries( - this.indexStruct.table, - )) { - const index = existingNodeIds.indexOf(nodeId); - if (index !== -1) { - existingNodeIds.splice(index, 1); - - // Delete keywords that have zero nodes - if (existingNodeIds.length === 0) { - keywordsToDelete.add(keyword); - } - } - } - this.indexStruct.deleteNode([...keywordsToDelete], nodeId); - } - - async deleteNodes(nodeIds: string[], deleteFromDocStore: boolean) { - nodeIds.forEach((nodeId) => { - this.deleteNode(nodeId); - }); - - if (deleteFromDocStore) { - for (const nodeId of nodeIds) { - await this.docStore.deleteDocument(nodeId, false); - } - } - - await this.storageContext.indexStore.addIndexStruct(this.indexStruct); - } - - async deleteRefDoc( - refDocId: string, - deleteFromDocStore?: boolean, - ): Promise<void> { - const refDocInfo = await this.docStore.getRefDocInfo(refDocId); - - if (!refDocInfo) { - return; - } - - await this.deleteNodes(refDocInfo.nodeIds, false); - - if (deleteFromDocStore) { - await this.docStore.deleteRefDoc(refDocId, false); - } - - return; - } -} diff --git a/packages/core/src/indices/keyword/KeywordTableIndexRetriever.ts b/packages/core/src/indices/keyword/KeywordTableIndexRetriever.ts deleted file mode 100644 index b1a27f69916c3e7629459a5d82ac63863c4ea920..0000000000000000000000000000000000000000 --- a/packages/core/src/indices/keyword/KeywordTableIndexRetriever.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { NodeWithScore } from "../../Node"; -import { - defaultKeywordExtractPrompt, - defaultQueryKeywordExtractPrompt, - KeywordExtractPrompt, - QueryKeywordExtractPrompt, -} from "../../Prompt"; -import { BaseRetriever } from "../../Retriever"; -import { ServiceContext } from "../../ServiceContext"; -import { BaseDocumentStore } from "../../storage/docStore/types"; -import { KeywordTable } from "../BaseIndex"; -import { KeywordTableIndex } from "./KeywordTableIndex"; -import { - extractKeywordsGivenResponse, - rakeExtractKeywords, - simpleExtractKeywords, -} from "./utils"; - -// Base Keyword Table Retriever -abstract class BaseKeywordTableRetriever implements BaseRetriever { - protected index: KeywordTableIndex; - protected indexStruct: KeywordTable; - protected docstore: BaseDocumentStore; - protected serviceContext: ServiceContext; - - protected maxKeywordsPerQuery: number; // Maximum number of keywords to extract from query. - protected numChunksPerQuery: number; // Maximum number of text chunks to query. - protected keywordExtractTemplate: KeywordExtractPrompt; // A Keyword Extraction Prompt - protected queryKeywordExtractTemplate: QueryKeywordExtractPrompt; // A Query Keyword Extraction Prompt - - constructor({ - index, - keywordExtractTemplate, - queryKeywordExtractTemplate, - maxKeywordsPerQuery = 10, - numChunksPerQuery = 10, - }: { - index: KeywordTableIndex; - keywordExtractTemplate?: KeywordExtractPrompt; - queryKeywordExtractTemplate?: QueryKeywordExtractPrompt; - maxKeywordsPerQuery: number; - numChunksPerQuery: number; - }) { - this.index = index; - this.indexStruct = index.indexStruct; - this.docstore = index.docStore; - this.serviceContext = index.serviceContext; - - this.maxKeywordsPerQuery = maxKeywordsPerQuery; - this.numChunksPerQuery = numChunksPerQuery; - this.keywordExtractTemplate = - keywordExtractTemplate || defaultKeywordExtractPrompt; - this.queryKeywordExtractTemplate = - queryKeywordExtractTemplate || defaultQueryKeywordExtractPrompt; - } - - abstract getKeywords(query: string): Promise<string[]>; - - async retrieve(query: string): Promise<NodeWithScore[]> { - const keywords = await this.getKeywords(query); - const chunkIndicesCount: { [key: string]: number } = {}; - const filteredKeywords = keywords.filter((keyword) => - this.indexStruct.table.has(keyword), - ); - - for (const keyword of filteredKeywords) { - for (const nodeId of this.indexStruct.table.get(keyword) || []) { - chunkIndicesCount[nodeId] = (chunkIndicesCount[nodeId] ?? 0) + 1; - } - } - - const sortedChunkIndices = Object.keys(chunkIndicesCount) - .sort((a, b) => chunkIndicesCount[b] - chunkIndicesCount[a]) - .slice(0, this.numChunksPerQuery); - - const sortedNodes = await this.docstore.getNodes(sortedChunkIndices); - - return sortedNodes.map((node) => ({ node })); - } - - getServiceContext(): ServiceContext { - return this.index.serviceContext; - } -} - -// Extracts keywords using LLMs. -export class KeywordTableLLMRetriever extends BaseKeywordTableRetriever { - async getKeywords(query: string): Promise<string[]> { - const response = await this.serviceContext.llm.complete({ - prompt: this.queryKeywordExtractTemplate({ - question: query, - maxKeywords: this.maxKeywordsPerQuery, - }), - }); - const keywords = extractKeywordsGivenResponse(response.text, "KEYWORDS:"); - return [...keywords]; - } -} - -// Extracts keywords using simple regex-based keyword extractor. -export class KeywordTableSimpleRetriever extends BaseKeywordTableRetriever { - getKeywords(query: string): Promise<string[]> { - return Promise.resolve([ - ...simpleExtractKeywords(query, this.maxKeywordsPerQuery), - ]); - } -} - -// Extracts keywords using RAKE keyword extractor -export class KeywordTableRAKERetriever extends BaseKeywordTableRetriever { - getKeywords(query: string): Promise<string[]> { - return Promise.resolve([ - ...rakeExtractKeywords(query, this.maxKeywordsPerQuery), - ]); - } -} diff --git a/packages/core/src/indices/keyword/index.ts b/packages/core/src/indices/keyword/index.ts index ee7699d085ac0ae0d88e2c2f7ad4655f9c9b2200..3fee6040abb5deaa4e7348a04ed7f06206f24bcc 100644 --- a/packages/core/src/indices/keyword/index.ts +++ b/packages/core/src/indices/keyword/index.ts @@ -1,9 +1,377 @@ -export { - KeywordTableIndex, - KeywordTableRetrieverMode, -} from "./KeywordTableIndex"; -export { - KeywordTableLLMRetriever, - KeywordTableRAKERetriever, - KeywordTableSimpleRetriever, -} from "./KeywordTableIndexRetriever"; +import { BaseNode, Document, MetadataMode, NodeWithScore } from "../../Node.js"; +import { + KeywordExtractPrompt, + QueryKeywordExtractPrompt, + defaultKeywordExtractPrompt, + defaultQueryKeywordExtractPrompt, +} from "../../Prompt.js"; +import { BaseRetriever } from "../../Retriever.js"; +import { + ServiceContext, + serviceContextFromDefaults, +} from "../../ServiceContext.js"; +import { RetrieverQueryEngine } from "../../engines/query/index.js"; +import { BaseNodePostprocessor } from "../../postprocessors/index.js"; +import { + BaseDocumentStore, + StorageContext, + storageContextFromDefaults, +} from "../../storage/index.js"; +import { BaseSynthesizer } from "../../synthesizers/index.js"; +import { BaseQueryEngine } from "../../types.js"; +import { BaseIndex, BaseIndexInit, KeywordTable } from "../BaseIndex.js"; +import { IndexStructType } from "../json-to-index-struct.js"; +import { + extractKeywordsGivenResponse, + rakeExtractKeywords, + simpleExtractKeywords, +} from "./utils.js"; + +export interface KeywordIndexOptions { + nodes?: BaseNode[]; + indexStruct?: KeywordTable; + indexId?: string; + serviceContext?: ServiceContext; + storageContext?: StorageContext; +} +export enum KeywordTableRetrieverMode { + DEFAULT = "DEFAULT", + SIMPLE = "SIMPLE", + RAKE = "RAKE", +} + +// Base Keyword Table Retriever +abstract class BaseKeywordTableRetriever implements BaseRetriever { + protected index: KeywordTableIndex; + protected indexStruct: KeywordTable; + protected docstore: BaseDocumentStore; + protected serviceContext: ServiceContext; + + protected maxKeywordsPerQuery: number; // Maximum number of keywords to extract from query. + protected numChunksPerQuery: number; // Maximum number of text chunks to query. + protected keywordExtractTemplate: KeywordExtractPrompt; // A Keyword Extraction Prompt + protected queryKeywordExtractTemplate: QueryKeywordExtractPrompt; // A Query Keyword Extraction Prompt + + constructor({ + index, + keywordExtractTemplate, + queryKeywordExtractTemplate, + maxKeywordsPerQuery = 10, + numChunksPerQuery = 10, + }: { + index: KeywordTableIndex; + keywordExtractTemplate?: KeywordExtractPrompt; + queryKeywordExtractTemplate?: QueryKeywordExtractPrompt; + maxKeywordsPerQuery: number; + numChunksPerQuery: number; + }) { + this.index = index; + this.indexStruct = index.indexStruct; + this.docstore = index.docStore; + this.serviceContext = index.serviceContext; + + this.maxKeywordsPerQuery = maxKeywordsPerQuery; + this.numChunksPerQuery = numChunksPerQuery; + this.keywordExtractTemplate = + keywordExtractTemplate || defaultKeywordExtractPrompt; + this.queryKeywordExtractTemplate = + queryKeywordExtractTemplate || defaultQueryKeywordExtractPrompt; + } + + abstract getKeywords(query: string): Promise<string[]>; + + async retrieve(query: string): Promise<NodeWithScore[]> { + const keywords = await this.getKeywords(query); + const chunkIndicesCount: { [key: string]: number } = {}; + const filteredKeywords = keywords.filter((keyword) => + this.indexStruct.table.has(keyword), + ); + + for (const keyword of filteredKeywords) { + for (const nodeId of this.indexStruct.table.get(keyword) || []) { + chunkIndicesCount[nodeId] = (chunkIndicesCount[nodeId] ?? 0) + 1; + } + } + + const sortedChunkIndices = Object.keys(chunkIndicesCount) + .sort((a, b) => chunkIndicesCount[b] - chunkIndicesCount[a]) + .slice(0, this.numChunksPerQuery); + + const sortedNodes = await this.docstore.getNodes(sortedChunkIndices); + + return sortedNodes.map((node) => ({ node })); + } + + getServiceContext(): ServiceContext { + return this.index.serviceContext; + } +} + +// Extracts keywords using LLMs. +export class KeywordTableLLMRetriever extends BaseKeywordTableRetriever { + async getKeywords(query: string): Promise<string[]> { + const response = await this.serviceContext.llm.complete({ + prompt: this.queryKeywordExtractTemplate({ + question: query, + maxKeywords: this.maxKeywordsPerQuery, + }), + }); + const keywords = extractKeywordsGivenResponse(response.text, "KEYWORDS:"); + return [...keywords]; + } +} + +// Extracts keywords using simple regex-based keyword extractor. +export class KeywordTableSimpleRetriever extends BaseKeywordTableRetriever { + getKeywords(query: string): Promise<string[]> { + return Promise.resolve([ + ...simpleExtractKeywords(query, this.maxKeywordsPerQuery), + ]); + } +} + +// Extracts keywords using RAKE keyword extractor +export class KeywordTableRAKERetriever extends BaseKeywordTableRetriever { + getKeywords(query: string): Promise<string[]> { + return Promise.resolve([ + ...rakeExtractKeywords(query, this.maxKeywordsPerQuery), + ]); + } +} + +const KeywordTableRetrieverMap = { + [KeywordTableRetrieverMode.DEFAULT]: KeywordTableLLMRetriever, + [KeywordTableRetrieverMode.SIMPLE]: KeywordTableSimpleRetriever, + [KeywordTableRetrieverMode.RAKE]: KeywordTableRAKERetriever, +}; + +/** + * The KeywordTableIndex, an index that extracts keywords from each Node and builds a mapping from each keyword to the corresponding Nodes of that keyword. + */ +export class KeywordTableIndex extends BaseIndex<KeywordTable> { + constructor(init: BaseIndexInit<KeywordTable>) { + super(init); + } + + static async init(options: KeywordIndexOptions): Promise<KeywordTableIndex> { + const storageContext = + options.storageContext ?? (await storageContextFromDefaults({})); + const serviceContext = + options.serviceContext ?? serviceContextFromDefaults({}); + const { docStore, indexStore } = storageContext; + + // Setup IndexStruct from storage + const indexStructs = (await indexStore.getIndexStructs()) as KeywordTable[]; + let indexStruct: KeywordTable | null; + + if (options.indexStruct && indexStructs.length > 0) { + throw new Error( + "Cannot initialize index with both indexStruct and indexStore", + ); + } + + if (options.indexStruct) { + indexStruct = options.indexStruct; + } else if (indexStructs.length == 1) { + indexStruct = indexStructs[0]; + } else if (indexStructs.length > 1 && options.indexId) { + indexStruct = (await indexStore.getIndexStruct( + options.indexId, + )) as KeywordTable; + } else { + indexStruct = null; + } + + // check indexStruct type + if (indexStruct && indexStruct.type !== IndexStructType.KEYWORD_TABLE) { + throw new Error( + "Attempting to initialize KeywordTableIndex with non-keyword table indexStruct", + ); + } + + if (indexStruct) { + if (options.nodes) { + throw new Error( + "Cannot initialize KeywordTableIndex with both nodes and indexStruct", + ); + } + } else { + if (!options.nodes) { + throw new Error( + "Cannot initialize KeywordTableIndex without nodes or indexStruct", + ); + } + indexStruct = await KeywordTableIndex.buildIndexFromNodes( + options.nodes, + storageContext.docStore, + serviceContext, + ); + + await indexStore.addIndexStruct(indexStruct); + } + + return new KeywordTableIndex({ + storageContext, + serviceContext, + docStore, + indexStore, + indexStruct, + }); + } + + asRetriever(options?: any): BaseRetriever { + const { mode = KeywordTableRetrieverMode.DEFAULT, ...otherOptions } = + options ?? {}; + const KeywordTableRetriever = + KeywordTableRetrieverMap[mode as KeywordTableRetrieverMode]; + if (KeywordTableRetriever) { + return new KeywordTableRetriever({ index: this, ...otherOptions }); + } + throw new Error(`Unknown retriever mode: ${mode}`); + } + + asQueryEngine(options?: { + retriever?: BaseRetriever; + responseSynthesizer?: BaseSynthesizer; + preFilters?: unknown; + nodePostprocessors?: BaseNodePostprocessor[]; + }): BaseQueryEngine { + const { retriever, responseSynthesizer } = options ?? {}; + return new RetrieverQueryEngine( + retriever ?? this.asRetriever(), + responseSynthesizer, + options?.preFilters, + options?.nodePostprocessors, + ); + } + + static async extractKeywords( + text: string, + serviceContext: ServiceContext, + ): Promise<Set<string>> { + const response = await serviceContext.llm.complete({ + prompt: defaultKeywordExtractPrompt({ + context: text, + }), + }); + return extractKeywordsGivenResponse(response.text, "KEYWORDS:"); + } + + /** + * High level API: split documents, get keywords, and build index. + * @param documents + * @param storageContext + * @param serviceContext + * @returns + */ + static async fromDocuments( + documents: Document[], + args: { + storageContext?: StorageContext; + serviceContext?: ServiceContext; + } = {}, + ): Promise<KeywordTableIndex> { + let { storageContext, serviceContext } = args; + storageContext = storageContext ?? (await storageContextFromDefaults({})); + serviceContext = serviceContext ?? serviceContextFromDefaults({}); + const docStore = storageContext.docStore; + + docStore.addDocuments(documents, true); + for (const doc of documents) { + docStore.setDocumentHash(doc.id_, doc.hash); + } + + const nodes = serviceContext.nodeParser.getNodesFromDocuments(documents); + const index = await KeywordTableIndex.init({ + nodes, + storageContext, + serviceContext, + }); + return index; + } + + /** + * Get keywords for nodes and place them into the index. + * @param nodes + * @param serviceContext + * @param vectorStore + * @returns + */ + static async buildIndexFromNodes( + nodes: BaseNode[], + docStore: BaseDocumentStore, + serviceContext: ServiceContext, + ): Promise<KeywordTable> { + const indexStruct = new KeywordTable(); + await docStore.addDocuments(nodes, true); + for (const node of nodes) { + const keywords = await KeywordTableIndex.extractKeywords( + node.getContent(MetadataMode.LLM), + serviceContext, + ); + indexStruct.addNode([...keywords], node.id_); + } + return indexStruct; + } + + async insertNodes(nodes: BaseNode[]) { + for (const node of nodes) { + const keywords = await KeywordTableIndex.extractKeywords( + node.getContent(MetadataMode.LLM), + this.serviceContext, + ); + this.indexStruct.addNode([...keywords], node.id_); + } + } + + deleteNode(nodeId: string): void { + const keywordsToDelete: Set<string> = new Set(); + for (const [keyword, existingNodeIds] of Object.entries( + this.indexStruct.table, + )) { + const index = existingNodeIds.indexOf(nodeId); + if (index !== -1) { + existingNodeIds.splice(index, 1); + + // Delete keywords that have zero nodes + if (existingNodeIds.length === 0) { + keywordsToDelete.add(keyword); + } + } + } + this.indexStruct.deleteNode([...keywordsToDelete], nodeId); + } + + async deleteNodes(nodeIds: string[], deleteFromDocStore: boolean) { + nodeIds.forEach((nodeId) => { + this.deleteNode(nodeId); + }); + + if (deleteFromDocStore) { + for (const nodeId of nodeIds) { + await this.docStore.deleteDocument(nodeId, false); + } + } + + await this.storageContext.indexStore.addIndexStruct(this.indexStruct); + } + + async deleteRefDoc( + refDocId: string, + deleteFromDocStore?: boolean, + ): Promise<void> { + const refDocInfo = await this.docStore.getRefDocInfo(refDocId); + + if (!refDocInfo) { + return; + } + + await this.deleteNodes(refDocInfo.nodeIds, false); + + if (deleteFromDocStore) { + await this.docStore.deleteRefDoc(refDocId, false); + } + + return; + } +} diff --git a/packages/core/src/indices/summary/SummaryIndex.ts b/packages/core/src/indices/summary/SummaryIndex.ts deleted file mode 100644 index 7223f33edb5e2dd43b5e785a4f4161f7b71ee2fa..0000000000000000000000000000000000000000 --- a/packages/core/src/indices/summary/SummaryIndex.ts +++ /dev/null @@ -1,268 +0,0 @@ -import _ from "lodash"; -import { BaseNode, Document } from "../../Node"; -import { BaseRetriever } from "../../Retriever"; -import { - ServiceContext, - serviceContextFromDefaults, -} from "../../ServiceContext"; -import { RetrieverQueryEngine } from "../../engines/query"; -import { BaseNodePostprocessor } from "../../postprocessors"; -import { - BaseDocumentStore, - RefDocInfo, - StorageContext, - storageContextFromDefaults, -} from "../../storage"; -import { - BaseSynthesizer, - CompactAndRefine, - ResponseSynthesizer, -} from "../../synthesizers"; -import { BaseQueryEngine } from "../../types"; -import { - BaseIndex, - BaseIndexInit, - IndexList, - IndexStructType, -} from "../BaseIndex"; -import { - SummaryIndexLLMRetriever, - SummaryIndexRetriever, -} from "./SummaryIndexRetriever"; - -export enum SummaryRetrieverMode { - DEFAULT = "default", - // EMBEDDING = "embedding", - LLM = "llm", -} - -export interface SummaryIndexOptions { - nodes?: BaseNode[]; - indexStruct?: IndexList; - indexId?: string; - serviceContext?: ServiceContext; - storageContext?: StorageContext; -} - -/** - * A SummaryIndex keeps nodes in a sequential order for use with summarization. - */ -export class SummaryIndex extends BaseIndex<IndexList> { - constructor(init: BaseIndexInit<IndexList>) { - super(init); - } - - static async init(options: SummaryIndexOptions): Promise<SummaryIndex> { - const storageContext = - options.storageContext ?? (await storageContextFromDefaults({})); - const serviceContext = - options.serviceContext ?? serviceContextFromDefaults({}); - const { docStore, indexStore } = storageContext; - - // Setup IndexStruct from storage - const indexStructs = (await indexStore.getIndexStructs()) as IndexList[]; - let indexStruct: IndexList | null; - - if (options.indexStruct && indexStructs.length > 0) { - throw new Error( - "Cannot initialize index with both indexStruct and indexStore", - ); - } - - if (options.indexStruct) { - indexStruct = options.indexStruct; - } else if (indexStructs.length == 1) { - indexStruct = indexStructs[0]; - } else if (indexStructs.length > 1 && options.indexId) { - indexStruct = (await indexStore.getIndexStruct( - options.indexId, - )) as IndexList; - } else { - indexStruct = null; - } - - // check indexStruct type - if (indexStruct && indexStruct.type !== IndexStructType.LIST) { - throw new Error( - "Attempting to initialize SummaryIndex with non-list indexStruct", - ); - } - - if (indexStruct) { - if (options.nodes) { - throw new Error( - "Cannot initialize SummaryIndex with both nodes and indexStruct", - ); - } - } else { - if (!options.nodes) { - throw new Error( - "Cannot initialize SummaryIndex without nodes or indexStruct", - ); - } - indexStruct = await SummaryIndex.buildIndexFromNodes( - options.nodes, - storageContext.docStore, - ); - - await indexStore.addIndexStruct(indexStruct); - } - - return new SummaryIndex({ - storageContext, - serviceContext, - docStore, - indexStore, - indexStruct, - }); - } - - static async fromDocuments( - documents: Document[], - args: { - storageContext?: StorageContext; - serviceContext?: ServiceContext; - } = {}, - ): Promise<SummaryIndex> { - let { storageContext, serviceContext } = args; - storageContext = storageContext ?? (await storageContextFromDefaults({})); - serviceContext = serviceContext ?? serviceContextFromDefaults({}); - const docStore = storageContext.docStore; - - docStore.addDocuments(documents, true); - for (const doc of documents) { - docStore.setDocumentHash(doc.id_, doc.hash); - } - - const nodes = serviceContext.nodeParser.getNodesFromDocuments(documents); - const index = await SummaryIndex.init({ - nodes, - storageContext, - serviceContext, - }); - return index; - } - - asRetriever(options?: { mode: SummaryRetrieverMode }): BaseRetriever { - const { mode = SummaryRetrieverMode.DEFAULT } = options ?? {}; - - switch (mode) { - case SummaryRetrieverMode.DEFAULT: - return new SummaryIndexRetriever(this); - case SummaryRetrieverMode.LLM: - return new SummaryIndexLLMRetriever(this); - default: - throw new Error(`Unknown retriever mode: ${mode}`); - } - } - - asQueryEngine(options?: { - retriever?: BaseRetriever; - responseSynthesizer?: BaseSynthesizer; - preFilters?: unknown; - nodePostprocessors?: BaseNodePostprocessor[]; - }): BaseQueryEngine { - let { retriever, responseSynthesizer } = options ?? {}; - - if (!retriever) { - retriever = this.asRetriever(); - } - - if (!responseSynthesizer) { - const responseBuilder = new CompactAndRefine(this.serviceContext); - responseSynthesizer = new ResponseSynthesizer({ - serviceContext: this.serviceContext, - responseBuilder, - }); - } - - return new RetrieverQueryEngine( - retriever, - responseSynthesizer, - options?.preFilters, - options?.nodePostprocessors, - ); - } - - static async buildIndexFromNodes( - nodes: BaseNode[], - docStore: BaseDocumentStore, - indexStruct?: IndexList, - ): Promise<IndexList> { - indexStruct = indexStruct || new IndexList(); - - await docStore.addDocuments(nodes, true); - for (const node of nodes) { - indexStruct.addNode(node); - } - - return indexStruct; - } - - async insertNodes(nodes: BaseNode[]): Promise<void> { - for (const node of nodes) { - this.indexStruct.addNode(node); - } - } - - async deleteRefDoc( - refDocId: string, - deleteFromDocStore?: boolean, - ): Promise<void> { - const refDocInfo = await this.docStore.getRefDocInfo(refDocId); - - if (!refDocInfo) { - return; - } - - await this.deleteNodes(refDocInfo.nodeIds, false); - - if (deleteFromDocStore) { - await this.docStore.deleteRefDoc(refDocId, false); - } - - return; - } - - async deleteNodes(nodeIds: string[], deleteFromDocStore: boolean) { - this.indexStruct.nodes = this.indexStruct.nodes.filter( - (existingNodeId: string) => !nodeIds.includes(existingNodeId), - ); - - if (deleteFromDocStore) { - for (const nodeId of nodeIds) { - await this.docStore.deleteDocument(nodeId, false); - } - } - - await this.storageContext.indexStore.addIndexStruct(this.indexStruct); - } - - async getRefDocInfo(): Promise<Record<string, RefDocInfo>> { - const nodeDocIds = this.indexStruct.nodes; - const nodes = await this.docStore.getNodes(nodeDocIds); - - const refDocInfoMap: Record<string, RefDocInfo> = {}; - - for (const node of nodes) { - const refNode = node.sourceNode; - if (_.isNil(refNode)) { - continue; - } - - const refDocInfo = await this.docStore.getRefDocInfo(refNode.nodeId); - - if (_.isNil(refDocInfo)) { - continue; - } - - refDocInfoMap[refNode.nodeId] = refDocInfo; - } - - return refDocInfoMap; - } -} - -// Legacy -export type ListIndex = SummaryIndex; -export type ListRetrieverMode = SummaryRetrieverMode; diff --git a/packages/core/src/indices/summary/SummaryIndexRetriever.ts b/packages/core/src/indices/summary/SummaryIndexRetriever.ts deleted file mode 100644 index 173b58d000ce655ab54a8c4f2431fe141605447d..0000000000000000000000000000000000000000 --- a/packages/core/src/indices/summary/SummaryIndexRetriever.ts +++ /dev/null @@ -1,137 +0,0 @@ -import _ from "lodash"; -import { globalsHelper } from "../../GlobalsHelper"; -import { NodeWithScore } from "../../Node"; -import { ChoiceSelectPrompt, defaultChoiceSelectPrompt } from "../../Prompt"; -import { BaseRetriever } from "../../Retriever"; -import { ServiceContext } from "../../ServiceContext"; -import { Event } from "../../callbacks/CallbackManager"; -import { SummaryIndex } from "./SummaryIndex"; -import { - ChoiceSelectParserFunction, - NodeFormatterFunction, - defaultFormatNodeBatchFn, - defaultParseChoiceSelectAnswerFn, -} from "./utils"; - -/** - * Simple retriever for SummaryIndex that returns all nodes - */ -export class SummaryIndexRetriever implements BaseRetriever { - index: SummaryIndex; - - constructor(index: SummaryIndex) { - this.index = index; - } - - async retrieve(query: string, parentEvent?: Event): Promise<NodeWithScore[]> { - const nodeIds = this.index.indexStruct.nodes; - const nodes = await this.index.docStore.getNodes(nodeIds); - const result = nodes.map((node) => ({ - node: node, - score: 1, - })); - - if (this.index.serviceContext.callbackManager.onRetrieve) { - this.index.serviceContext.callbackManager.onRetrieve({ - query, - nodes: result, - event: globalsHelper.createEvent({ - parentEvent, - type: "retrieve", - }), - }); - } - - return result; - } - - getServiceContext(): ServiceContext { - return this.index.serviceContext; - } -} - -/** - * LLM retriever for SummaryIndex which lets you select the most relevant chunks. - */ -export class SummaryIndexLLMRetriever implements BaseRetriever { - index: SummaryIndex; - choiceSelectPrompt: ChoiceSelectPrompt; - choiceBatchSize: number; - formatNodeBatchFn: NodeFormatterFunction; - parseChoiceSelectAnswerFn: ChoiceSelectParserFunction; - serviceContext: ServiceContext; - - // eslint-disable-next-line max-params - constructor( - index: SummaryIndex, - choiceSelectPrompt?: ChoiceSelectPrompt, - choiceBatchSize: number = 10, - formatNodeBatchFn?: NodeFormatterFunction, - parseChoiceSelectAnswerFn?: ChoiceSelectParserFunction, - serviceContext?: ServiceContext, - ) { - this.index = index; - this.choiceSelectPrompt = choiceSelectPrompt || defaultChoiceSelectPrompt; - this.choiceBatchSize = choiceBatchSize; - this.formatNodeBatchFn = formatNodeBatchFn || defaultFormatNodeBatchFn; - this.parseChoiceSelectAnswerFn = - parseChoiceSelectAnswerFn || defaultParseChoiceSelectAnswerFn; - this.serviceContext = serviceContext || index.serviceContext; - } - - async retrieve(query: string, parentEvent?: Event): Promise<NodeWithScore[]> { - const nodeIds = this.index.indexStruct.nodes; - const results: NodeWithScore[] = []; - - for (let idx = 0; idx < nodeIds.length; idx += this.choiceBatchSize) { - const nodeIdsBatch = nodeIds.slice(idx, idx + this.choiceBatchSize); - const nodesBatch = await this.index.docStore.getNodes(nodeIdsBatch); - - const fmtBatchStr = this.formatNodeBatchFn(nodesBatch); - const input = { context: fmtBatchStr, query: query }; - const rawResponse = ( - await this.serviceContext.llm.complete({ - prompt: this.choiceSelectPrompt(input), - }) - ).text; - - // parseResult is a map from doc number to relevance score - const parseResult = this.parseChoiceSelectAnswerFn( - rawResponse, - nodesBatch.length, - ); - const choiceNodeIds = nodeIdsBatch.filter((nodeId, idx) => { - return `${idx}` in parseResult; - }); - - const choiceNodes = await this.index.docStore.getNodes(choiceNodeIds); - const nodeWithScores = choiceNodes.map((node, i) => ({ - node: node, - score: _.get(parseResult, `${i + 1}`, 1), - })); - - results.push(...nodeWithScores); - } - - if (this.serviceContext.callbackManager.onRetrieve) { - this.serviceContext.callbackManager.onRetrieve({ - query, - nodes: results, - event: globalsHelper.createEvent({ - parentEvent, - type: "retrieve", - }), - }); - } - - return results; - } - - getServiceContext(): ServiceContext { - return this.serviceContext; - } -} - -// Legacy -export type ListIndexRetriever = SummaryIndexRetriever; -export type ListIndexLLMRetriever = SummaryIndexLLMRetriever; diff --git a/packages/core/src/indices/summary/index.ts b/packages/core/src/indices/summary/index.ts index b6e0c7d5ec0a635bca54be5d7c4ec38945407717..cafa1a2c6f21622ec9116bd5ded72a3a93f0cd3a 100644 --- a/packages/core/src/indices/summary/index.ts +++ b/packages/core/src/indices/summary/index.ts @@ -1,10 +1,392 @@ -export { SummaryIndex, SummaryRetrieverMode } from "./SummaryIndex"; -export type { ListIndex, ListRetrieverMode } from "./SummaryIndex"; -export { - SummaryIndexLLMRetriever, - SummaryIndexRetriever, -} from "./SummaryIndexRetriever"; -export type { - ListIndexLLMRetriever, - ListIndexRetriever, -} from "./SummaryIndexRetriever"; +import _ from "lodash"; +import { globalsHelper } from "../../GlobalsHelper.js"; +import { BaseNode, Document, NodeWithScore } from "../../Node.js"; +import { ChoiceSelectPrompt, defaultChoiceSelectPrompt } from "../../Prompt.js"; +import { BaseRetriever } from "../../Retriever.js"; +import { + ServiceContext, + serviceContextFromDefaults, +} from "../../ServiceContext.js"; +import { Event } from "../../callbacks/CallbackManager.js"; +import { RetrieverQueryEngine } from "../../engines/query/index.js"; +import { BaseNodePostprocessor } from "../../postprocessors/index.js"; +import { + BaseDocumentStore, + RefDocInfo, + StorageContext, + storageContextFromDefaults, +} from "../../storage/index.js"; +import { + BaseSynthesizer, + CompactAndRefine, + ResponseSynthesizer, +} from "../../synthesizers/index.js"; +import { BaseQueryEngine } from "../../types.js"; +import { BaseIndex, BaseIndexInit } from "../BaseIndex.js"; +import { IndexList, IndexStructType } from "../json-to-index-struct.js"; +import { + ChoiceSelectParserFunction, + NodeFormatterFunction, + defaultFormatNodeBatchFn, + defaultParseChoiceSelectAnswerFn, +} from "./utils.js"; + +export enum SummaryRetrieverMode { + DEFAULT = "default", + // EMBEDDING = "embedding", + LLM = "llm", +} + +export interface SummaryIndexOptions { + nodes?: BaseNode[]; + indexStruct?: IndexList; + indexId?: string; + serviceContext?: ServiceContext; + storageContext?: StorageContext; +} + +/** + * A SummaryIndex keeps nodes in a sequential order for use with summarization. + */ +export class SummaryIndex extends BaseIndex<IndexList> { + constructor(init: BaseIndexInit<IndexList>) { + super(init); + } + + static async init(options: SummaryIndexOptions): Promise<SummaryIndex> { + const storageContext = + options.storageContext ?? (await storageContextFromDefaults({})); + const serviceContext = + options.serviceContext ?? serviceContextFromDefaults({}); + const { docStore, indexStore } = storageContext; + + // Setup IndexStruct from storage + const indexStructs = (await indexStore.getIndexStructs()) as IndexList[]; + let indexStruct: IndexList | null; + + if (options.indexStruct && indexStructs.length > 0) { + throw new Error( + "Cannot initialize index with both indexStruct and indexStore", + ); + } + + if (options.indexStruct) { + indexStruct = options.indexStruct; + } else if (indexStructs.length == 1) { + indexStruct = indexStructs[0]; + } else if (indexStructs.length > 1 && options.indexId) { + indexStruct = (await indexStore.getIndexStruct( + options.indexId, + )) as IndexList; + } else { + indexStruct = null; + } + + // check indexStruct type + if (indexStruct && indexStruct.type !== IndexStructType.LIST) { + throw new Error( + "Attempting to initialize SummaryIndex with non-list indexStruct", + ); + } + + if (indexStruct) { + if (options.nodes) { + throw new Error( + "Cannot initialize SummaryIndex with both nodes and indexStruct", + ); + } + } else { + if (!options.nodes) { + throw new Error( + "Cannot initialize SummaryIndex without nodes or indexStruct", + ); + } + indexStruct = await SummaryIndex.buildIndexFromNodes( + options.nodes, + storageContext.docStore, + ); + + await indexStore.addIndexStruct(indexStruct); + } + + return new SummaryIndex({ + storageContext, + serviceContext, + docStore, + indexStore, + indexStruct, + }); + } + + static async fromDocuments( + documents: Document[], + args: { + storageContext?: StorageContext; + serviceContext?: ServiceContext; + } = {}, + ): Promise<SummaryIndex> { + let { storageContext, serviceContext } = args; + storageContext = storageContext ?? (await storageContextFromDefaults({})); + serviceContext = serviceContext ?? serviceContextFromDefaults({}); + const docStore = storageContext.docStore; + + docStore.addDocuments(documents, true); + for (const doc of documents) { + docStore.setDocumentHash(doc.id_, doc.hash); + } + + const nodes = serviceContext.nodeParser.getNodesFromDocuments(documents); + const index = await SummaryIndex.init({ + nodes, + storageContext, + serviceContext, + }); + return index; + } + + asRetriever(options?: { mode: SummaryRetrieverMode }): BaseRetriever { + const { mode = SummaryRetrieverMode.DEFAULT } = options ?? {}; + + switch (mode) { + case SummaryRetrieverMode.DEFAULT: + return new SummaryIndexRetriever(this); + case SummaryRetrieverMode.LLM: + return new SummaryIndexLLMRetriever(this); + default: + throw new Error(`Unknown retriever mode: ${mode}`); + } + } + + asQueryEngine(options?: { + retriever?: BaseRetriever; + responseSynthesizer?: BaseSynthesizer; + preFilters?: unknown; + nodePostprocessors?: BaseNodePostprocessor[]; + }): BaseQueryEngine { + let { retriever, responseSynthesizer } = options ?? {}; + + if (!retriever) { + retriever = this.asRetriever(); + } + + if (!responseSynthesizer) { + const responseBuilder = new CompactAndRefine(this.serviceContext); + responseSynthesizer = new ResponseSynthesizer({ + serviceContext: this.serviceContext, + responseBuilder, + }); + } + + return new RetrieverQueryEngine( + retriever, + responseSynthesizer, + options?.preFilters, + options?.nodePostprocessors, + ); + } + + static async buildIndexFromNodes( + nodes: BaseNode[], + docStore: BaseDocumentStore, + indexStruct?: IndexList, + ): Promise<IndexList> { + indexStruct = indexStruct || new IndexList(); + + await docStore.addDocuments(nodes, true); + for (const node of nodes) { + indexStruct.addNode(node); + } + + return indexStruct; + } + + async insertNodes(nodes: BaseNode[]): Promise<void> { + for (const node of nodes) { + this.indexStruct.addNode(node); + } + } + + async deleteRefDoc( + refDocId: string, + deleteFromDocStore?: boolean, + ): Promise<void> { + const refDocInfo = await this.docStore.getRefDocInfo(refDocId); + + if (!refDocInfo) { + return; + } + + await this.deleteNodes(refDocInfo.nodeIds, false); + + if (deleteFromDocStore) { + await this.docStore.deleteRefDoc(refDocId, false); + } + + return; + } + + async deleteNodes(nodeIds: string[], deleteFromDocStore: boolean) { + this.indexStruct.nodes = this.indexStruct.nodes.filter( + (existingNodeId: string) => !nodeIds.includes(existingNodeId), + ); + + if (deleteFromDocStore) { + for (const nodeId of nodeIds) { + await this.docStore.deleteDocument(nodeId, false); + } + } + + await this.storageContext.indexStore.addIndexStruct(this.indexStruct); + } + + async getRefDocInfo(): Promise<Record<string, RefDocInfo>> { + const nodeDocIds = this.indexStruct.nodes; + const nodes = await this.docStore.getNodes(nodeDocIds); + + const refDocInfoMap: Record<string, RefDocInfo> = {}; + + for (const node of nodes) { + const refNode = node.sourceNode; + if (_.isNil(refNode)) { + continue; + } + + const refDocInfo = await this.docStore.getRefDocInfo(refNode.nodeId); + + if (_.isNil(refDocInfo)) { + continue; + } + + refDocInfoMap[refNode.nodeId] = refDocInfo; + } + + return refDocInfoMap; + } +} + +// Legacy +export type ListIndex = SummaryIndex; +export type ListRetrieverMode = SummaryRetrieverMode; + +/** + * Simple retriever for SummaryIndex that returns all nodes + */ +export class SummaryIndexRetriever implements BaseRetriever { + index: SummaryIndex; + + constructor(index: SummaryIndex) { + this.index = index; + } + + async retrieve(query: string, parentEvent?: Event): Promise<NodeWithScore[]> { + const nodeIds = this.index.indexStruct.nodes; + const nodes = await this.index.docStore.getNodes(nodeIds); + const result = nodes.map((node) => ({ + node: node, + score: 1, + })); + + if (this.index.serviceContext.callbackManager.onRetrieve) { + this.index.serviceContext.callbackManager.onRetrieve({ + query, + nodes: result, + event: globalsHelper.createEvent({ + parentEvent, + type: "retrieve", + }), + }); + } + + return result; + } + + getServiceContext(): ServiceContext { + return this.index.serviceContext; + } +} + +/** + * LLM retriever for SummaryIndex which lets you select the most relevant chunks. + */ +export class SummaryIndexLLMRetriever implements BaseRetriever { + index: SummaryIndex; + choiceSelectPrompt: ChoiceSelectPrompt; + choiceBatchSize: number; + formatNodeBatchFn: NodeFormatterFunction; + parseChoiceSelectAnswerFn: ChoiceSelectParserFunction; + serviceContext: ServiceContext; + + // eslint-disable-next-line max-params + constructor( + index: SummaryIndex, + choiceSelectPrompt?: ChoiceSelectPrompt, + choiceBatchSize: number = 10, + formatNodeBatchFn?: NodeFormatterFunction, + parseChoiceSelectAnswerFn?: ChoiceSelectParserFunction, + serviceContext?: ServiceContext, + ) { + this.index = index; + this.choiceSelectPrompt = choiceSelectPrompt || defaultChoiceSelectPrompt; + this.choiceBatchSize = choiceBatchSize; + this.formatNodeBatchFn = formatNodeBatchFn || defaultFormatNodeBatchFn; + this.parseChoiceSelectAnswerFn = + parseChoiceSelectAnswerFn || defaultParseChoiceSelectAnswerFn; + this.serviceContext = serviceContext || index.serviceContext; + } + + async retrieve(query: string, parentEvent?: Event): Promise<NodeWithScore[]> { + const nodeIds = this.index.indexStruct.nodes; + const results: NodeWithScore[] = []; + + for (let idx = 0; idx < nodeIds.length; idx += this.choiceBatchSize) { + const nodeIdsBatch = nodeIds.slice(idx, idx + this.choiceBatchSize); + const nodesBatch = await this.index.docStore.getNodes(nodeIdsBatch); + + const fmtBatchStr = this.formatNodeBatchFn(nodesBatch); + const input = { context: fmtBatchStr, query: query }; + const rawResponse = ( + await this.serviceContext.llm.complete({ + prompt: this.choiceSelectPrompt(input), + }) + ).text; + + // parseResult is a map from doc number to relevance score + const parseResult = this.parseChoiceSelectAnswerFn( + rawResponse, + nodesBatch.length, + ); + const choiceNodeIds = nodeIdsBatch.filter((nodeId, idx) => { + return `${idx}` in parseResult; + }); + + const choiceNodes = await this.index.docStore.getNodes(choiceNodeIds); + const nodeWithScores = choiceNodes.map((node, i) => ({ + node: node, + score: _.get(parseResult, `${i + 1}`, 1), + })); + + results.push(...nodeWithScores); + } + + if (this.serviceContext.callbackManager.onRetrieve) { + this.serviceContext.callbackManager.onRetrieve({ + query, + nodes: results, + event: globalsHelper.createEvent({ + parentEvent, + type: "retrieve", + }), + }); + } + + return results; + } + + getServiceContext(): ServiceContext { + return this.serviceContext; + } +} + +// Legacy +export type ListIndexRetriever = SummaryIndexRetriever; +export type ListIndexLLMRetriever = SummaryIndexLLMRetriever; diff --git a/packages/core/src/indices/summary/utils.ts b/packages/core/src/indices/summary/utils.ts index af008c42197ced3a2e238d9aa1907073a1afccc7..7805b991fe5e0d044c7b2976751c023ace268393 100644 --- a/packages/core/src/indices/summary/utils.ts +++ b/packages/core/src/indices/summary/utils.ts @@ -1,5 +1,5 @@ import _ from "lodash"; -import { BaseNode, MetadataMode } from "../../Node"; +import { BaseNode, MetadataMode } from "../../Node.js"; export type NodeFormatterFunction = (summaryNodes: BaseNode[]) => string; export const defaultFormatNodeBatchFn: NodeFormatterFunction = ( diff --git a/packages/core/src/indices/vectorStore/VectorIndexRetriever.ts b/packages/core/src/indices/vectorStore/VectorIndexRetriever.ts deleted file mode 100644 index 5a8e3614fd428907d511ace1d22685c0abf21617..0000000000000000000000000000000000000000 --- a/packages/core/src/indices/vectorStore/VectorIndexRetriever.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { globalsHelper } from "../../GlobalsHelper"; -import { ImageNode, Metadata, NodeWithScore } from "../../Node"; -import { BaseRetriever } from "../../Retriever"; -import { ServiceContext } from "../../ServiceContext"; -import { Event } from "../../callbacks/CallbackManager"; -import { DEFAULT_SIMILARITY_TOP_K } from "../../constants"; -import { BaseEmbedding } from "../../embeddings"; -import { - MetadataFilters, - VectorStoreQuery, - VectorStoreQueryMode, - VectorStoreQueryResult, -} from "../../storage/vectorStore/types"; -import { VectorStoreIndex } from "./VectorStoreIndex"; - -/** - * VectorIndexRetriever retrieves nodes from a VectorIndex. - */ - -export type VectorIndexRetrieverOptions = { - index: VectorStoreIndex; - similarityTopK?: number; - imageSimilarityTopK?: number; -}; - -export class VectorIndexRetriever implements BaseRetriever { - index: VectorStoreIndex; - similarityTopK: number; - imageSimilarityTopK: number; - private serviceContext: ServiceContext; - - constructor({ - index, - similarityTopK, - imageSimilarityTopK, - }: VectorIndexRetrieverOptions) { - this.index = index; - this.serviceContext = this.index.serviceContext; - this.similarityTopK = similarityTopK ?? DEFAULT_SIMILARITY_TOP_K; - this.imageSimilarityTopK = imageSimilarityTopK ?? DEFAULT_SIMILARITY_TOP_K; - } - - async retrieve( - query: string, - parentEvent?: Event, - preFilters?: MetadataFilters, - ): Promise<NodeWithScore[]> { - let nodesWithScores = await this.textRetrieve(query, preFilters); - nodesWithScores = nodesWithScores.concat( - await this.textToImageRetrieve(query, preFilters), - ); - this.sendEvent(query, nodesWithScores, parentEvent); - return nodesWithScores; - } - - protected async textRetrieve( - query: string, - preFilters?: MetadataFilters, - ): Promise<NodeWithScore[]> { - const options = {}; - const q = await this.buildVectorStoreQuery( - this.index.embedModel, - query, - this.similarityTopK, - preFilters, - ); - const result = await this.index.vectorStore.query(q, options); - return this.buildNodeListFromQueryResult(result); - } - - private async textToImageRetrieve( - query: string, - preFilters?: MetadataFilters, - ) { - if (!this.index.imageEmbedModel || !this.index.imageVectorStore) { - // no-op if image embedding and vector store are not set - return []; - } - const q = await this.buildVectorStoreQuery( - this.index.imageEmbedModel, - query, - this.imageSimilarityTopK, - preFilters, - ); - const result = await this.index.imageVectorStore.query(q, preFilters); - return this.buildNodeListFromQueryResult(result); - } - - protected sendEvent( - query: string, - nodesWithScores: NodeWithScore<Metadata>[], - parentEvent: Event | undefined, - ) { - if (this.serviceContext.callbackManager.onRetrieve) { - this.serviceContext.callbackManager.onRetrieve({ - query, - nodes: nodesWithScores, - event: globalsHelper.createEvent({ - parentEvent, - type: "retrieve", - }), - }); - } - } - - protected async buildVectorStoreQuery( - embedModel: BaseEmbedding, - query: string, - similarityTopK: number, - preFilters?: MetadataFilters, - ): Promise<VectorStoreQuery> { - const queryEmbedding = await embedModel.getQueryEmbedding(query); - - return { - queryEmbedding: queryEmbedding, - mode: VectorStoreQueryMode.DEFAULT, - similarityTopK: similarityTopK, - filters: preFilters ?? undefined, - }; - } - - protected buildNodeListFromQueryResult(result: VectorStoreQueryResult) { - const nodesWithScores: NodeWithScore[] = []; - for (let i = 0; i < result.ids.length; i++) { - const nodeFromResult = result.nodes?.[i]; - if (!this.index.indexStruct.nodesDict[result.ids[i]] && nodeFromResult) { - this.index.indexStruct.nodesDict[result.ids[i]] = nodeFromResult; - } - - const node = this.index.indexStruct.nodesDict[result.ids[i]]; - // XXX: Hack, if it's an image node, we reconstruct the image from the URL - // Alternative: Store image in doc store and retrieve it here - if (node instanceof ImageNode) { - node.image = node.getUrl(); - } - - nodesWithScores.push({ - node: node, - score: result.similarities[i], - }); - } - - return nodesWithScores; - } - - getServiceContext(): ServiceContext { - return this.serviceContext; - } -} diff --git a/packages/core/src/indices/vectorStore/VectorStoreIndex.ts b/packages/core/src/indices/vectorStore/VectorStoreIndex.ts deleted file mode 100644 index 5b29ed6ef95d84de2b9ec450a5bd7c1bd7ba4fd3..0000000000000000000000000000000000000000 --- a/packages/core/src/indices/vectorStore/VectorStoreIndex.ts +++ /dev/null @@ -1,398 +0,0 @@ -import { - BaseNode, - Document, - ImageNode, - MetadataMode, - ObjectType, - splitNodesByType, -} from "../../Node"; -import { BaseRetriever } from "../../Retriever"; -import { - ServiceContext, - serviceContextFromDefaults, -} from "../../ServiceContext"; -import { - BaseEmbedding, - ClipEmbedding, - MultiModalEmbedding, -} from "../../embeddings"; -import { RetrieverQueryEngine } from "../../engines/query"; -import { runTransformations } from "../../ingestion"; -import { BaseNodePostprocessor } from "../../postprocessors"; -import { - BaseIndexStore, - MetadataFilters, - StorageContext, - VectorStore, - storageContextFromDefaults, -} from "../../storage"; -import { BaseSynthesizer } from "../../synthesizers"; -import { BaseQueryEngine } from "../../types"; -import { - BaseIndex, - BaseIndexInit, - IndexDict, - IndexStructType, -} from "../BaseIndex"; -import { - VectorIndexRetriever, - VectorIndexRetrieverOptions, -} from "./VectorIndexRetriever"; - -interface IndexStructOptions { - indexStruct?: IndexDict; - indexId?: string; -} -export interface VectorIndexOptions extends IndexStructOptions { - nodes?: BaseNode[]; - serviceContext?: ServiceContext; - storageContext?: StorageContext; - imageVectorStore?: VectorStore; - vectorStore?: VectorStore; - logProgress?: boolean; -} - -export interface VectorIndexConstructorProps extends BaseIndexInit<IndexDict> { - indexStore: BaseIndexStore; - imageVectorStore?: VectorStore; -} - -/** - * The VectorStoreIndex, an index that stores the nodes only according to their vector embedings. - */ -export class VectorStoreIndex extends BaseIndex<IndexDict> { - vectorStore: VectorStore; - indexStore: BaseIndexStore; - embedModel: BaseEmbedding; - imageVectorStore?: VectorStore; - imageEmbedModel?: MultiModalEmbedding; - - private constructor(init: VectorIndexConstructorProps) { - super(init); - this.indexStore = init.indexStore; - this.vectorStore = init.vectorStore ?? init.storageContext.vectorStore; - this.embedModel = init.serviceContext.embedModel; - this.imageVectorStore = - init.imageVectorStore ?? init.storageContext.imageVectorStore; - if (this.imageVectorStore) { - this.imageEmbedModel = new ClipEmbedding(); - } - } - - /** - * The async init function creates a new VectorStoreIndex. - * @param options - * @returns - */ - public static async init( - options: VectorIndexOptions, - ): Promise<VectorStoreIndex> { - const storageContext = - options.storageContext ?? (await storageContextFromDefaults({})); - const serviceContext = - options.serviceContext ?? serviceContextFromDefaults({}); - const indexStore = storageContext.indexStore; - const docStore = storageContext.docStore; - - let indexStruct = await VectorStoreIndex.setupIndexStructFromStorage( - indexStore, - options, - ); - - if (!options.nodes && !indexStruct) { - throw new Error( - "Cannot initialize VectorStoreIndex without nodes or indexStruct", - ); - } - - indexStruct = indexStruct ?? new IndexDict(); - - const index = new this({ - storageContext, - serviceContext, - docStore, - indexStruct, - indexStore, - vectorStore: options.vectorStore, - imageVectorStore: options.imageVectorStore, - }); - - if (options.nodes) { - // If nodes are passed in, then we need to update the index - await index.buildIndexFromNodes(options.nodes, { - logProgress: options.logProgress, - }); - } - return index; - } - - private static async setupIndexStructFromStorage( - indexStore: BaseIndexStore, - options: IndexStructOptions, - ) { - const indexStructs = (await indexStore.getIndexStructs()) as IndexDict[]; - let indexStruct: IndexDict | undefined; - - if (options.indexStruct && indexStructs.length > 0) { - throw new Error( - "Cannot initialize index with both indexStruct and indexStore", - ); - } - - if (options.indexStruct) { - indexStruct = options.indexStruct; - } else if (indexStructs.length == 1) { - indexStruct = indexStructs[0]; - } else if (indexStructs.length > 1 && options.indexId) { - indexStruct = (await indexStore.getIndexStruct( - options.indexId, - )) as IndexDict; - } - // Check indexStruct type - if (indexStruct && indexStruct.type !== IndexStructType.SIMPLE_DICT) { - throw new Error( - "Attempting to initialize VectorStoreIndex with non-vector indexStruct", - ); - } - return indexStruct; - } - - /** - * Calculates the embeddings for the given nodes. - * - * @param nodes - An array of BaseNode objects representing the nodes for which embeddings are to be calculated. - * @param {Object} [options] - An optional object containing additional parameters. - * @param {boolean} [options.logProgress] - A boolean indicating whether to log progress to the console (useful for debugging). - */ - async getNodeEmbeddingResults( - nodes: BaseNode[], - options?: { logProgress?: boolean }, - ): Promise<BaseNode[]> { - const texts = nodes.map((node) => node.getContent(MetadataMode.EMBED)); - const embeddings = await this.embedModel.getTextEmbeddingsBatch(texts, { - logProgress: options?.logProgress, - }); - return nodes.map((node, i) => { - node.embedding = embeddings[i]; - return node; - }); - } - - /** - * Get embeddings for nodes and place them into the index. - * @param nodes - * @returns - */ - async buildIndexFromNodes( - nodes: BaseNode[], - options?: { logProgress?: boolean }, - ) { - // Check if the index already has nodes with the same hash - const newNodes = nodes.filter((node) => - Object.entries(this.indexStruct!.nodesDict).reduce( - (acc, [key, value]) => { - if (value.hash === node.hash) { - acc = false; - } - return acc; - }, - true, - ), - ); - - await this.insertNodes(newNodes, options); - } - - /** - * High level API: split documents, get embeddings, and build index. - * @param documents - * @param args - * @returns - */ - static async fromDocuments( - documents: Document[], - args: VectorIndexOptions = {}, - ): Promise<VectorStoreIndex> { - args.storageContext = - args.storageContext ?? (await storageContextFromDefaults({})); - args.serviceContext = args.serviceContext ?? serviceContextFromDefaults({}); - const docStore = args.storageContext.docStore; - - for (const doc of documents) { - docStore.setDocumentHash(doc.id_, doc.hash); - } - - if (args.logProgress) { - console.log("Using node parser on documents..."); - } - args.nodes = await runTransformations(documents, [ - args.serviceContext.nodeParser, - ]); - if (args.logProgress) { - console.log("Finished parsing documents."); - } - return await this.init(args); - } - - static async fromVectorStore( - vectorStore: VectorStore, - serviceContext: ServiceContext, - imageVectorStore?: VectorStore, - ) { - if (!vectorStore.storesText) { - throw new Error( - "Cannot initialize from a vector store that does not store text", - ); - } - - const storageContext = await storageContextFromDefaults({ - vectorStore, - imageVectorStore, - }); - - const index = await this.init({ - nodes: [], - storageContext, - serviceContext, - }); - - return index; - } - - asRetriever( - options?: Omit<VectorIndexRetrieverOptions, "index">, - ): VectorIndexRetriever { - return new VectorIndexRetriever({ index: this, ...options }); - } - - asQueryEngine(options?: { - retriever?: BaseRetriever; - responseSynthesizer?: BaseSynthesizer; - preFilters?: MetadataFilters; - nodePostprocessors?: BaseNodePostprocessor[]; - }): BaseQueryEngine & RetrieverQueryEngine { - const { retriever, responseSynthesizer } = options ?? {}; - return new RetrieverQueryEngine( - retriever ?? this.asRetriever(), - responseSynthesizer, - options?.preFilters, - options?.nodePostprocessors, - ); - } - - protected async insertNodesToStore( - vectorStore: VectorStore, - nodes: BaseNode[], - ): Promise<void> { - const newIds = await vectorStore.add(nodes); - - // NOTE: if the vector store doesn't store text, - // we need to add the nodes to the index struct and document store - // NOTE: if the vector store keeps text, - // we only need to add image and index nodes - for (let i = 0; i < nodes.length; ++i) { - const type = nodes[i].getType(); - if ( - !vectorStore.storesText || - type === ObjectType.INDEX || - type === ObjectType.IMAGE - ) { - const nodeWithoutEmbedding = nodes[i].clone(); - nodeWithoutEmbedding.embedding = undefined; - this.indexStruct.addNode(nodeWithoutEmbedding, newIds[i]); - await this.docStore.addDocuments([nodeWithoutEmbedding], true); - } - } - } - - async insertNodes( - nodes: BaseNode[], - options?: { logProgress?: boolean }, - ): Promise<void> { - if (!nodes || nodes.length === 0) { - return; - } - const { imageNodes, textNodes } = splitNodesByType(nodes); - if (imageNodes.length > 0) { - if (!this.imageVectorStore) { - throw new Error("Cannot insert image nodes without image vector store"); - } - const imageNodesWithEmbedding = await this.getImageNodeEmbeddingResults( - imageNodes, - options, - ); - await this.insertNodesToStore( - this.imageVectorStore, - imageNodesWithEmbedding, - ); - } - const embeddingResults = await this.getNodeEmbeddingResults( - textNodes, - options, - ); - await this.insertNodesToStore(this.vectorStore, embeddingResults); - await this.indexStore.addIndexStruct(this.indexStruct); - } - - async deleteRefDoc( - refDocId: string, - deleteFromDocStore: boolean = true, - ): Promise<void> { - await this.deleteRefDocFromStore(this.vectorStore, refDocId); - if (this.imageVectorStore) { - await this.deleteRefDocFromStore(this.imageVectorStore, refDocId); - } - - if (deleteFromDocStore) { - await this.docStore.deleteDocument(refDocId, false); - } - } - - protected async deleteRefDocFromStore( - vectorStore: VectorStore, - refDocId: string, - ): Promise<void> { - vectorStore.delete(refDocId); - - if (!vectorStore.storesText) { - const refDocInfo = await this.docStore.getRefDocInfo(refDocId); - - if (refDocInfo) { - for (const nodeId of refDocInfo.nodeIds) { - this.indexStruct.delete(nodeId); - vectorStore.delete(nodeId); - } - } - await this.indexStore.addIndexStruct(this.indexStruct); - } - } - - /** - * Calculates the embeddings for the given image nodes. - * - * @param nodes - An array of ImageNode objects representing the nodes for which embeddings are to be calculated. - * @param {Object} [options] - An optional object containing additional parameters. - * @param {boolean} [options.logProgress] - A boolean indicating whether to log progress to the console (useful for debugging). - */ - async getImageNodeEmbeddingResults( - nodes: ImageNode[], - options?: { logProgress?: boolean }, - ): Promise<ImageNode[]> { - if (!this.imageEmbedModel) { - return []; - } - - const nodesWithEmbeddings: ImageNode[] = []; - - for (let i = 0; i < nodes.length; ++i) { - const node = nodes[i]; - if (options?.logProgress) { - console.log(`Getting embedding for node ${i + 1}/${nodes.length}`); - } - node.embedding = await this.imageEmbedModel.getImageEmbedding(node.image); - nodesWithEmbeddings.push(node); - } - - return nodesWithEmbeddings; - } -} diff --git a/packages/core/src/indices/vectorStore/index.ts b/packages/core/src/indices/vectorStore/index.ts index a296b4f0b52149a04bef67eedf81e42e3552a273..fd199c5f38b9c1a83359566fcbb8000bbc0203ee 100644 --- a/packages/core/src/indices/vectorStore/index.ts +++ b/packages/core/src/indices/vectorStore/index.ts @@ -1,2 +1,533 @@ -export { VectorIndexRetriever } from "./VectorIndexRetriever"; -export { VectorStoreIndex } from "./VectorStoreIndex"; +import { globalsHelper } from "../../GlobalsHelper.js"; +import { + BaseNode, + Document, + ImageNode, + Metadata, + MetadataMode, + NodeWithScore, + ObjectType, + splitNodesByType, +} from "../../Node.js"; +import { BaseRetriever } from "../../Retriever.js"; +import { + ServiceContext, + serviceContextFromDefaults, +} from "../../ServiceContext.js"; +import { Event } from "../../callbacks/CallbackManager.js"; +import { DEFAULT_SIMILARITY_TOP_K } from "../../constants.js"; +import { + BaseEmbedding, + ClipEmbedding, + MultiModalEmbedding, +} from "../../embeddings/index.js"; +import { RetrieverQueryEngine } from "../../engines/query/RetrieverQueryEngine.js"; +import { runTransformations } from "../../ingestion/index.js"; +import { BaseNodePostprocessor } from "../../postprocessors/types.js"; +import { + BaseIndexStore, + MetadataFilters, + StorageContext, + VectorStore, + VectorStoreQuery, + VectorStoreQueryMode, + VectorStoreQueryResult, + storageContextFromDefaults, +} from "../../storage/index.js"; +import { BaseSynthesizer } from "../../synthesizers/types.js"; +import { BaseQueryEngine } from "../../types.js"; +import { BaseIndex, BaseIndexInit } from "../BaseIndex.js"; +import { IndexDict, IndexStructType } from "../json-to-index-struct.js"; + +interface IndexStructOptions { + indexStruct?: IndexDict; + indexId?: string; +} +export interface VectorIndexOptions extends IndexStructOptions { + nodes?: BaseNode[]; + serviceContext?: ServiceContext; + storageContext?: StorageContext; + imageVectorStore?: VectorStore; + vectorStore?: VectorStore; + logProgress?: boolean; +} + +export interface VectorIndexConstructorProps extends BaseIndexInit<IndexDict> { + indexStore: BaseIndexStore; + imageVectorStore?: VectorStore; +} + +/** + * The VectorStoreIndex, an index that stores the nodes only according to their vector embedings. + */ +export class VectorStoreIndex extends BaseIndex<IndexDict> { + vectorStore: VectorStore; + indexStore: BaseIndexStore; + embedModel: BaseEmbedding; + imageVectorStore?: VectorStore; + imageEmbedModel?: MultiModalEmbedding; + + private constructor(init: VectorIndexConstructorProps) { + super(init); + this.indexStore = init.indexStore; + this.vectorStore = init.vectorStore ?? init.storageContext.vectorStore; + this.embedModel = init.serviceContext.embedModel; + this.imageVectorStore = + init.imageVectorStore ?? init.storageContext.imageVectorStore; + if (this.imageVectorStore) { + this.imageEmbedModel = new ClipEmbedding(); + } + } + + /** + * The async init function creates a new VectorStoreIndex. + * @param options + * @returns + */ + public static async init( + options: VectorIndexOptions, + ): Promise<VectorStoreIndex> { + const storageContext = + options.storageContext ?? (await storageContextFromDefaults({})); + const serviceContext = + options.serviceContext ?? serviceContextFromDefaults({}); + const indexStore = storageContext.indexStore; + const docStore = storageContext.docStore; + + let indexStruct = await VectorStoreIndex.setupIndexStructFromStorage( + indexStore, + options, + ); + + if (!options.nodes && !indexStruct) { + throw new Error( + "Cannot initialize VectorStoreIndex without nodes or indexStruct", + ); + } + + indexStruct = indexStruct ?? new IndexDict(); + + const index = new this({ + storageContext, + serviceContext, + docStore, + indexStruct, + indexStore, + vectorStore: options.vectorStore, + imageVectorStore: options.imageVectorStore, + }); + + if (options.nodes) { + // If nodes are passed in, then we need to update the index + await index.buildIndexFromNodes(options.nodes, { + logProgress: options.logProgress, + }); + } + return index; + } + + private static async setupIndexStructFromStorage( + indexStore: BaseIndexStore, + options: IndexStructOptions, + ) { + const indexStructs = (await indexStore.getIndexStructs()) as IndexDict[]; + let indexStruct: IndexDict | undefined; + + if (options.indexStruct && indexStructs.length > 0) { + throw new Error( + "Cannot initialize index with both indexStruct and indexStore", + ); + } + + if (options.indexStruct) { + indexStruct = options.indexStruct; + } else if (indexStructs.length == 1) { + indexStruct = indexStructs[0]; + } else if (indexStructs.length > 1 && options.indexId) { + indexStruct = (await indexStore.getIndexStruct( + options.indexId, + )) as IndexDict; + } + // Check indexStruct type + if (indexStruct && indexStruct.type !== IndexStructType.SIMPLE_DICT) { + throw new Error( + "Attempting to initialize VectorStoreIndex with non-vector indexStruct", + ); + } + return indexStruct; + } + + /** + * Calculates the embeddings for the given nodes. + * + * @param nodes - An array of BaseNode objects representing the nodes for which embeddings are to be calculated. + * @param {Object} [options] - An optional object containing additional parameters. + * @param {boolean} [options.logProgress] - A boolean indicating whether to log progress to the console (useful for debugging). + */ + async getNodeEmbeddingResults( + nodes: BaseNode[], + options?: { logProgress?: boolean }, + ): Promise<BaseNode[]> { + const texts = nodes.map((node) => node.getContent(MetadataMode.EMBED)); + const embeddings = await this.embedModel.getTextEmbeddingsBatch(texts, { + logProgress: options?.logProgress, + }); + return nodes.map((node, i) => { + node.embedding = embeddings[i]; + return node; + }); + } + + /** + * Get embeddings for nodes and place them into the index. + * @param nodes + * @returns + */ + async buildIndexFromNodes( + nodes: BaseNode[], + options?: { logProgress?: boolean }, + ) { + // Check if the index already has nodes with the same hash + const newNodes = nodes.filter((node) => + Object.entries(this.indexStruct!.nodesDict).reduce( + (acc, [key, value]) => { + if (value.hash === node.hash) { + acc = false; + } + return acc; + }, + true, + ), + ); + + await this.insertNodes(newNodes, options); + } + + /** + * High level API: split documents, get embeddings, and build index. + * @param documents + * @param args + * @returns + */ + static async fromDocuments( + documents: Document[], + args: VectorIndexOptions = {}, + ): Promise<VectorStoreIndex> { + args.storageContext = + args.storageContext ?? (await storageContextFromDefaults({})); + args.serviceContext = args.serviceContext ?? serviceContextFromDefaults({}); + const docStore = args.storageContext.docStore; + + for (const doc of documents) { + docStore.setDocumentHash(doc.id_, doc.hash); + } + + if (args.logProgress) { + console.log("Using node parser on documents..."); + } + args.nodes = await runTransformations(documents, [ + args.serviceContext.nodeParser, + ]); + if (args.logProgress) { + console.log("Finished parsing documents."); + } + return await this.init(args); + } + + static async fromVectorStore( + vectorStore: VectorStore, + serviceContext: ServiceContext, + imageVectorStore?: VectorStore, + ) { + if (!vectorStore.storesText) { + throw new Error( + "Cannot initialize from a vector store that does not store text", + ); + } + + const storageContext = await storageContextFromDefaults({ + vectorStore, + imageVectorStore, + }); + + const index = await this.init({ + nodes: [], + storageContext, + serviceContext, + }); + + return index; + } + + asRetriever( + options?: Omit<VectorIndexRetrieverOptions, "index">, + ): VectorIndexRetriever { + return new VectorIndexRetriever({ index: this, ...options }); + } + + asQueryEngine(options?: { + retriever?: BaseRetriever; + responseSynthesizer?: BaseSynthesizer; + preFilters?: MetadataFilters; + nodePostprocessors?: BaseNodePostprocessor[]; + }): BaseQueryEngine & RetrieverQueryEngine { + const { retriever, responseSynthesizer } = options ?? {}; + return new RetrieverQueryEngine( + retriever ?? this.asRetriever(), + responseSynthesizer, + options?.preFilters, + options?.nodePostprocessors, + ); + } + + protected async insertNodesToStore( + vectorStore: VectorStore, + nodes: BaseNode[], + ): Promise<void> { + const newIds = await vectorStore.add(nodes); + + // NOTE: if the vector store doesn't store text, + // we need to add the nodes to the index struct and document store + // NOTE: if the vector store keeps text, + // we only need to add image and index nodes + for (let i = 0; i < nodes.length; ++i) { + const type = nodes[i].getType(); + if ( + !vectorStore.storesText || + type === ObjectType.INDEX || + type === ObjectType.IMAGE + ) { + const nodeWithoutEmbedding = nodes[i].clone(); + nodeWithoutEmbedding.embedding = undefined; + this.indexStruct.addNode(nodeWithoutEmbedding, newIds[i]); + await this.docStore.addDocuments([nodeWithoutEmbedding], true); + } + } + } + + async insertNodes( + nodes: BaseNode[], + options?: { logProgress?: boolean }, + ): Promise<void> { + if (!nodes || nodes.length === 0) { + return; + } + const { imageNodes, textNodes } = splitNodesByType(nodes); + if (imageNodes.length > 0) { + if (!this.imageVectorStore) { + throw new Error("Cannot insert image nodes without image vector store"); + } + const imageNodesWithEmbedding = await this.getImageNodeEmbeddingResults( + imageNodes, + options, + ); + await this.insertNodesToStore( + this.imageVectorStore, + imageNodesWithEmbedding, + ); + } + const embeddingResults = await this.getNodeEmbeddingResults( + textNodes, + options, + ); + await this.insertNodesToStore(this.vectorStore, embeddingResults); + await this.indexStore.addIndexStruct(this.indexStruct); + } + + async deleteRefDoc( + refDocId: string, + deleteFromDocStore: boolean = true, + ): Promise<void> { + await this.deleteRefDocFromStore(this.vectorStore, refDocId); + if (this.imageVectorStore) { + await this.deleteRefDocFromStore(this.imageVectorStore, refDocId); + } + + if (deleteFromDocStore) { + await this.docStore.deleteDocument(refDocId, false); + } + } + + protected async deleteRefDocFromStore( + vectorStore: VectorStore, + refDocId: string, + ): Promise<void> { + vectorStore.delete(refDocId); + + if (!vectorStore.storesText) { + const refDocInfo = await this.docStore.getRefDocInfo(refDocId); + + if (refDocInfo) { + for (const nodeId of refDocInfo.nodeIds) { + this.indexStruct.delete(nodeId); + vectorStore.delete(nodeId); + } + } + await this.indexStore.addIndexStruct(this.indexStruct); + } + } + + /** + * Calculates the embeddings for the given image nodes. + * + * @param nodes - An array of ImageNode objects representing the nodes for which embeddings are to be calculated. + * @param {Object} [options] - An optional object containing additional parameters. + * @param {boolean} [options.logProgress] - A boolean indicating whether to log progress to the console (useful for debugging). + */ + async getImageNodeEmbeddingResults( + nodes: ImageNode[], + options?: { logProgress?: boolean }, + ): Promise<ImageNode[]> { + if (!this.imageEmbedModel) { + return []; + } + + const nodesWithEmbeddings: ImageNode[] = []; + + for (let i = 0; i < nodes.length; ++i) { + const node = nodes[i]; + if (options?.logProgress) { + console.log(`Getting embedding for node ${i + 1}/${nodes.length}`); + } + node.embedding = await this.imageEmbedModel.getImageEmbedding(node.image); + nodesWithEmbeddings.push(node); + } + + return nodesWithEmbeddings; + } +} + +/** + * VectorIndexRetriever retrieves nodes from a VectorIndex. + */ + +export type VectorIndexRetrieverOptions = { + index: VectorStoreIndex; + similarityTopK?: number; + imageSimilarityTopK?: number; +}; + +export class VectorIndexRetriever implements BaseRetriever { + index: VectorStoreIndex; + similarityTopK: number; + imageSimilarityTopK: number; + private serviceContext: ServiceContext; + + constructor({ + index, + similarityTopK, + imageSimilarityTopK, + }: VectorIndexRetrieverOptions) { + this.index = index; + this.serviceContext = this.index.serviceContext; + this.similarityTopK = similarityTopK ?? DEFAULT_SIMILARITY_TOP_K; + this.imageSimilarityTopK = imageSimilarityTopK ?? DEFAULT_SIMILARITY_TOP_K; + } + + async retrieve( + query: string, + parentEvent?: Event, + preFilters?: MetadataFilters, + ): Promise<NodeWithScore[]> { + let nodesWithScores = await this.textRetrieve(query, preFilters); + nodesWithScores = nodesWithScores.concat( + await this.textToImageRetrieve(query, preFilters), + ); + this.sendEvent(query, nodesWithScores, parentEvent); + return nodesWithScores; + } + + protected async textRetrieve( + query: string, + preFilters?: MetadataFilters, + ): Promise<NodeWithScore[]> { + const options = {}; + const q = await this.buildVectorStoreQuery( + this.index.embedModel, + query, + this.similarityTopK, + preFilters, + ); + const result = await this.index.vectorStore.query(q, options); + return this.buildNodeListFromQueryResult(result); + } + + private async textToImageRetrieve( + query: string, + preFilters?: MetadataFilters, + ) { + if (!this.index.imageEmbedModel || !this.index.imageVectorStore) { + // no-op if image embedding and vector store are not set + return []; + } + const q = await this.buildVectorStoreQuery( + this.index.imageEmbedModel, + query, + this.imageSimilarityTopK, + preFilters, + ); + const result = await this.index.imageVectorStore.query(q, preFilters); + return this.buildNodeListFromQueryResult(result); + } + + protected sendEvent( + query: string, + nodesWithScores: NodeWithScore<Metadata>[], + parentEvent: Event | undefined, + ) { + if (this.serviceContext.callbackManager.onRetrieve) { + this.serviceContext.callbackManager.onRetrieve({ + query, + nodes: nodesWithScores, + event: globalsHelper.createEvent({ + parentEvent, + type: "retrieve", + }), + }); + } + } + + protected async buildVectorStoreQuery( + embedModel: BaseEmbedding, + query: string, + similarityTopK: number, + preFilters?: MetadataFilters, + ): Promise<VectorStoreQuery> { + const queryEmbedding = await embedModel.getQueryEmbedding(query); + + return { + queryEmbedding: queryEmbedding, + mode: VectorStoreQueryMode.DEFAULT, + similarityTopK: similarityTopK, + filters: preFilters ?? undefined, + }; + } + + protected buildNodeListFromQueryResult(result: VectorStoreQueryResult) { + const nodesWithScores: NodeWithScore[] = []; + for (let i = 0; i < result.ids.length; i++) { + const nodeFromResult = result.nodes?.[i]; + if (!this.index.indexStruct.nodesDict[result.ids[i]] && nodeFromResult) { + this.index.indexStruct.nodesDict[result.ids[i]] = nodeFromResult; + } + + const node = this.index.indexStruct.nodesDict[result.ids[i]]; + // XXX: Hack, if it's an image node, we reconstruct the image from the URL + // Alternative: Store image in doc store and retrieve it here + if (node instanceof ImageNode) { + node.image = node.getUrl(); + } + + nodesWithScores.push({ + node: node, + score: result.similarities[i], + }); + } + + return nodesWithScores; + } + + getServiceContext(): ServiceContext { + return this.serviceContext; + } +} diff --git a/packages/core/src/ingestion/IngestionCache.ts b/packages/core/src/ingestion/IngestionCache.ts index f35e3f413e5e4af93074848be293d8fb86ef5b2d..e60d4bdff8954f1ff248d5e4ddf94c6447cad260 100644 --- a/packages/core/src/ingestion/IngestionCache.ts +++ b/packages/core/src/ingestion/IngestionCache.ts @@ -1,9 +1,9 @@ -import { BaseNode, MetadataMode } from "../Node"; -import { createSHA256 } from "../env"; -import { docToJson, jsonToDoc } from "../storage/docStore/utils"; -import { SimpleKVStore } from "../storage/kvStore/SimpleKVStore"; -import { BaseKVStore } from "../storage/kvStore/types"; -import { TransformComponent } from "./types"; +import { createSHA256 } from "@llamaindex/env"; +import { BaseNode, MetadataMode } from "../Node.js"; +import { docToJson, jsonToDoc } from "../storage/docStore/utils.js"; +import { SimpleKVStore } from "../storage/kvStore/SimpleKVStore.js"; +import { BaseKVStore } from "../storage/kvStore/types.js"; +import { TransformComponent } from "./types.js"; const transformToJSON = (obj: TransformComponent) => { const seen: any[] = []; diff --git a/packages/core/src/ingestion/IngestionPipeline.ts b/packages/core/src/ingestion/IngestionPipeline.ts index 0a19de26ecb6c3a4120407905ce4da64929196ff..4f846cdb3e6e9da5a7fb2e8937152fa9bc43865a 100644 --- a/packages/core/src/ingestion/IngestionPipeline.ts +++ b/packages/core/src/ingestion/IngestionPipeline.ts @@ -1,9 +1,13 @@ -import { BaseNode, Document } from "../Node"; -import { BaseReader } from "../readers/type"; -import { BaseDocumentStore, VectorStore } from "../storage"; -import { IngestionCache, getTransformationHash } from "./IngestionCache"; -import { DocStoreStrategy, createDocStoreStrategy } from "./strategies"; -import { TransformComponent } from "./types"; +import { BaseNode, Document } from "../Node.js"; +import { BaseReader } from "../readers/type.js"; +import { BaseDocumentStore } from "../storage/docStore/types.js"; +import { VectorStore } from "../storage/vectorStore/types.js"; +import { IngestionCache, getTransformationHash } from "./IngestionCache.js"; +import { + DocStoreStrategy, + createDocStoreStrategy, +} from "./strategies/index.js"; +import { TransformComponent } from "./types.js"; type IngestionRunArgs = { documents?: Document[]; diff --git a/packages/core/src/ingestion/index.ts b/packages/core/src/ingestion/index.ts index 2e022852ab600faefbb4b6cbcd18b83d1e60cc09..4234d68d9df8c1e9806dcdf673dd292e7e99483a 100644 --- a/packages/core/src/ingestion/index.ts +++ b/packages/core/src/ingestion/index.ts @@ -1,2 +1,2 @@ -export * from "./IngestionPipeline"; -export * from "./types"; +export * from "./IngestionPipeline.js"; +export * from "./types.js"; diff --git a/packages/core/src/ingestion/strategies/DuplicatesStrategy.ts b/packages/core/src/ingestion/strategies/DuplicatesStrategy.ts index d820124fbd20c31a42d7bb9ae1bc84e95616711e..301d7f371fce45da68163bbe3554ef93001a0e30 100644 --- a/packages/core/src/ingestion/strategies/DuplicatesStrategy.ts +++ b/packages/core/src/ingestion/strategies/DuplicatesStrategy.ts @@ -1,6 +1,6 @@ -import { BaseNode } from "../../Node"; -import { BaseDocumentStore } from "../../storage"; -import { TransformComponent } from "../types"; +import { BaseNode } from "../../Node.js"; +import { BaseDocumentStore } from "../../storage/docStore/types.js"; +import { TransformComponent } from "../types.js"; /** * Handle doc store duplicates by checking all hashes. diff --git a/packages/core/src/ingestion/strategies/UpsertsAndDeleteStrategy.ts b/packages/core/src/ingestion/strategies/UpsertsAndDeleteStrategy.ts index ad5c933090433c4539c9a40cdaa1e80e24e65f98..d17b32e1407bc91cfff48c9a40304c9d3b941baf 100644 --- a/packages/core/src/ingestion/strategies/UpsertsAndDeleteStrategy.ts +++ b/packages/core/src/ingestion/strategies/UpsertsAndDeleteStrategy.ts @@ -1,6 +1,6 @@ -import { BaseNode } from "../../Node"; -import { BaseDocumentStore, VectorStore } from "../../storage"; -import { classify } from "./classify"; +import { BaseNode } from "../../Node.js"; +import { BaseDocumentStore, VectorStore } from "../../storage/index.js"; +import { classify } from "./classify.js"; /** * Handle docstore upserts by checking hashes and ids. diff --git a/packages/core/src/ingestion/strategies/UpsertsStrategy.ts b/packages/core/src/ingestion/strategies/UpsertsStrategy.ts index d60fc400854e341573e136bae20693ba5c4d6520..a89ee63b94f28b618dfa20b4a15a4454606f964b 100644 --- a/packages/core/src/ingestion/strategies/UpsertsStrategy.ts +++ b/packages/core/src/ingestion/strategies/UpsertsStrategy.ts @@ -1,7 +1,8 @@ -import { BaseNode } from "../../Node"; -import { BaseDocumentStore, VectorStore } from "../../storage"; -import { TransformComponent } from "../types"; -import { classify } from "./classify"; +import { BaseNode } from "../../Node.js"; +import { BaseDocumentStore } from "../../storage/docStore/types.js"; +import { VectorStore } from "../../storage/vectorStore/types.js"; +import { TransformComponent } from "../types.js"; +import { classify } from "./classify.js"; /** * Handles doc store upserts by checking hashes and ids. diff --git a/packages/core/src/ingestion/strategies/classify.ts b/packages/core/src/ingestion/strategies/classify.ts index a950aade3ef840443fa9a0bd9737212b5110c95c..7ed5d260eda4b01b15a2b36b835f1d35c734a9ef 100644 --- a/packages/core/src/ingestion/strategies/classify.ts +++ b/packages/core/src/ingestion/strategies/classify.ts @@ -1,5 +1,5 @@ -import { BaseNode } from "../../Node"; -import { BaseDocumentStore } from "../../storage"; +import { BaseNode } from "../../Node.js"; +import { BaseDocumentStore } from "../../storage/docStore/types.js"; export async function classify(docStore: BaseDocumentStore, nodes: BaseNode[]) { const existingDocIds = Object.values(await docStore.getAllDocumentHashes()); diff --git a/packages/core/src/ingestion/strategies/index.ts b/packages/core/src/ingestion/strategies/index.ts index e4e4f6a4dd1bf7a70d250b49ce27a2fa50f0befc..3c2f01a5a27621ab152c422c474df517cc2883f0 100644 --- a/packages/core/src/ingestion/strategies/index.ts +++ b/packages/core/src/ingestion/strategies/index.ts @@ -1,7 +1,8 @@ -import { BaseDocumentStore, VectorStore } from "../../storage"; -import { TransformComponent } from "../types"; -import { DuplicatesStrategy } from "./DuplicatesStrategy"; -import { UpsertsStrategy } from "./UpsertsStrategy"; +import { BaseDocumentStore } from "../../storage/docStore/types.js"; +import { VectorStore } from "../../storage/vectorStore/types.js"; +import { TransformComponent } from "../types.js"; +import { DuplicatesStrategy } from "./DuplicatesStrategy.js"; +import { UpsertsStrategy } from "./UpsertsStrategy.js"; export enum DocStoreStrategy { UPSERTS = "upserts", diff --git a/packages/core/src/ingestion/types.ts b/packages/core/src/ingestion/types.ts index 55012e57d2fabdde77adb2e5ae23cc017aac9847..6c6f40f5c9f5d954f46346d1474ee07b5280c64e 100644 --- a/packages/core/src/ingestion/types.ts +++ b/packages/core/src/ingestion/types.ts @@ -1,4 +1,4 @@ -import { BaseNode } from "../Node"; +import { BaseNode } from "../Node.js"; export interface TransformComponent { transform(nodes: BaseNode[], options?: any): Promise<BaseNode[]>; diff --git a/packages/core/src/llm/LLM.ts b/packages/core/src/llm/LLM.ts index 95ddd3ee785e39bc53c524ad0e41035bd07bb7a5..0b3f06a9904bbf25c2296b2f0b488f12e7801b50 100644 --- a/packages/core/src/llm/LLM.ts +++ b/packages/core/src/llm/LLM.ts @@ -6,28 +6,28 @@ import { EventType, OpenAIStreamToken, StreamCallbackResponse, -} from "../callbacks/CallbackManager"; +} from "../callbacks/CallbackManager.js"; -import { ChatCompletionMessageParam } from "openai/resources"; +import { ChatCompletionMessageParam } from "openai/resources/index.js"; import { LLMOptions } from "portkey-ai"; -import { Tokenizers, globalsHelper } from "../GlobalsHelper"; +import { Tokenizers, globalsHelper } from "../GlobalsHelper.js"; import { ANTHROPIC_AI_PROMPT, ANTHROPIC_HUMAN_PROMPT, AnthropicSession, getAnthropicSession, -} from "./anthropic"; +} from "./anthropic.js"; import { AzureOpenAIConfig, getAzureBaseUrl, getAzureConfigFromEnv, getAzureModel, shouldUseAzure, -} from "./azure"; -import { BaseLLM } from "./base"; -import { OpenAISession, getOpenAISession } from "./open_ai"; -import { PortkeySession, getPortkeySession } from "./portkey"; -import { ReplicateSession } from "./replicate_ai"; +} from "./azure.js"; +import { BaseLLM } from "./base.js"; +import { OpenAISession, getOpenAISession } from "./open_ai.js"; +import { PortkeySession, getPortkeySession } from "./portkey.js"; +import { ReplicateSession } from "./replicate_ai.js"; import { ChatMessage, ChatResponse, @@ -36,7 +36,7 @@ import { LLMChatParamsStreaming, LLMMetadata, MessageType, -} from "./types"; +} from "./types.js"; export const GPT4_MODELS = { "gpt-4": { contextWindow: 8192 }, diff --git a/packages/core/src/llm/base.ts b/packages/core/src/llm/base.ts index 574710b4cd9900e00d5d45ef85518101507d5869..088b6ae822af8de850eb45f650c5ebe7ba860850 100644 --- a/packages/core/src/llm/base.ts +++ b/packages/core/src/llm/base.ts @@ -9,8 +9,8 @@ import { LLMCompletionParamsNonStreaming, LLMCompletionParamsStreaming, LLMMetadata, -} from "./types"; -import { streamConverter } from "./utils"; +} from "./types.js"; +import { streamConverter } from "./utils.js"; export abstract class BaseLLM implements LLM { abstract metadata: LLMMetadata; diff --git a/packages/core/src/llm/fireworks.ts b/packages/core/src/llm/fireworks.ts index 89bd0796fb499165b6053ed10719b773633e4052..f6ad6b7132f1bf467c1fd67ce5cb88a21a013ec9 100644 --- a/packages/core/src/llm/fireworks.ts +++ b/packages/core/src/llm/fireworks.ts @@ -1,4 +1,4 @@ -import { OpenAI } from "./LLM"; +import { OpenAI } from "./LLM.js"; export class FireworksLLM extends OpenAI { constructor(init?: Partial<OpenAI>) { diff --git a/packages/core/src/llm/index.ts b/packages/core/src/llm/index.ts index 6b62b740c11fa569ab10bb3c807ec434b6b77dbd..10a2dbc1a8f9a8a231d033ea26c76649b48cda87 100644 --- a/packages/core/src/llm/index.ts +++ b/packages/core/src/llm/index.ts @@ -1,11 +1,11 @@ -export * from "./LLM"; -export { FireworksLLM } from "./fireworks"; +export * from "./LLM.js"; +export { FireworksLLM } from "./fireworks.js"; export { ALL_AVAILABLE_MISTRAL_MODELS, MistralAI, MistralAISession, -} from "./mistral"; -export { Ollama } from "./ollama"; -export * from "./open_ai"; -export { TogetherLLM } from "./together"; -export * from "./types"; +} from "./mistral.js"; +export { Ollama } from "./ollama.js"; +export * from "./open_ai.js"; +export { TogetherLLM } from "./together.js"; +export * from "./types.js"; diff --git a/packages/core/src/llm/mistral.ts b/packages/core/src/llm/mistral.ts index 61b979b740a9cf6aade2306cc825a47dcd23dd74..c4aa37368d2f2b2f77506740c6f0b9a82f74661d 100644 --- a/packages/core/src/llm/mistral.ts +++ b/packages/core/src/llm/mistral.ts @@ -3,15 +3,15 @@ import { Event, EventType, StreamCallbackResponse, -} from "../callbacks/CallbackManager"; -import { BaseLLM } from "./base"; +} from "../callbacks/CallbackManager.js"; +import { BaseLLM } from "./base.js"; import { ChatMessage, ChatResponse, ChatResponseChunk, LLMChatParamsNonStreaming, LLMChatParamsStreaming, -} from "./types"; +} from "./types.js"; export const ALL_AVAILABLE_MISTRAL_MODELS = { "mistral-tiny": { contextWindow: 32000 }, diff --git a/packages/core/src/llm/ollama.ts b/packages/core/src/llm/ollama.ts index 4f292290875398bc40764e248355feaa1f81482d..070320932281cf2b7ce2c85d58b8c4f2ab8a35f3 100644 --- a/packages/core/src/llm/ollama.ts +++ b/packages/core/src/llm/ollama.ts @@ -1,6 +1,6 @@ -import { CallbackManager, Event } from "../callbacks/CallbackManager"; -import { BaseEmbedding } from "../embeddings/types"; -import { ok } from "../env"; +import { ok } from "@llamaindex/env"; +import { CallbackManager, Event } from "../callbacks/CallbackManager.js"; +import { BaseEmbedding } from "../embeddings/types.js"; import { ChatMessage, ChatResponse, @@ -12,7 +12,7 @@ import { LLMCompletionParamsNonStreaming, LLMCompletionParamsStreaming, LLMMetadata, -} from "./types"; +} from "./types.js"; const messageAccessor = (data: any): ChatResponseChunk => { return { diff --git a/packages/core/src/llm/together.ts b/packages/core/src/llm/together.ts index 94928e251b023c4e41508c8e6117947abe27e86b..96df3cef870e7fda19e419d87bcd18db0a9a37bc 100644 --- a/packages/core/src/llm/together.ts +++ b/packages/core/src/llm/together.ts @@ -1,4 +1,4 @@ -import { OpenAI } from "./LLM"; +import { OpenAI } from "./LLM.js"; export class TogetherLLM extends OpenAI { constructor(init?: Partial<OpenAI>) { diff --git a/packages/core/src/llm/types.ts b/packages/core/src/llm/types.ts index 305769f83d22f893fd6ea3aec411ccc0da927c96..f5bfa56694171dd3c2830f40d8806a5062062fda 100644 --- a/packages/core/src/llm/types.ts +++ b/packages/core/src/llm/types.ts @@ -1,5 +1,5 @@ -import { Tokenizers } from "../GlobalsHelper"; -import { Event } from "../callbacks/CallbackManager"; +import { Tokenizers } from "../GlobalsHelper.js"; +import { Event } from "../callbacks/CallbackManager.js"; /** * Unified language model interface diff --git a/packages/core/src/llm/utils.ts b/packages/core/src/llm/utils.ts index 39bf27ba329de416a561cafcafa618a5ace946de..b6c9869902e93ea5bb04580c2d4111a779e4ffb0 100644 --- a/packages/core/src/llm/utils.ts +++ b/packages/core/src/llm/utils.ts @@ -1,4 +1,4 @@ -import { MessageContent, MessageContentDetail } from "./types"; +import { MessageContent, MessageContentDetail } from "./types.js"; export async function* streamConverter<S, D>( stream: AsyncIterable<S>, diff --git a/packages/core/src/memory/ChatMemoryBuffer.ts b/packages/core/src/memory/ChatMemoryBuffer.ts index 72036336b5394e98fec322adf72270b247a788da..32cae371e1956e476cc66ee751f28d002cbca53e 100644 --- a/packages/core/src/memory/ChatMemoryBuffer.ts +++ b/packages/core/src/memory/ChatMemoryBuffer.ts @@ -1,7 +1,7 @@ -import { ChatMessage } from "../llm"; -import { SimpleChatStore } from "../storage/chatStore/SimpleChatStore"; -import { BaseChatStore } from "../storage/chatStore/types"; -import { BaseMemory } from "./types"; +import { ChatMessage } from "../llm/index.js"; +import { SimpleChatStore } from "../storage/chatStore/SimpleChatStore.js"; +import { BaseChatStore } from "../storage/chatStore/types.js"; +import { BaseMemory } from "./types.js"; type ChatMemoryBufferParams = { tokenLimit?: number; diff --git a/packages/core/src/memory/types.ts b/packages/core/src/memory/types.ts index 2222599abb71d73c4f2355982ab07b005762fc90..93d38496deafdea2b626af8dade0c1cf9d376c75 100644 --- a/packages/core/src/memory/types.ts +++ b/packages/core/src/memory/types.ts @@ -1,7 +1,7 @@ -import { ChatMessage } from "../llm"; +import { ChatMessage } from "../llm/index.js"; export interface BaseMemory { - /* + /* Get chat history. */ get(...args: any): ChatMessage[]; diff --git a/packages/core/src/nodeParsers/MarkdownNodeParser.ts b/packages/core/src/nodeParsers/MarkdownNodeParser.ts index 249bd12c8e5e4549a33bf19adbd92f113c6c4cc3..a6fbb2f772f3bcddf77fb0b54e0a7bd991001c25 100644 --- a/packages/core/src/nodeParsers/MarkdownNodeParser.ts +++ b/packages/core/src/nodeParsers/MarkdownNodeParser.ts @@ -1,5 +1,5 @@ -import { BaseNode, Metadata, MetadataMode, TextNode } from "../Node"; -import { NodeParser } from "./types"; +import { BaseNode, Metadata, MetadataMode, TextNode } from "../Node.js"; +import { NodeParser } from "./types.js"; export class MarkdownNodeParser implements NodeParser { includeMetadata: boolean; diff --git a/packages/core/src/nodeParsers/SentenceWindowNodeParser.ts b/packages/core/src/nodeParsers/SentenceWindowNodeParser.ts index aca0318732df5914c51688cb9edb750d8f3691bb..ac7009a1983148535985009142ebb5f2d9c5886a 100644 --- a/packages/core/src/nodeParsers/SentenceWindowNodeParser.ts +++ b/packages/core/src/nodeParsers/SentenceWindowNodeParser.ts @@ -1,7 +1,7 @@ -import { BaseNode } from "../Node"; -import { SentenceSplitter } from "../TextSplitter"; -import { NodeParser } from "./types"; -import { getNodesFromDocument } from "./utils"; +import { BaseNode } from "../Node.js"; +import { SentenceSplitter } from "../TextSplitter.js"; +import { NodeParser } from "./types.js"; +import { getNodesFromDocument } from "./utils.js"; export const DEFAULT_WINDOW_SIZE = 3; export const DEFAULT_WINDOW_METADATA_KEY = "window"; diff --git a/packages/core/src/nodeParsers/SimpleNodeParser.ts b/packages/core/src/nodeParsers/SimpleNodeParser.ts index baa5cc20e2b9f2d29a0cf25f91523e4b4d26b397..8418c4e87a75ab9bee4fd884c8b80b166dec7b16 100644 --- a/packages/core/src/nodeParsers/SimpleNodeParser.ts +++ b/packages/core/src/nodeParsers/SimpleNodeParser.ts @@ -1,8 +1,8 @@ -import { BaseNode } from "../Node"; -import { SentenceSplitter } from "../TextSplitter"; -import { DEFAULT_CHUNK_OVERLAP, DEFAULT_CHUNK_SIZE } from "../constants"; -import { NodeParser } from "./types"; -import { getNodesFromDocument } from "./utils"; +import { BaseNode } from "../Node.js"; +import { SentenceSplitter } from "../TextSplitter.js"; +import { DEFAULT_CHUNK_OVERLAP, DEFAULT_CHUNK_SIZE } from "../constants.js"; +import { NodeParser } from "./types.js"; +import { getNodesFromDocument } from "./utils.js"; /** * SimpleNodeParser is the default NodeParser. It splits documents into TextNodes using a splitter, by default SentenceSplitter diff --git a/packages/core/src/nodeParsers/index.ts b/packages/core/src/nodeParsers/index.ts index e1ef8f7c5ced0bebb2715bdf9d8a3a317ea28db2..083fc4a55bea2d26811d781b8dc0982d7abf8935 100644 --- a/packages/core/src/nodeParsers/index.ts +++ b/packages/core/src/nodeParsers/index.ts @@ -1,4 +1,4 @@ -export * from "./MarkdownNodeParser"; -export * from "./SentenceWindowNodeParser"; -export * from "./SimpleNodeParser"; -export * from "./types"; +export * from "./MarkdownNodeParser.js"; +export * from "./SentenceWindowNodeParser.js"; +export * from "./SimpleNodeParser.js"; +export * from "./types.js"; diff --git a/packages/core/src/nodeParsers/types.ts b/packages/core/src/nodeParsers/types.ts index 47375212d5330fa4f788a7f20cdd6d97c692ac57..ef894f563c5877bf8158dd248de9473bbb48622d 100644 --- a/packages/core/src/nodeParsers/types.ts +++ b/packages/core/src/nodeParsers/types.ts @@ -1,5 +1,5 @@ -import { BaseNode } from "../Node"; -import { TransformComponent } from "../ingestion"; +import { BaseNode } from "../Node.js"; +import { TransformComponent } from "../ingestion/types.js"; /** * A NodeParser generates Nodes from Documents diff --git a/packages/core/src/nodeParsers/utils.ts b/packages/core/src/nodeParsers/utils.ts index c6e325ba7ef7ef74b1ddc7b2eab0f3af45191694..235401ea412b2a5db84fb6632291057726f6df39 100644 --- a/packages/core/src/nodeParsers/utils.ts +++ b/packages/core/src/nodeParsers/utils.ts @@ -5,7 +5,7 @@ import { ImageDocument, NodeRelationship, TextNode, -} from "../Node"; +} from "../Node.js"; type TextSplitter = (s: string) => string[]; diff --git a/packages/core/src/objects/base.ts b/packages/core/src/objects/base.ts index db39e2f92a7fec6aa6345db85ed126d4bb1f9bda..44088ca624a77cd44ad0f474ef09edd564d1f262 100644 --- a/packages/core/src/objects/base.ts +++ b/packages/core/src/objects/base.ts @@ -1,7 +1,7 @@ -import { BaseNode, Metadata, TextNode } from "../Node"; -import { BaseRetriever } from "../Retriever"; -import { VectorStoreIndex } from "../indices"; -import { BaseTool } from "../types"; +import { BaseNode, Metadata, TextNode } from "../Node.js"; +import { BaseRetriever } from "../Retriever.js"; +import { VectorStoreIndex } from "../indices/index.js"; +import { BaseTool } from "../types.js"; // Assuming that necessary interfaces and classes (like OT, TextNode, BaseNode, etc.) are defined elsewhere // Import statements (e.g., for TextNode, BaseNode) should be added based on your project's structure diff --git a/packages/core/src/objects/index.ts b/packages/core/src/objects/index.ts index 955fdd14398fe62365b8ce88feeb7cac6272d3e3..261d80f0284b88d9d16ec51a8edf8c312f708921 100644 --- a/packages/core/src/objects/index.ts +++ b/packages/core/src/objects/index.ts @@ -1 +1 @@ -export * from "./base"; +export * from "./base.js"; diff --git a/packages/core/src/outputParsers/selectors.ts b/packages/core/src/outputParsers/selectors.ts index 9c0af07e271d3c54e227bdcf688886e02996dabd..2d89882ae103103d1e2f49da891aae71364d881c 100644 --- a/packages/core/src/outputParsers/selectors.ts +++ b/packages/core/src/outputParsers/selectors.ts @@ -1,5 +1,5 @@ -import { parseJsonMarkdown } from "../OutputParser"; -import { BaseOutputParser, StructuredOutput } from "../types"; +import { parseJsonMarkdown } from "../OutputParser.js"; +import { BaseOutputParser, StructuredOutput } from "../types.js"; export type Answer = { choice: number; diff --git a/packages/core/src/postprocessors/MetadataReplacementPostProcessor.ts b/packages/core/src/postprocessors/MetadataReplacementPostProcessor.ts index c15e3971801b45ca37f7ee9d1e4e46568b8ccc23..13440807514533ceb6f858aaa71c42f5884d2c15 100644 --- a/packages/core/src/postprocessors/MetadataReplacementPostProcessor.ts +++ b/packages/core/src/postprocessors/MetadataReplacementPostProcessor.ts @@ -1,5 +1,5 @@ -import { MetadataMode, NodeWithScore } from "../Node"; -import { BaseNodePostprocessor } from "./types"; +import { MetadataMode, NodeWithScore } from "../Node.js"; +import { BaseNodePostprocessor } from "./types.js"; export class MetadataReplacementPostProcessor implements BaseNodePostprocessor { targetMetadataKey: string; diff --git a/packages/core/src/postprocessors/SimilarityPostprocessor.ts b/packages/core/src/postprocessors/SimilarityPostprocessor.ts index 413fa922952a431be338cc0a45b19543347e4db4..60db9501e2b819161ecf3a553621e9551ebc86fc 100644 --- a/packages/core/src/postprocessors/SimilarityPostprocessor.ts +++ b/packages/core/src/postprocessors/SimilarityPostprocessor.ts @@ -1,5 +1,5 @@ -import { NodeWithScore } from "../Node"; -import { BaseNodePostprocessor } from "./types"; +import { NodeWithScore } from "../Node.js"; +import { BaseNodePostprocessor } from "./types.js"; export class SimilarityPostprocessor implements BaseNodePostprocessor { similarityCutoff?: number; diff --git a/packages/core/src/postprocessors/index.ts b/packages/core/src/postprocessors/index.ts index 3e52ee40c1ca93b19e545a95ec251008e96d414d..0cf848c05287e2ab23c738b46afcac0f98100106 100644 --- a/packages/core/src/postprocessors/index.ts +++ b/packages/core/src/postprocessors/index.ts @@ -1,4 +1,4 @@ -export * from "./MetadataReplacementPostProcessor"; -export * from "./SimilarityPostprocessor"; -export * from "./rerankers"; -export * from "./types"; +export * from "./MetadataReplacementPostProcessor.js"; +export * from "./SimilarityPostprocessor.js"; +export * from "./rerankers/index.js"; +export * from "./types.js"; diff --git a/packages/core/src/postprocessors/rerankers/CohereRerank.ts b/packages/core/src/postprocessors/rerankers/CohereRerank.ts index 44d4e9f7a2d29f1fb82cb18c51975fcb48112240..b10579e160ca800d76c688c2ce215ba06cd70a74 100644 --- a/packages/core/src/postprocessors/rerankers/CohereRerank.ts +++ b/packages/core/src/postprocessors/rerankers/CohereRerank.ts @@ -1,7 +1,7 @@ import { CohereClient } from "cohere-ai"; -import { MetadataMode, NodeWithScore } from "../../Node"; -import { BaseNodePostprocessor } from "../types"; +import { MetadataMode, NodeWithScore } from "../../Node.js"; +import { BaseNodePostprocessor } from "../types.js"; type CohereRerankOptions = { topN?: number; diff --git a/packages/core/src/postprocessors/rerankers/index.ts b/packages/core/src/postprocessors/rerankers/index.ts index 8ef81bdb87e098e191e8c1e8cbedcd7a7822ddff..d0e25d18237751ec6413f23dd972a85ae7b23401 100644 --- a/packages/core/src/postprocessors/rerankers/index.ts +++ b/packages/core/src/postprocessors/rerankers/index.ts @@ -1 +1 @@ -export * from "./CohereRerank"; +export * from "./CohereRerank.js"; diff --git a/packages/core/src/postprocessors/types.ts b/packages/core/src/postprocessors/types.ts index deedc0ceeedff5f82dd850cb1ea90115c591e935..7a0c0617b259c1296d0f61c57974ad4f04c7ba7a 100644 --- a/packages/core/src/postprocessors/types.ts +++ b/packages/core/src/postprocessors/types.ts @@ -1,4 +1,4 @@ -import { NodeWithScore } from "../Node"; +import { NodeWithScore } from "../Node.js"; export interface BaseNodePostprocessor { /** diff --git a/packages/core/src/prompts/index.ts b/packages/core/src/prompts/index.ts index fb7823314cd60123bade0d4203083942dc1be078..958a2b0f3c3b5e5db9a30d5e8adfff4ad03f11ea 100644 --- a/packages/core/src/prompts/index.ts +++ b/packages/core/src/prompts/index.ts @@ -1 +1 @@ -export * from "./Mixin"; +export * from "./Mixin.js"; diff --git a/packages/core/src/readers/AssemblyAIReader.ts b/packages/core/src/readers/AssemblyAIReader.ts index 4e45ba866c34006d8f6f75322aa40ed18ed7333b..8418d82df4570c7d38eee8dbe6b2d871b1e097af 100644 --- a/packages/core/src/readers/AssemblyAIReader.ts +++ b/packages/core/src/readers/AssemblyAIReader.ts @@ -6,8 +6,8 @@ import { TranscriptParagraph, TranscriptSentence, } from "assemblyai"; -import { Document } from "../Node"; -import { BaseReader } from "./type"; +import { Document } from "../Node.js"; +import { BaseReader } from "./type.js"; type AssemblyAIOptions = Partial<BaseServiceParams>; diff --git a/packages/core/src/readers/CSVReader.ts b/packages/core/src/readers/CSVReader.ts index 6645da0184620ae6e802255e4b50d2eb4f030780..949de974fe3f3d89597e5788bfe08318728b4d46 100644 --- a/packages/core/src/readers/CSVReader.ts +++ b/packages/core/src/readers/CSVReader.ts @@ -1,8 +1,8 @@ +import { defaultFS } from "@llamaindex/env"; +import { GenericFileSystem } from "@llamaindex/env/type"; import Papa, { ParseConfig } from "papaparse"; -import { Document } from "../Node"; -import { defaultFS } from "../env"; -import { GenericFileSystem } from "../storage/FileSystem"; -import { FileReader } from "./type"; +import { Document } from "../Node.js"; +import { FileReader } from "./type.js"; /** * papaparse-based csv parser diff --git a/packages/core/src/readers/DocxReader.ts b/packages/core/src/readers/DocxReader.ts index 1dc2fe2d44d4616bf345b3669a5ff557fd48fde1..0af3e33e6d1abe55ad11bb2b9cdfebecf12cafd4 100644 --- a/packages/core/src/readers/DocxReader.ts +++ b/packages/core/src/readers/DocxReader.ts @@ -1,8 +1,8 @@ +import { defaultFS } from "@llamaindex/env"; +import { GenericFileSystem } from "@llamaindex/env/type"; import mammoth from "mammoth"; -import { Document } from "../Node"; -import { defaultFS } from "../env"; -import { GenericFileSystem } from "../storage/FileSystem"; -import { FileReader } from "./type"; +import { Document } from "../Node.js"; +import { FileReader } from "./type.js"; export class DocxReader implements FileReader { /** DocxParser */ diff --git a/packages/core/src/readers/HTMLReader.ts b/packages/core/src/readers/HTMLReader.ts index df52a43d995b0b6b99acf005c42dee4fbf0ee697..ce53287f3340b9ebcf24c990409c47f353e7d6ef 100644 --- a/packages/core/src/readers/HTMLReader.ts +++ b/packages/core/src/readers/HTMLReader.ts @@ -1,7 +1,7 @@ -import { Document } from "../Node"; -import { defaultFS } from "../env"; -import { GenericFileSystem } from "../storage/FileSystem"; -import { FileReader } from "./type"; +import { defaultFS } from "@llamaindex/env"; +import { GenericFileSystem } from "@llamaindex/env/type"; +import { Document } from "../Node.js"; +import { FileReader } from "./type.js"; /** * Extract the significant text from an arbitrary HTML document. diff --git a/packages/core/src/readers/ImageReader.ts b/packages/core/src/readers/ImageReader.ts index 9a482376adf011aac5f939be6bcfbf018a615f0e..ea653697d6f9f95a82c6c567fcbeb3c7aee4bb9e 100644 --- a/packages/core/src/readers/ImageReader.ts +++ b/packages/core/src/readers/ImageReader.ts @@ -1,7 +1,7 @@ -import { Document, ImageDocument } from "../Node"; -import { defaultFS } from "../env"; -import { GenericFileSystem } from "../storage/FileSystem"; -import { FileReader } from "./type"; +import { defaultFS } from "@llamaindex/env"; +import { GenericFileSystem } from "@llamaindex/env/type"; +import { Document, ImageDocument } from "../Node.js"; +import { FileReader } from "./type.js"; /** * Reads the content of an image file into a Document object (which stores the image file as a Blob). diff --git a/packages/core/src/readers/LlamaParseReader.ts b/packages/core/src/readers/LlamaParseReader.ts index 8055f555a8635da3bd0eaf828b61185390adfa14..3f671e710f34c169a24f8a224a0268c178678f46 100644 --- a/packages/core/src/readers/LlamaParseReader.ts +++ b/packages/core/src/readers/LlamaParseReader.ts @@ -1,7 +1,7 @@ -import { Document } from "../Node"; -import { defaultFS } from "../env"; -import { GenericFileSystem } from "../storage/FileSystem"; -import { FileReader } from "./type"; +import { defaultFS } from "@llamaindex/env"; +import { GenericFileSystem } from "@llamaindex/env/type"; +import { Document } from "../Node.js"; +import { FileReader } from "./type.js"; type ResultType = "text" | "markdown"; diff --git a/packages/core/src/readers/MarkdownReader.ts b/packages/core/src/readers/MarkdownReader.ts index 907c78bbf5f278e49883acc9f5f6a4496ede88c1..7b0ffdbaf49609b0b2479fd8bc818b66add223ef 100644 --- a/packages/core/src/readers/MarkdownReader.ts +++ b/packages/core/src/readers/MarkdownReader.ts @@ -1,7 +1,7 @@ -import { Document } from "../Node"; -import { defaultFS } from "../env"; -import { GenericFileSystem } from "../storage"; -import { FileReader } from "./type"; +import { defaultFS } from "@llamaindex/env"; +import { GenericFileSystem } from "@llamaindex/env/type"; +import { Document } from "../Node.js"; +import { FileReader } from "./type.js"; type MarkdownTuple = [string | null, string]; diff --git a/packages/core/src/readers/NotionReader.ts b/packages/core/src/readers/NotionReader.ts index 30df5e6e54c0f4e68912d98c914540a0b408209d..7422e42b1181d0d11e9b352cdab9293cbf4bbe69 100644 --- a/packages/core/src/readers/NotionReader.ts +++ b/packages/core/src/readers/NotionReader.ts @@ -1,7 +1,7 @@ import { Client } from "@notionhq/client"; import { crawler, Crawler, Pages, pageToString } from "notion-md-crawler"; -import { Document } from "../Node"; -import { BaseReader } from "./type"; +import { Document } from "../Node.js"; +import { BaseReader } from "./type.js"; type OptionalSerializers = Parameters<Crawler>[number]["serializers"]; diff --git a/packages/core/src/readers/PDFReader.ts b/packages/core/src/readers/PDFReader.ts index d900dc1c4487d5ab75708d438d05b7f64bac8a5d..0df5ebf7e620df611eb0797d0ce0849965beb021 100644 --- a/packages/core/src/readers/PDFReader.ts +++ b/packages/core/src/readers/PDFReader.ts @@ -1,7 +1,7 @@ -import { Document } from "../Node"; -import { createSHA256, defaultFS } from "../env"; -import { GenericFileSystem } from "../storage/FileSystem"; -import { BaseReader } from "./type"; +import { createSHA256, defaultFS } from "@llamaindex/env"; +import { GenericFileSystem } from "@llamaindex/env/type"; +import { Document } from "../Node.js"; +import { BaseReader } from "./type.js"; /** * Read the text of a PDF diff --git a/packages/core/src/readers/SimpleDirectoryReader.ts b/packages/core/src/readers/SimpleDirectoryReader.ts index 81ab8fe79dd7bd2ee27faf0e9ba5f84f90f0db43..6518c211a230b09e2fe4ef4f6eff5b91073cd2d6 100644 --- a/packages/core/src/readers/SimpleDirectoryReader.ts +++ b/packages/core/src/readers/SimpleDirectoryReader.ts @@ -1,13 +1,14 @@ -import { Document } from "../Node"; -import { defaultFS, path } from "../env"; -import { CompleteFileSystem, walk } from "../storage/FileSystem"; -import { PapaCSVReader } from "./CSVReader"; -import { DocxReader } from "./DocxReader"; -import { HTMLReader } from "./HTMLReader"; -import { ImageReader } from "./ImageReader"; -import { MarkdownReader } from "./MarkdownReader"; -import { PDFReader } from "./PDFReader"; -import { BaseReader } from "./type"; +import { defaultFS, path } from "@llamaindex/env"; +import { CompleteFileSystem } from "@llamaindex/env/type"; +import { Document } from "../Node.js"; +import { walk } from "../storage/FileSystem.js"; +import { PapaCSVReader } from "./CSVReader.js"; +import { DocxReader } from "./DocxReader.js"; +import { HTMLReader } from "./HTMLReader.js"; +import { ImageReader } from "./ImageReader.js"; +import { MarkdownReader } from "./MarkdownReader.js"; +import { PDFReader } from "./PDFReader.js"; +import { BaseReader } from "./type.js"; type ReaderCallback = ( category: "file" | "directory", diff --git a/packages/core/src/readers/SimpleMongoReader.ts b/packages/core/src/readers/SimpleMongoReader.ts index 885a62764a4f72830a73f7ae9324dd369487a293..f015868ac49406e67fa9e5301836c437dfd9a0e0 100644 --- a/packages/core/src/readers/SimpleMongoReader.ts +++ b/packages/core/src/readers/SimpleMongoReader.ts @@ -1,6 +1,6 @@ import { MongoClient } from "mongodb"; -import { Document, Metadata } from "../Node"; -import { BaseReader } from "./type"; +import { Document, Metadata } from "../Node.js"; +import { BaseReader } from "./type.js"; /** * Read in from MongoDB diff --git a/packages/core/src/readers/index.ts b/packages/core/src/readers/index.ts index fc3411a17622b83660050591749898a29c416057..db782d897b947f764443cd3b0446d09aac205d9f 100644 --- a/packages/core/src/readers/index.ts +++ b/packages/core/src/readers/index.ts @@ -1,12 +1,12 @@ -export * from "./AssemblyAIReader"; -export * from "./CSVReader"; -export * from "./DocxReader"; -export * from "./HTMLReader"; -export * from "./ImageReader"; -export * from "./LlamaParseReader"; -export * from "./MarkdownReader"; -export * from "./NotionReader"; -export * from "./PDFReader"; -export * from "./SimpleDirectoryReader"; -export * from "./SimpleMongoReader"; -export * from "./type"; +export * from "./AssemblyAIReader.js"; +export * from "./CSVReader.js"; +export * from "./DocxReader.js"; +export * from "./HTMLReader.js"; +export * from "./ImageReader.js"; +export * from "./LlamaParseReader.js"; +export * from "./MarkdownReader.js"; +export * from "./NotionReader.js"; +export * from "./PDFReader.js"; +export * from "./SimpleDirectoryReader.js"; +export * from "./SimpleMongoReader.js"; +export * from "./type.js"; diff --git a/packages/core/src/readers/type.ts b/packages/core/src/readers/type.ts index 8615240eee8ff8dd7bb91655f62dab9abb8fe306..14ac3b2f4489d315b7cb1bc40e99077109bcfe01 100644 --- a/packages/core/src/readers/type.ts +++ b/packages/core/src/readers/type.ts @@ -1,5 +1,5 @@ -import { Document } from "../Node"; -import { CompleteFileSystem } from "../storage"; +import { CompleteFileSystem } from "@llamaindex/env/type"; +import { Document } from "../Node.js"; /** * A reader takes imports data into Document objects. diff --git a/packages/core/src/selectors/base.ts b/packages/core/src/selectors/base.ts index 3268d55e1f0e61f6271732712a9cab3cedc7e065..f6992533e86a3b702ef39d3a3bad74dd310947e0 100644 --- a/packages/core/src/selectors/base.ts +++ b/packages/core/src/selectors/base.ts @@ -1,5 +1,5 @@ -import { PromptMixin } from "../prompts"; -import { QueryBundle, ToolMetadataOnlyDescription } from "../types"; +import { PromptMixin } from "../prompts/Mixin.js"; +import { QueryBundle, ToolMetadataOnlyDescription } from "../types.js"; export interface SingleSelection { index: number; diff --git a/packages/core/src/selectors/index.ts b/packages/core/src/selectors/index.ts index c3dd0aaf7badf6809b04ef7c7cb51e303e1514af..432c81dcfcb268d49dcc5c024e33ffdeb75e34bb 100644 --- a/packages/core/src/selectors/index.ts +++ b/packages/core/src/selectors/index.ts @@ -1,3 +1,3 @@ -export * from "./base"; -export * from "./llmSelectors"; -export * from "./utils"; +export * from "./base.js"; +export * from "./llmSelectors.js"; +export * from "./utils.js"; diff --git a/packages/core/src/selectors/llmSelectors.ts b/packages/core/src/selectors/llmSelectors.ts index c1a51c6e168bc6ade31bfb22ef0b33ae840f329d..bdc689941e5ce9c5581b36ecf689123ca8ae7fb7 100644 --- a/packages/core/src/selectors/llmSelectors.ts +++ b/packages/core/src/selectors/llmSelectors.ts @@ -1,18 +1,18 @@ -import { LLM } from "../llm"; -import { Answer, SelectionOutputParser } from "../outputParsers/selectors"; +import { LLM } from "../llm/index.js"; +import { Answer, SelectionOutputParser } from "../outputParsers/selectors.js"; import { BaseOutputParser, QueryBundle, StructuredOutput, ToolMetadataOnlyDescription, -} from "../types"; -import { BaseSelector, SelectorResult } from "./base"; +} from "../types.js"; +import { BaseSelector, SelectorResult } from "./base.js"; import { MultiSelectPrompt, SingleSelectPrompt, defaultMultiSelectPrompt, defaultSingleSelectPrompt, -} from "./prompts"; +} from "./prompts.js"; function buildChoicesText(choices: ToolMetadataOnlyDescription[]): string { const texts: string[] = []; diff --git a/packages/core/src/selectors/utils.ts b/packages/core/src/selectors/utils.ts index 08b2226e165f07e4b1b62b727aa5259754454e61..2b6f8bde9f163f37c63979b86c3c277ff814556f 100644 --- a/packages/core/src/selectors/utils.ts +++ b/packages/core/src/selectors/utils.ts @@ -1,6 +1,6 @@ -import { ServiceContext } from "../ServiceContext"; -import { BaseSelector } from "./base"; -import { LLMMultiSelector, LLMSingleSelector } from "./llmSelectors"; +import { ServiceContext } from "../ServiceContext.js"; +import { BaseSelector } from "./base.js"; +import { LLMMultiSelector, LLMSingleSelector } from "./llmSelectors.js"; export const getSelectorFromContext = ( serviceContext: ServiceContext, diff --git a/packages/core/src/storage/FileSystem.ts b/packages/core/src/storage/FileSystem.ts index cf58573da94c7d2c456298deadaa9e32536dc2ef..cdafd3147b13b52e643ab1f7a9ccce09a5d505cc 100644 --- a/packages/core/src/storage/FileSystem.ts +++ b/packages/core/src/storage/FileSystem.ts @@ -1,83 +1,4 @@ -import _ from "lodash"; - -/** - * A filesystem interface that is meant to be compatible with - * the 'fs' module from Node.js. - * Allows for the use of similar inteface implementation on - * browsers. - */ -export type GenericFileSystem = { - writeFile(path: string, content: string): Promise<void>; - /** - * Reads a file and returns its content as a raw buffer. - */ - readRawFile(path: string): Promise<Buffer>; - /** - * Reads a file and returns its content as an utf-8 string. - */ - readFile(path: string): Promise<string>; - access(path: string): Promise<void>; - mkdir( - path: string, - options: { - recursive: boolean; - }, - ): Promise<string | undefined>; - mkdir(path: string): Promise<void>; -}; - -export type WalkableFileSystem = { - readdir(path: string): Promise<string[]>; - stat(path: string): Promise<any>; -}; - -export type CompleteFileSystem = GenericFileSystem & WalkableFileSystem; - -/** - * A filesystem implementation that stores files in memory. - */ -export class InMemoryFileSystem implements CompleteFileSystem { - private files: Record<string, any> = {}; - - async writeFile( - path: string, - content: string, - options?: unknown, - ): Promise<void> { - this.files[path] = _.cloneDeep(content); - } - - async readFile(path: string): Promise<string> { - if (!(path in this.files)) { - throw new Error(`File ${path} does not exist`); - } - return _.cloneDeep(this.files[path]); - } - - async access(path: string): Promise<void> { - if (!(path in this.files)) { - throw new Error(`File ${path} does not exist`); - } - } - - async mkdir(path: string) { - this.files[path] = _.get(this.files, path, null); - return undefined; - } - - async readdir(path: string): Promise<string[]> { - throw new Error("Not implemented"); - } - - async stat(path: string): Promise<any> { - throw new Error("Not implemented"); - } - - async readRawFile(path: string): Promise<Buffer> { - throw new Error("Not implemented"); - } -} - +import { GenericFileSystem, WalkableFileSystem } from "@llamaindex/env/type"; // FS utility functions /** diff --git a/packages/core/src/storage/StorageContext.ts b/packages/core/src/storage/StorageContext.ts index 50e973a08f9e942babd91f097b048aaa9cd1681f..f178d3e3bc603005fbdd0b4f1fde70beb51f0a55 100644 --- a/packages/core/src/storage/StorageContext.ts +++ b/packages/core/src/storage/StorageContext.ts @@ -1,12 +1,15 @@ -import { defaultFS, path } from "../env"; -import { GenericFileSystem } from "./FileSystem"; -import { DEFAULT_IMAGE_VECTOR_NAMESPACE, DEFAULT_NAMESPACE } from "./constants"; -import { SimpleDocumentStore } from "./docStore/SimpleDocumentStore"; -import { BaseDocumentStore } from "./docStore/types"; -import { SimpleIndexStore } from "./indexStore/SimpleIndexStore"; -import { BaseIndexStore } from "./indexStore/types"; -import { SimpleVectorStore } from "./vectorStore/SimpleVectorStore"; -import { VectorStore } from "./vectorStore/types"; +import { defaultFS, path } from "@llamaindex/env"; +import { GenericFileSystem } from "@llamaindex/env/type"; +import { + DEFAULT_IMAGE_VECTOR_NAMESPACE, + DEFAULT_NAMESPACE, +} from "./constants.js"; +import { SimpleDocumentStore } from "./docStore/SimpleDocumentStore.js"; +import { BaseDocumentStore } from "./docStore/types.js"; +import { SimpleIndexStore } from "./indexStore/SimpleIndexStore.js"; +import { BaseIndexStore } from "./indexStore/types.js"; +import { SimpleVectorStore } from "./vectorStore/SimpleVectorStore.js"; +import { VectorStore } from "./vectorStore/types.js"; export interface StorageContext { docStore: BaseDocumentStore; diff --git a/packages/core/src/storage/chatStore/SimpleChatStore.ts b/packages/core/src/storage/chatStore/SimpleChatStore.ts index b2b272bd7049eb34052dfad4251feb358f23e86c..22e06b4c6bcb2a72bfe980a2dd8768ce8c7e4021 100644 --- a/packages/core/src/storage/chatStore/SimpleChatStore.ts +++ b/packages/core/src/storage/chatStore/SimpleChatStore.ts @@ -1,5 +1,5 @@ -import { ChatMessage } from "../../llm"; -import { BaseChatStore } from "./types"; +import { ChatMessage } from "../../llm/index.js"; +import { BaseChatStore } from "./types.js"; /** * Simple chat store. diff --git a/packages/core/src/storage/chatStore/types.ts b/packages/core/src/storage/chatStore/types.ts index a72a296d5055589dca44954bcdf932acc3c79489..87c7f892c5bebc0e85b1fcdc26572ce3efda07a7 100644 --- a/packages/core/src/storage/chatStore/types.ts +++ b/packages/core/src/storage/chatStore/types.ts @@ -1,4 +1,4 @@ -import { ChatMessage } from "../../llm"; +import { ChatMessage } from "../../llm/index.js"; export interface BaseChatStore { setMessages(key: string, messages: ChatMessage[]): void; diff --git a/packages/core/src/storage/docStore/KVDocumentStore.ts b/packages/core/src/storage/docStore/KVDocumentStore.ts index b14ab68bf708eb15df8aadf2fb8f16162a4f4788..e2d56bd4acb3d63aad7b82448016e446451ce638 100644 --- a/packages/core/src/storage/docStore/KVDocumentStore.ts +++ b/packages/core/src/storage/docStore/KVDocumentStore.ts @@ -1,9 +1,9 @@ import _, * as lodash from "lodash"; -import { BaseNode, ObjectType } from "../../Node"; -import { DEFAULT_NAMESPACE } from "../constants"; -import { BaseKVStore } from "../kvStore/types"; -import { BaseDocumentStore, RefDocInfo } from "./types"; -import { docToJson, jsonToDoc } from "./utils"; +import { BaseNode, ObjectType } from "../../Node.js"; +import { DEFAULT_NAMESPACE } from "../constants.js"; +import { BaseKVStore } from "../kvStore/types.js"; +import { BaseDocumentStore, RefDocInfo } from "./types.js"; +import { docToJson, jsonToDoc } from "./utils.js"; type DocMetaData = { docHash: string; refDocId?: string }; diff --git a/packages/core/src/storage/docStore/SimpleDocumentStore.ts b/packages/core/src/storage/docStore/SimpleDocumentStore.ts index c05d93424f77e3c44b418e8baefee5fa5d2e6b19..ccce62a80a73e0eb5ed54f7e3e398f3498f40f2f 100644 --- a/packages/core/src/storage/docStore/SimpleDocumentStore.ts +++ b/packages/core/src/storage/docStore/SimpleDocumentStore.ts @@ -1,14 +1,14 @@ +import { defaultFS, path } from "@llamaindex/env"; +import { GenericFileSystem } from "@llamaindex/env/type"; import _ from "lodash"; -import { defaultFS, path } from "../../env"; -import { GenericFileSystem } from "../FileSystem"; import { DEFAULT_DOC_STORE_PERSIST_FILENAME, DEFAULT_NAMESPACE, DEFAULT_PERSIST_DIR, -} from "../constants"; -import { SimpleKVStore } from "../kvStore/SimpleKVStore"; -import { BaseInMemoryKVStore } from "../kvStore/types"; -import { KVDocumentStore } from "./KVDocumentStore"; +} from "../constants.js"; +import { SimpleKVStore } from "../kvStore/SimpleKVStore.js"; +import { BaseInMemoryKVStore } from "../kvStore/types.js"; +import { KVDocumentStore } from "./KVDocumentStore.js"; type SaveDict = Record<string, any>; diff --git a/packages/core/src/storage/docStore/types.ts b/packages/core/src/storage/docStore/types.ts index 3ac144ae8c92170bff44b85ad81051250ad783f7..228999bd04a4cc985ddcdd49e354e18d7d4ac2cd 100644 --- a/packages/core/src/storage/docStore/types.ts +++ b/packages/core/src/storage/docStore/types.ts @@ -1,9 +1,9 @@ -import { BaseNode } from "../../Node"; +import { GenericFileSystem } from "@llamaindex/env/type"; +import { BaseNode } from "../../Node.js"; import { DEFAULT_DOC_STORE_PERSIST_FILENAME, DEFAULT_PERSIST_DIR, -} from "../constants"; -import { GenericFileSystem } from "../FileSystem"; +} from "../constants.js"; const defaultPersistPath = `${DEFAULT_PERSIST_DIR}/${DEFAULT_DOC_STORE_PERSIST_FILENAME}`; diff --git a/packages/core/src/storage/docStore/utils.ts b/packages/core/src/storage/docStore/utils.ts index e4c77f76a02051f8fbf00275ba5b446069788e02..f84c1a8bed761b3178f4eae4557d8bb73baf72cf 100644 --- a/packages/core/src/storage/docStore/utils.ts +++ b/packages/core/src/storage/docStore/utils.ts @@ -1,4 +1,4 @@ -import { BaseNode, Document, ObjectType, TextNode } from "../../Node"; +import { BaseNode, Document, ObjectType, TextNode } from "../../Node.js"; const TYPE_KEY = "__type__"; const DATA_KEY = "__data__"; diff --git a/packages/core/src/storage/index.ts b/packages/core/src/storage/index.ts index 2dbc4fd1e80bd0ca9abd081bbf247c77f63de0f8..428d3ed3c4294beb5b38e53a465d00489f0e1142 100644 --- a/packages/core/src/storage/index.ts +++ b/packages/core/src/storage/index.ts @@ -1,19 +1,19 @@ -export * from "./FileSystem"; -export * from "./StorageContext"; -export { SimpleChatStore } from "./chatStore/SimpleChatStore"; -export * from "./chatStore/types"; -export * from "./constants"; -export { SimpleDocumentStore } from "./docStore/SimpleDocumentStore"; -export * from "./docStore/types"; -export { SimpleIndexStore } from "./indexStore/SimpleIndexStore"; -export * from "./indexStore/types"; -export { SimpleKVStore } from "./kvStore/SimpleKVStore"; -export * from "./kvStore/types"; -export { AstraDBVectorStore } from "./vectorStore/AstraDBVectorStore"; -export { ChromaVectorStore } from "./vectorStore/ChromaVectorStore"; -export { MongoDBAtlasVectorSearch } from "./vectorStore/MongoDBAtlasVectorStore"; -export { PGVectorStore } from "./vectorStore/PGVectorStore"; -export { PineconeVectorStore } from "./vectorStore/PineconeVectorStore"; -export { QdrantVectorStore } from "./vectorStore/QdrantVectorStore"; -export { SimpleVectorStore } from "./vectorStore/SimpleVectorStore"; -export * from "./vectorStore/types"; +export * from "./FileSystem.js"; +export * from "./StorageContext.js"; +export { SimpleChatStore } from "./chatStore/SimpleChatStore.js"; +export * from "./chatStore/types.js"; +export * from "./constants.js"; +export { SimpleDocumentStore } from "./docStore/SimpleDocumentStore.js"; +export * from "./docStore/types.js"; +export { SimpleIndexStore } from "./indexStore/SimpleIndexStore.js"; +export * from "./indexStore/types.js"; +export { SimpleKVStore } from "./kvStore/SimpleKVStore.js"; +export * from "./kvStore/types.js"; +export { AstraDBVectorStore } from "./vectorStore/AstraDBVectorStore.js"; +export { ChromaVectorStore } from "./vectorStore/ChromaVectorStore.js"; +export { MongoDBAtlasVectorSearch } from "./vectorStore/MongoDBAtlasVectorStore.js"; +export { PGVectorStore } from "./vectorStore/PGVectorStore.js"; +export { PineconeVectorStore } from "./vectorStore/PineconeVectorStore.js"; +export { QdrantVectorStore } from "./vectorStore/QdrantVectorStore.js"; +export { SimpleVectorStore } from "./vectorStore/SimpleVectorStore.js"; +export * from "./vectorStore/types.js"; diff --git a/packages/core/src/storage/indexStore/KVIndexStore.ts b/packages/core/src/storage/indexStore/KVIndexStore.ts index b3744fabf8135c4929760d1d3ebc0ecdd004d4de..3d15ce9d15e02be71725a870cad987bb21fe9941 100644 --- a/packages/core/src/storage/indexStore/KVIndexStore.ts +++ b/packages/core/src/storage/indexStore/KVIndexStore.ts @@ -1,8 +1,9 @@ import _ from "lodash"; -import { IndexStruct, jsonToIndexStruct } from "../../indices/BaseIndex"; -import { DEFAULT_NAMESPACE } from "../constants"; -import { BaseKVStore } from "../kvStore/types"; -import { BaseIndexStore } from "./types"; +import { IndexStruct } from "../../indices/IndexStruct.js"; +import { jsonToIndexStruct } from "../../indices/json-to-index-struct.js"; +import { DEFAULT_NAMESPACE } from "../constants.js"; +import { BaseKVStore } from "../kvStore/types.js"; +import { BaseIndexStore } from "./types.js"; export class KVIndexStore extends BaseIndexStore { private _kvStore: BaseKVStore; diff --git a/packages/core/src/storage/indexStore/SimpleIndexStore.ts b/packages/core/src/storage/indexStore/SimpleIndexStore.ts index 49ab6f3cc377829078f5d33172aa0fb41efd2676..e312634048520d93612a14f6dc39964d7bf9299f 100644 --- a/packages/core/src/storage/indexStore/SimpleIndexStore.ts +++ b/packages/core/src/storage/indexStore/SimpleIndexStore.ts @@ -1,12 +1,12 @@ -import { defaultFS, path } from "../../env"; -import { GenericFileSystem } from "../FileSystem"; +import { defaultFS, path } from "@llamaindex/env"; +import { GenericFileSystem } from "@llamaindex/env/type"; import { DEFAULT_INDEX_STORE_PERSIST_FILENAME, DEFAULT_PERSIST_DIR, -} from "../constants"; -import { DataType, SimpleKVStore } from "../kvStore/SimpleKVStore"; -import { BaseInMemoryKVStore } from "../kvStore/types"; -import { KVIndexStore } from "./KVIndexStore"; +} from "../constants.js"; +import { DataType, SimpleKVStore } from "../kvStore/SimpleKVStore.js"; +import { BaseInMemoryKVStore } from "../kvStore/types.js"; +import { KVIndexStore } from "./KVIndexStore.js"; export class SimpleIndexStore extends KVIndexStore { private kvStore: BaseInMemoryKVStore; diff --git a/packages/core/src/storage/indexStore/types.ts b/packages/core/src/storage/indexStore/types.ts index 00babcdd10c3d9435e0153395c94641db7fc882c..378166f8e925ccada562fe8a0434e133743e7885 100644 --- a/packages/core/src/storage/indexStore/types.ts +++ b/packages/core/src/storage/indexStore/types.ts @@ -1,9 +1,9 @@ -import { IndexStruct } from "../../indices/BaseIndex"; -import { GenericFileSystem } from "../FileSystem"; +import { GenericFileSystem } from "@llamaindex/env/type"; +import { IndexStruct } from "../../indices/IndexStruct.js"; import { DEFAULT_INDEX_STORE_PERSIST_FILENAME, DEFAULT_PERSIST_DIR, -} from "../constants"; +} from "../constants.js"; const defaultPersistPath = `${DEFAULT_PERSIST_DIR}/${DEFAULT_INDEX_STORE_PERSIST_FILENAME}`; diff --git a/packages/core/src/storage/kvStore/SimpleKVStore.ts b/packages/core/src/storage/kvStore/SimpleKVStore.ts index cefa6498ffa915db51075b64c1673834cd25b45a..fe7c2211c6fd8a58dad4d9c758e280bf25898ef7 100644 --- a/packages/core/src/storage/kvStore/SimpleKVStore.ts +++ b/packages/core/src/storage/kvStore/SimpleKVStore.ts @@ -1,8 +1,9 @@ +import { defaultFS, path } from "@llamaindex/env"; +import { GenericFileSystem } from "@llamaindex/env/type"; import _ from "lodash"; -import { defaultFS, path } from "../../env"; -import { GenericFileSystem, exists } from "../FileSystem"; -import { DEFAULT_COLLECTION } from "../constants"; -import { BaseKVStore } from "./types"; +import { exists } from "../FileSystem.js"; +import { DEFAULT_COLLECTION } from "../constants.js"; +import { BaseKVStore } from "./types.js"; export type DataType = Record<string, Record<string, any>>; @@ -58,8 +59,10 @@ export class SimpleKVStore extends BaseKVStore { return false; } - async persist(persistPath: string, fs?: GenericFileSystem): Promise<void> { - fs = fs || defaultFS; + async persist( + persistPath: string, + fs: GenericFileSystem = defaultFS, + ): Promise<void> { // TODO: decide on a way to polyfill path const dirPath = path.dirname(persistPath); if (!(await exists(fs, dirPath))) { @@ -70,9 +73,8 @@ export class SimpleKVStore extends BaseKVStore { static async fromPersistPath( persistPath: string, - fs?: GenericFileSystem, + fs: GenericFileSystem = defaultFS, ): Promise<SimpleKVStore> { - fs = fs || defaultFS; const dirPath = path.dirname(persistPath); if (!(await exists(fs, dirPath))) { await fs.mkdir(dirPath); diff --git a/packages/core/src/storage/kvStore/types.ts b/packages/core/src/storage/kvStore/types.ts index 3ff05a2538c9996cd6612c7ff88344b8ef8c1d1a..6005c023a089402261bb30689db738b2df018a64 100644 --- a/packages/core/src/storage/kvStore/types.ts +++ b/packages/core/src/storage/kvStore/types.ts @@ -1,4 +1,4 @@ -import { GenericFileSystem } from "../FileSystem"; +import { GenericFileSystem } from "@llamaindex/env/type"; const defaultCollection = "data"; type StoredValue = Record<string, any> | null; diff --git a/packages/core/src/storage/vectorStore/AstraDBVectorStore.ts b/packages/core/src/storage/vectorStore/AstraDBVectorStore.ts index fd258c3b8c3ef2cdf36873903866b4fa6d9904c9..72ab14fd7df218603f4e95f7f7811fbcbeebcd49 100644 --- a/packages/core/src/storage/vectorStore/AstraDBVectorStore.ts +++ b/packages/core/src/storage/vectorStore/AstraDBVectorStore.ts @@ -1,9 +1,12 @@ import { AstraDB } from "@datastax/astra-db-ts"; import { Collection } from "@datastax/astra-db-ts/dist/collections"; -import { CreateCollectionOptions } from "@datastax/astra-db-ts/dist/collections/options"; -import { BaseNode, MetadataMode } from "../../Node"; -import { VectorStore, VectorStoreQuery, VectorStoreQueryResult } from "./types"; -import { metadataDictToNode, nodeToMetadata } from "./utils"; +import { BaseNode, MetadataMode } from "../../Node.js"; +import { + VectorStore, + VectorStoreQuery, + VectorStoreQueryResult, +} from "./types.js"; +import { metadataDictToNode, nodeToMetadata } from "./utils.js"; const MAX_INSERT_BATCH_SIZE = 20; @@ -64,7 +67,7 @@ export class AstraDBVectorStore implements VectorStore { */ async create( collection: string, - options: CreateCollectionOptions, + options?: Parameters<AstraDB["createCollection"]>[1], ): Promise<void> { await this.astraDBClient.createCollection(collection, options); console.debug("Created Astra DB collection"); diff --git a/packages/core/src/storage/vectorStore/ChromaVectorStore.ts b/packages/core/src/storage/vectorStore/ChromaVectorStore.ts index cc3321babf698bacd5418b9fb9f153464d1ea6fe..f5ace2dab16dff9c91ed6c4a9b002ae0b94888a2 100644 --- a/packages/core/src/storage/vectorStore/ChromaVectorStore.ts +++ b/packages/core/src/storage/vectorStore/ChromaVectorStore.ts @@ -8,14 +8,14 @@ import { Where, WhereDocument, } from "chromadb"; -import { BaseNode, MetadataMode } from "../../Node"; +import { BaseNode, MetadataMode } from "../../Node.js"; import { VectorStore, VectorStoreQuery, VectorStoreQueryMode, VectorStoreQueryResult, -} from "./types"; -import { metadataDictToNode, nodeToMetadata } from "./utils"; +} from "./types.js"; +import { metadataDictToNode, nodeToMetadata } from "./utils.js"; type ChromaDeleteOptions = { where?: Where; diff --git a/packages/core/src/storage/vectorStore/MongoDBAtlasVectorStore.ts b/packages/core/src/storage/vectorStore/MongoDBAtlasVectorStore.ts index 434e0afe6502c1049ddcb80d8a01c032f8a25222..919b32052f6760383708dd3f1e76e3f5f95cd5c2 100644 --- a/packages/core/src/storage/vectorStore/MongoDBAtlasVectorStore.ts +++ b/packages/core/src/storage/vectorStore/MongoDBAtlasVectorStore.ts @@ -1,12 +1,12 @@ import { BulkWriteOptions, Collection, MongoClient } from "mongodb"; -import { BaseNode, MetadataMode } from "../../Node"; +import { BaseNode, MetadataMode } from "../../Node.js"; import { MetadataFilters, VectorStore, VectorStoreQuery, VectorStoreQueryResult, -} from "./types"; -import { metadataDictToNode, nodeToMetadata } from "./utils"; +} from "./types.js"; +import { metadataDictToNode, nodeToMetadata } from "./utils.js"; // Utility function to convert metadata filters to MongoDB filter function toMongoDBFilter( diff --git a/packages/core/src/storage/vectorStore/PGVectorStore.ts b/packages/core/src/storage/vectorStore/PGVectorStore.ts index ad3b7ca9acf84b3b4947048fecbb150065ec2816..7b20916d9b6949a97d30d2dcaaba813aab018a49 100644 --- a/packages/core/src/storage/vectorStore/PGVectorStore.ts +++ b/packages/core/src/storage/vectorStore/PGVectorStore.ts @@ -1,10 +1,14 @@ import pg from "pg"; import pgvector from "pgvector/pg"; -import { VectorStore, VectorStoreQuery, VectorStoreQueryResult } from "./types"; - -import { BaseNode, Document, Metadata, MetadataMode } from "../../Node"; -import { GenericFileSystem } from "../FileSystem"; +import { + VectorStore, + VectorStoreQuery, + VectorStoreQueryResult, +} from "./types.js"; + +import { GenericFileSystem } from "@llamaindex/env/type"; +import { BaseNode, Document, Metadata, MetadataMode } from "../../Node.js"; export const PGVECTOR_SCHEMA = "public"; export const PGVECTOR_TABLE = "llamaindex_embedding"; diff --git a/packages/core/src/storage/vectorStore/PineconeVectorStore.ts b/packages/core/src/storage/vectorStore/PineconeVectorStore.ts index 42e7ffe9c9ee116c63a16e361d2dc4f1e96896d5..8d3dec3ba17cf01280dfa5f65183476c76d8509f 100644 --- a/packages/core/src/storage/vectorStore/PineconeVectorStore.ts +++ b/packages/core/src/storage/vectorStore/PineconeVectorStore.ts @@ -4,18 +4,17 @@ import { VectorStore, VectorStoreQuery, VectorStoreQueryResult, -} from "./types"; - -import { BaseNode, Metadata } from "../../Node"; -import { GenericFileSystem } from "../FileSystem"; +} from "./types.js"; +import { GenericFileSystem } from "@llamaindex/env/type"; import { FetchResponse, Index, Pinecone, ScoredPineconeRecord, } from "@pinecone-database/pinecone"; -import { metadataDictToNode, nodeToMetadata } from "./utils"; +import { BaseNode, Metadata } from "../../Node.js"; +import { metadataDictToNode, nodeToMetadata } from "./utils.js"; type PineconeParams = { indexName?: string; diff --git a/packages/core/src/storage/vectorStore/QdrantVectorStore.ts b/packages/core/src/storage/vectorStore/QdrantVectorStore.ts index 1e8afe1d6bdcafe284309db4a783bb9a2a9097df..0d656d15fb6bac68e63346c5686f9b5e19166b26 100644 --- a/packages/core/src/storage/vectorStore/QdrantVectorStore.ts +++ b/packages/core/src/storage/vectorStore/QdrantVectorStore.ts @@ -1,8 +1,12 @@ -import { BaseNode } from "../../Node"; -import { VectorStore, VectorStoreQuery, VectorStoreQueryResult } from "./types"; +import { BaseNode } from "../../Node.js"; +import { + VectorStore, + VectorStoreQuery, + VectorStoreQueryResult, +} from "./types.js"; import { QdrantClient } from "@qdrant/js-client-rest"; -import { metadataDictToNode, nodeToMetadata } from "./utils"; +import { metadataDictToNode, nodeToMetadata } from "./utils.js"; type PointStruct = { id: string; diff --git a/packages/core/src/storage/vectorStore/SimpleVectorStore.ts b/packages/core/src/storage/vectorStore/SimpleVectorStore.ts index 8b995e2c9cab7791bf6b4fb493644c40ffc8ee3e..85b286c32e34f664d1a650a3d427673765ca8c96 100644 --- a/packages/core/src/storage/vectorStore/SimpleVectorStore.ts +++ b/packages/core/src/storage/vectorStore/SimpleVectorStore.ts @@ -1,19 +1,20 @@ +import { defaultFS, path } from "@llamaindex/env"; +import { GenericFileSystem } from "@llamaindex/env/type"; import _ from "lodash"; -import { BaseNode } from "../../Node"; +import { BaseNode } from "../../Node.js"; import { getTopKEmbeddings, getTopKEmbeddingsLearner, getTopKMMREmbeddings, -} from "../../embeddings/utils"; -import { defaultFS, path } from "../../env"; -import { GenericFileSystem, exists } from "../FileSystem"; -import { DEFAULT_PERSIST_DIR } from "../constants"; +} from "../../embeddings/utils.js"; +import { exists } from "../FileSystem.js"; +import { DEFAULT_PERSIST_DIR } from "../constants.js"; import { VectorStore, VectorStoreQuery, VectorStoreQueryMode, VectorStoreQueryResult, -} from "./types"; +} from "./types.js"; const LEARNER_MODES = new Set<VectorStoreQueryMode>([ VectorStoreQueryMode.SVM, @@ -157,10 +158,8 @@ export class SimpleVectorStore implements VectorStore { static async fromPersistPath( persistPath: string, - fs?: GenericFileSystem, + fs: GenericFileSystem = defaultFS, ): Promise<SimpleVectorStore> { - fs = fs || defaultFS; - const dirPath = path.dirname(persistPath); if (!(await exists(fs, dirPath))) { await fs.mkdir(dirPath, { recursive: true }); diff --git a/packages/core/src/storage/vectorStore/types.ts b/packages/core/src/storage/vectorStore/types.ts index be4bb0968607f2626f0868bcd4ded9428a575ecc..d3451143bf09a1c6dcfa6d15a1464fcd61c08bdb 100644 --- a/packages/core/src/storage/vectorStore/types.ts +++ b/packages/core/src/storage/vectorStore/types.ts @@ -1,4 +1,4 @@ -import { BaseNode } from "../../Node"; +import { BaseNode } from "../../Node.js"; export interface VectorStoreQueryResult { nodes?: BaseNode[]; diff --git a/packages/core/src/storage/vectorStore/utils.ts b/packages/core/src/storage/vectorStore/utils.ts index 0944341ac7ca3ab72a0f269b0e7e956e6461354a..34af36316238c89e2020a0137b209075c21aad24 100644 --- a/packages/core/src/storage/vectorStore/utils.ts +++ b/packages/core/src/storage/vectorStore/utils.ts @@ -1,4 +1,4 @@ -import { BaseNode, jsonToNode, Metadata, ObjectType } from "../../Node"; +import { BaseNode, jsonToNode, Metadata, ObjectType } from "../../Node.js"; const DEFAULT_TEXT_KEY = "text"; diff --git a/packages/core/src/synthesizers/MultiModalResponseSynthesizer.ts b/packages/core/src/synthesizers/MultiModalResponseSynthesizer.ts index 849b8ad271f399c3f92e2b41121ad08b863dd835..59166895817ed3c9e338795d02a0407cbfae80af 100644 --- a/packages/core/src/synthesizers/MultiModalResponseSynthesizer.ts +++ b/packages/core/src/synthesizers/MultiModalResponseSynthesizer.ts @@ -1,15 +1,18 @@ -import { ImageNode, MetadataMode, splitNodesByType } from "../Node"; -import { Response } from "../Response"; -import { ServiceContext, serviceContextFromDefaults } from "../ServiceContext"; -import { imageToDataUrl } from "../embeddings"; -import { MessageContentDetail } from "../llm/types"; -import { PromptMixin } from "../prompts"; -import { TextQaPrompt, defaultTextQaPrompt } from "./../Prompt"; +import { ImageNode, MetadataMode, splitNodesByType } from "../Node.js"; +import { Response } from "../Response.js"; +import { + ServiceContext, + serviceContextFromDefaults, +} from "../ServiceContext.js"; +import { imageToDataUrl } from "../embeddings/index.js"; +import { MessageContentDetail } from "../llm/types.js"; +import { PromptMixin } from "../prompts/Mixin.js"; +import { TextQaPrompt, defaultTextQaPrompt } from "./../Prompt.js"; import { BaseSynthesizer, SynthesizeParamsNonStreaming, SynthesizeParamsStreaming, -} from "./types"; +} from "./types.js"; export class MultiModalResponseSynthesizer extends PromptMixin diff --git a/packages/core/src/synthesizers/ResponseSynthesizer.ts b/packages/core/src/synthesizers/ResponseSynthesizer.ts index 7b28677b484a818f2455766af22331cee9188d2e..f2a8daf9c7c1dd2cff8498d53413f98f50932eb1 100644 --- a/packages/core/src/synthesizers/ResponseSynthesizer.ts +++ b/packages/core/src/synthesizers/ResponseSynthesizer.ts @@ -1,15 +1,18 @@ -import { MetadataMode } from "../Node"; -import { Response } from "../Response"; -import { ServiceContext, serviceContextFromDefaults } from "../ServiceContext"; -import { streamConverter } from "../llm/utils"; -import { PromptMixin } from "../prompts"; -import { ResponseBuilderPrompts, getResponseBuilder } from "./builders"; +import { MetadataMode } from "../Node.js"; +import { Response } from "../Response.js"; +import { + ServiceContext, + serviceContextFromDefaults, +} from "../ServiceContext.js"; +import { streamConverter } from "../llm/utils.js"; +import { PromptMixin } from "../prompts/Mixin.js"; +import { ResponseBuilderPrompts, getResponseBuilder } from "./builders.js"; import { BaseSynthesizer, ResponseBuilder, SynthesizeParamsNonStreaming, SynthesizeParamsStreaming, -} from "./types"; +} from "./types.js"; /** * A ResponseSynthesizer is used to generate a response from a query and a list of nodes. diff --git a/packages/core/src/synthesizers/builders.ts b/packages/core/src/synthesizers/builders.ts index edec2cfdb0351fcb6cafa93c38df502d9684c5db..0c232b9624fc7636dfe1e6df4a9decbe43fe4bad 100644 --- a/packages/core/src/synthesizers/builders.ts +++ b/packages/core/src/synthesizers/builders.ts @@ -1,6 +1,6 @@ -import { Event } from "../callbacks/CallbackManager"; -import { LLM } from "../llm"; -import { streamConverter } from "../llm/utils"; +import { Event } from "../callbacks/CallbackManager.js"; +import { LLM } from "../llm/index.js"; +import { streamConverter } from "../llm/utils.js"; import { defaultRefinePrompt, defaultTextQaPrompt, @@ -9,15 +9,15 @@ import { SimplePrompt, TextQaPrompt, TreeSummarizePrompt, -} from "../Prompt"; -import { getBiggestPrompt, PromptHelper } from "../PromptHelper"; -import { PromptMixin } from "../prompts"; -import { ServiceContext } from "../ServiceContext"; +} from "../Prompt.js"; +import { getBiggestPrompt, PromptHelper } from "../PromptHelper.js"; +import { PromptMixin } from "../prompts/Mixin.js"; +import { ServiceContext } from "../ServiceContext.js"; import { ResponseBuilder, ResponseBuilderParamsNonStreaming, ResponseBuilderParamsStreaming, -} from "./types"; +} from "./types.js"; /** * Response modes of the response synthesizer diff --git a/packages/core/src/synthesizers/index.ts b/packages/core/src/synthesizers/index.ts index 2ec58d918d3c502cf005d090c32018023107b035..4b4ba5eabf5bd79fb2775aac262a30f445fcbee2 100644 --- a/packages/core/src/synthesizers/index.ts +++ b/packages/core/src/synthesizers/index.ts @@ -1,4 +1,4 @@ -export * from "./MultiModalResponseSynthesizer"; -export * from "./ResponseSynthesizer"; -export * from "./builders"; -export * from "./types"; +export * from "./MultiModalResponseSynthesizer.js"; +export * from "./ResponseSynthesizer.js"; +export * from "./builders.js"; +export * from "./types.js"; diff --git a/packages/core/src/synthesizers/types.ts b/packages/core/src/synthesizers/types.ts index 30798283649ea98e7a8a214f844253ed0b21daa8..333a3bdc4c796c3f2869c8636eecfc9a35a8fc96 100644 --- a/packages/core/src/synthesizers/types.ts +++ b/packages/core/src/synthesizers/types.ts @@ -1,7 +1,7 @@ -import { Event } from "../callbacks/CallbackManager"; -import { NodeWithScore } from "../Node"; -import { PromptMixin } from "../prompts"; -import { Response } from "../Response"; +import { Event } from "../callbacks/CallbackManager.js"; +import { NodeWithScore } from "../Node.js"; +import { PromptMixin } from "../prompts/Mixin.js"; +import { Response } from "../Response.js"; export interface SynthesizeParamsBase { query: string; diff --git a/packages/core/src/tests/GenericFileSystem.test.ts b/packages/core/src/tests/GenericFileSystem.test.ts deleted file mode 100644 index 1ebb9da228737c11e5a880caec877a26d3951b84..0000000000000000000000000000000000000000 --- a/packages/core/src/tests/GenericFileSystem.test.ts +++ /dev/null @@ -1,133 +0,0 @@ -import nodeFS from "node:fs/promises"; -import os from "os"; -import path from "path"; -import { defaultFS } from "../env"; -import { - GenericFileSystem, - InMemoryFileSystem, - exists, - walk, -} from "../storage/FileSystem"; - -type FileSystemUnderTest = { - name: string; - prepare: () => Promise<any>; - cleanup: () => Promise<any>; - implementation: GenericFileSystem; - tempDir: string; -}; - -const cases: FileSystemUnderTest[] = [ - { - name: "InMemoryFileSystem", - prepare: async () => {}, - cleanup: async function () { - this.implementation = new InMemoryFileSystem(); - }, - implementation: new InMemoryFileSystem(), - tempDir: "./", - }, - { - name: "Default fs", - prepare: async function () { - this.tempDir = await nodeFS.mkdtemp(path.join(os.tmpdir(), "jest-")); - }, - cleanup: async function () { - await nodeFS.rm(this.tempDir, { recursive: true }); - }, - implementation: defaultFS, - tempDir: "./", - }, -]; - -describe.each<FileSystemUnderTest>(cases)("Test %s", (testParams) => { - let testFS: GenericFileSystem; - let tempDir: string; - - beforeEach(async () => { - await testParams.prepare(); - testFS = testParams.implementation; - tempDir = testParams.tempDir; - }); - - afterEach(async () => { - await testParams.cleanup(); - }); - - test("initializes", () => { - expect(testFS).toBeTruthy(); - }); - - describe("writeFile", () => { - it("writes file to memory", async () => { - await testFS.writeFile(`${tempDir}/test.txt`, "Hello, world!"); - expect(await testFS.readFile(`${tempDir}/test.txt`)).toBe( - "Hello, world!", - ); - }); - - it("overwrites existing file", async () => { - await testFS.writeFile(`${tempDir}/test.txt`, "Hello, world!"); - await testFS.writeFile(`${tempDir}/test.txt`, "Hello, again!"); - expect(await testFS.readFile(`${tempDir}/test.txt`)).toBe( - "Hello, again!", - ); - }); - }); - - describe("readFile", () => { - it("throws error for non-existing file", async () => { - await expect( - testFS.readFile(`${tempDir}/not_exist.txt`), - ).rejects.toThrow(); - }); - }); - - describe("exists", () => { - it("returns true for existing file", async () => { - await testFS.writeFile(`${tempDir}/test.txt`, "Hello, world!"); - expect(await exists(testFS, `${tempDir}/test.txt`)).toBe(true); - }); - - it("returns false for non-existing file", async () => { - expect(await exists(testFS, `${tempDir}/not_exist.txt`)).toBe(false); - }); - }); - - describe("mkdir", () => { - it("creates directory if it doesn't exist", async () => { - await testFS.mkdir(`${tempDir}/testDir`); - expect(await exists(testFS, `${tempDir}/testDir`)).toBe(true); - }); - }); -}); - -describe("Test walk for Node.js fs", () => { - let tempDir: string; - - beforeAll(async () => { - tempDir = await nodeFS.mkdtemp(path.join(os.tmpdir(), "jest-")); - await nodeFS.writeFile(`${tempDir}/test.txt`, "Hello, world!"); - await nodeFS.mkdir(`${tempDir}/subDir`); - await nodeFS.writeFile(`${tempDir}/subDir/test2.txt`, "Hello, again!"); - }); - - it("walks directory", async () => { - const expectedFiles = new Set([ - `${tempDir}/subDir/test2.txt`, - `${tempDir}/test.txt`, - ]); - - const actualFiles = new Set<string>(); - for await (const file of walk(nodeFS, tempDir)) { - expect(file).toBeTruthy(); - actualFiles.add(file); - } - - expect(expectedFiles).toEqual(actualFiles); - }); - - afterAll(async () => { - await nodeFS.rm(tempDir, { recursive: true }); - }); -}); diff --git a/packages/core/src/tests/llms/openai/utils.test.ts b/packages/core/src/tests/llms/openai/utils.test.ts deleted file mode 100644 index 5ebace03d8201810e71ba6ae9c92ec6303de7c20..0000000000000000000000000000000000000000 --- a/packages/core/src/tests/llms/openai/utils.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { - ALL_AVAILABLE_OPENAI_MODELS, - isFunctionCallingModel, -} from "../../../llm"; - -describe("openai/utils", () => { - test("shouldn't be a old model", () => { - expect(isFunctionCallingModel("gpt-3.5-turbo")).toBe(true); - expect(isFunctionCallingModel("gpt-3.5-turbo-0314")).toBe(false); - expect(isFunctionCallingModel("gpt-3.5-turbo-0301")).toBe(false); - expect(isFunctionCallingModel("gpt-3.5-turbo-0314-0301")).toBe(false); - expect(isFunctionCallingModel("gpt-3.5-turbo-0314-0301-0314-0301")).toBe( - false, - ); - expect( - isFunctionCallingModel("gpt-3.5-turbo-0314-0301-0314-0301-0314-0301"), - ).toBe(false); - }); - - test("should be a open ai model", () => { - const models = Object.keys(ALL_AVAILABLE_OPENAI_MODELS).filter( - (model) => !model.includes("0314") && !model.includes("0301"), - ); - - models.forEach((model) => { - expect(isFunctionCallingModel(model)).toBe(true); - }); - }); -}); diff --git a/packages/core/src/tests/utility/mockOpenAI.ts b/packages/core/src/tests/utility/mockOpenAI.ts deleted file mode 100644 index aaa77d74306842d38dfe37a535ff086bb3089fd9..0000000000000000000000000000000000000000 --- a/packages/core/src/tests/utility/mockOpenAI.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { CallbackManager } from "../../callbacks/CallbackManager"; -import { OpenAIEmbedding } from "../../embeddings"; -import { globalsHelper } from "../../GlobalsHelper"; -import { OpenAI } from "../../llm/LLM"; -import { LLMChatParamsBase } from "../../llm/types"; - -export const DEFAULT_LLM_TEXT_OUTPUT = "MOCK_TOKEN_1-MOCK_TOKEN_2"; - -export function mockLlmGeneration({ - languageModel, - callbackManager, -}: { - languageModel: OpenAI; - callbackManager?: CallbackManager; -}) { - jest - .spyOn(languageModel, "chat") - .mockImplementation( - async ({ messages, parentEvent }: LLMChatParamsBase) => { - const text = DEFAULT_LLM_TEXT_OUTPUT; - const event = globalsHelper.createEvent({ - parentEvent, - type: "llmPredict", - }); - if (callbackManager?.onLLMStream) { - const chunks = text.split("-"); - for (let i = 0; i < chunks.length; i++) { - const chunk = chunks[i]; - callbackManager?.onLLMStream({ - event, - index: i, - token: { - id: "id", - object: "object", - created: 1, - model: "model", - choices: [ - { - index: 0, - delta: { - content: chunk, - }, - finish_reason: null, - }, - ], - }, - }); - } - callbackManager?.onLLMStream({ - event, - index: chunks.length, - isDone: true, - }); - } - return new Promise((resolve) => { - resolve({ - message: { - content: text, - role: "assistant", - }, - }); - }); - }, - ); -} - -export function mockLlmToolCallGeneration({ - languageModel, - callbackManager, -}: { - languageModel: OpenAI; - callbackManager: CallbackManager; -}) { - jest.spyOn(languageModel, "chat").mockImplementation( - () => - new Promise((resolve) => - resolve({ - message: { - content: "The sum is 2", - role: "assistant", - }, - }), - ), - ); -} - -export function mockEmbeddingModel( - embedModel: OpenAIEmbedding, - embeddingsLength: number = 1, -) { - jest.spyOn(embedModel, "getTextEmbedding").mockImplementation(async (x) => { - return new Promise((resolve) => { - resolve([1, 0, 0, 0, 0, 0]); - }); - }); - jest.spyOn(embedModel, "getTextEmbeddings").mockImplementation(async (x) => { - return new Promise((resolve) => { - if (x.length > 1) { - resolve(Array(x.length).fill([1, 0, 0, 0, 0, 0])); - } - resolve([[1, 0, 0, 0, 0, 0]]); - }); - }); - jest.spyOn(embedModel, "getQueryEmbedding").mockImplementation(async (x) => { - return new Promise((resolve) => { - resolve([0, 1, 0, 0, 0, 0]); - }); - }); -} - -const structuredOutput = JSON.stringify([ - { - choice: 1, - reason: "apple", - }, -]); - -export function mocStructuredkLlmGeneration({ - languageModel, - callbackManager, -}: { - languageModel: OpenAI; - callbackManager: CallbackManager; -}) { - jest - .spyOn(languageModel, "chat") - .mockImplementation( - async ({ messages, parentEvent }: LLMChatParamsBase) => { - const text = structuredOutput; - const event = globalsHelper.createEvent({ - parentEvent, - type: "llmPredict", - }); - if (callbackManager?.onLLMStream) { - const chunks = text.split("-"); - for (let i = 0; i < chunks.length; i++) { - const chunk = chunks[i]; - callbackManager?.onLLMStream({ - event, - index: i, - token: { - id: "id", - object: "object", - created: 1, - model: "model", - choices: [ - { - index: 0, - delta: { - content: chunk, - }, - finish_reason: null, - }, - ], - }, - }); - } - callbackManager?.onLLMStream({ - event, - index: chunks.length, - isDone: true, - }); - } - return new Promise((resolve) => { - resolve({ - message: { - content: text, - role: "assistant", - }, - }); - }); - }, - ); -} diff --git a/packages/core/src/tools/QueryEngineTool.ts b/packages/core/src/tools/QueryEngineTool.ts index 41c0cc85be5f5c5e3bcc0b38cf1c14de58b53a13..fa3505f6cd3ebaaa962b8e4e3d7ba51f0153c7ae 100644 --- a/packages/core/src/tools/QueryEngineTool.ts +++ b/packages/core/src/tools/QueryEngineTool.ts @@ -1,4 +1,4 @@ -import { BaseQueryEngine, BaseTool, ToolMetadata } from "../types"; +import { BaseQueryEngine, BaseTool, ToolMetadata } from "../types.js"; export type QueryEngineToolParams = { queryEngine: BaseQueryEngine; diff --git a/packages/core/src/tools/functionTool.ts b/packages/core/src/tools/functionTool.ts index f9114612929fb903c0fc379d91871a6258ef22a8..af3f50ca3919cb9ce299af4823cca475338b73b8 100644 --- a/packages/core/src/tools/functionTool.ts +++ b/packages/core/src/tools/functionTool.ts @@ -1,4 +1,4 @@ -import { BaseTool, ToolMetadata } from "../types"; +import { BaseTool, ToolMetadata } from "../types.js"; type Metadata = { name: string; diff --git a/packages/core/src/tools/index.ts b/packages/core/src/tools/index.ts index bd695d4f9a66d5025807899554f0c05b0219c3d6..32e1bbb9d6c14b44be2566886c15d304fe1cad74 100644 --- a/packages/core/src/tools/index.ts +++ b/packages/core/src/tools/index.ts @@ -1,4 +1,4 @@ -export * from "./QueryEngineTool"; -export * from "./functionTool"; -export * from "./types"; -export * from "./utils"; +export * from "./QueryEngineTool.js"; +export * from "./functionTool.js"; +export * from "./types.js"; +export * from "./utils.js"; diff --git a/packages/core/src/tools/utils.ts b/packages/core/src/tools/utils.ts index 8bb8e76176505cff3c63c91b6b9581282b9c8552..65bc25ab0eed5f664e51e4f7b47842253c96b4a4 100644 --- a/packages/core/src/tools/utils.ts +++ b/packages/core/src/tools/utils.ts @@ -1,5 +1,5 @@ -import { BaseTool } from "../types"; -import { ToolOutput } from "./types"; +import { BaseTool } from "../types.js"; +import { ToolOutput } from "./types.js"; /** * Call tool with error handling. diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index f71ee294d18fc3e777ed27f23f236ec191324ba3..d3d454524928ee6db09ce1ee88b263948197b1a4 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,8 +1,8 @@ /** * Top level types to avoid circular dependencies */ -import { Event } from "./callbacks/CallbackManager"; -import { Response } from "./Response"; +import { Event } from "./callbacks/CallbackManager.js"; +import { Response } from "./Response.js"; /** * Parameters for sending a query. diff --git a/packages/core/src/tests/CallbackManager.test.ts b/packages/core/tests/CallbackManager.test.ts similarity index 87% rename from packages/core/src/tests/CallbackManager.test.ts rename to packages/core/tests/CallbackManager.test.ts index 8c150a34324375def15d2693003b012758a07795..ea4729741884eef5203a8777e8ef5f21f6621022 100644 --- a/packages/core/src/tests/CallbackManager.test.ts +++ b/packages/core/tests/CallbackManager.test.ts @@ -1,21 +1,37 @@ -import { Document } from "../Node"; -import { ServiceContext, serviceContextFromDefaults } from "../ServiceContext"; +import { + afterAll, + beforeAll, + beforeEach, + describe, + expect, + test, + vi, +} from "vitest"; + +import { Document } from "llamaindex/Node"; +import { + ServiceContext, + serviceContextFromDefaults, +} from "llamaindex/ServiceContext"; import { CallbackManager, RetrievalCallbackResponse, StreamCallbackResponse, -} from "../callbacks/CallbackManager"; -import { OpenAIEmbedding } from "../embeddings"; -import { SummaryIndex } from "../indices/summary"; -import { VectorStoreIndex } from "../indices/vectorStore/VectorStoreIndex"; -import { OpenAI } from "../llm/LLM"; -import { ResponseSynthesizer, SimpleResponseBuilder } from "../synthesizers"; -import { mockEmbeddingModel, mockLlmGeneration } from "./utility/mockOpenAI"; +} from "llamaindex/callbacks/CallbackManager"; +import { OpenAIEmbedding } from "llamaindex/embeddings/index"; +import { SummaryIndex } from "llamaindex/indices/summary/index"; +import { VectorStoreIndex } from "llamaindex/indices/vectorStore/index"; +import { OpenAI } from "llamaindex/llm/LLM"; +import { + ResponseSynthesizer, + SimpleResponseBuilder, +} from "llamaindex/synthesizers/index"; +import { mockEmbeddingModel, mockLlmGeneration } from "./utility/mockOpenAI.js"; // Mock the OpenAI getOpenAISession function during testing -jest.mock("../llm/open_ai", () => { +vi.mock("llamaindex/llm/open_ai", () => { return { - getOpenAISession: jest.fn().mockImplementation(() => null), + getOpenAISession: vi.fn().mockImplementation(() => null), }; }); @@ -58,7 +74,7 @@ describe("CallbackManager: onLLMStream and onRetrieve", () => { }); afterAll(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); test("For VectorStoreIndex w/ a SimpleResponseBuilder", async () => { diff --git a/packages/core/src/tests/Document.test.ts b/packages/core/tests/Document.test.ts similarity index 63% rename from packages/core/src/tests/Document.test.ts rename to packages/core/tests/Document.test.ts index a0edb65aecf12c84e7c8ec6cd298955259415150..73da731df47cc8b4c24d945049a144e7dd78e72d 100644 --- a/packages/core/src/tests/Document.test.ts +++ b/packages/core/tests/Document.test.ts @@ -1,4 +1,5 @@ -import { Document } from "../Node"; +import { Document } from "llamaindex/Node"; +import { describe, expect, test } from "vitest"; describe("Document", () => { test("initializes", () => { diff --git a/packages/core/src/tests/Embedding.test.ts b/packages/core/tests/Embedding.test.ts similarity index 86% rename from packages/core/src/tests/Embedding.test.ts rename to packages/core/tests/Embedding.test.ts index 5fa58a6024534a7e22ae446dddd1d23df13ec083..e0b2d2bf6915e34712147ef2a04bf268bb6f6f8e 100644 --- a/packages/core/src/tests/Embedding.test.ts +++ b/packages/core/tests/Embedding.test.ts @@ -1,10 +1,15 @@ -import { OpenAIEmbedding, similarity, SimilarityType } from "../embeddings"; -import { mockEmbeddingModel } from "./utility/mockOpenAI"; +import { + OpenAIEmbedding, + SimilarityType, + similarity, +} from "llamaindex/embeddings/index"; +import { beforeAll, describe, expect, test, vi } from "vitest"; +import { mockEmbeddingModel } from "./utility/mockOpenAI.js"; // Mock the OpenAI getOpenAISession function during testing -jest.mock("../llm/open_ai", () => { +vi.mock("llamaindex/llm/open_ai", () => { return { - getOpenAISession: jest.fn().mockImplementation(() => null), + getOpenAISession: vi.fn().mockImplementation(() => null), }; }); diff --git a/packages/core/src/tests/Keyword.test.ts b/packages/core/tests/Keyword.test.ts similarity index 96% rename from packages/core/src/tests/Keyword.test.ts rename to packages/core/tests/Keyword.test.ts index e0571ba9f44fffc3b99433ccf3c22039a868765e..b5bf437351f932ea177d09dd1c2df5d814bd0fed 100644 --- a/packages/core/src/tests/Keyword.test.ts +++ b/packages/core/tests/Keyword.test.ts @@ -1,7 +1,8 @@ import { rakeExtractKeywords, simpleExtractKeywords, -} from "../indices/keyword/utils"; +} from "llamaindex/indices/keyword/utils"; +import { describe, expect, test } from "vitest"; describe("SimpleExtractKeywords", () => { test("should extract unique keywords", () => { const text = "apple banana apple cherry"; diff --git a/packages/core/src/tests/MetadataExtractors.test.ts b/packages/core/tests/MetadataExtractors.test.ts similarity index 84% rename from packages/core/src/tests/MetadataExtractors.test.ts rename to packages/core/tests/MetadataExtractors.test.ts index e293f528d4d470ea4756663d8a0ea27728347104..af848c0682e5d50daa1345bba042d85da35ac02a 100644 --- a/packages/core/src/tests/MetadataExtractors.test.ts +++ b/packages/core/tests/MetadataExtractors.test.ts @@ -1,29 +1,41 @@ -import { Document } from "../Node"; -import { ServiceContext, serviceContextFromDefaults } from "../ServiceContext"; +import { Document } from "llamaindex/Node"; +import { + ServiceContext, + serviceContextFromDefaults, +} from "llamaindex/ServiceContext"; import { CallbackManager, RetrievalCallbackResponse, StreamCallbackResponse, -} from "../callbacks/CallbackManager"; -import { OpenAIEmbedding } from "../embeddings"; +} from "llamaindex/callbacks/CallbackManager"; +import { OpenAIEmbedding } from "llamaindex/embeddings/index"; import { KeywordExtractor, QuestionsAnsweredExtractor, SummaryExtractor, TitleExtractor, -} from "../extractors"; -import { OpenAI } from "../llm/LLM"; -import { SimpleNodeParser } from "../nodeParsers"; +} from "llamaindex/extractors/index"; +import { OpenAI } from "llamaindex/llm/LLM"; +import { SimpleNodeParser } from "llamaindex/nodeParsers/index"; +import { + afterAll, + beforeAll, + beforeEach, + describe, + expect, + test, + vi, +} from "vitest"; import { DEFAULT_LLM_TEXT_OUTPUT, mockEmbeddingModel, mockLlmGeneration, -} from "./utility/mockOpenAI"; +} from "./utility/mockOpenAI.js"; // Mock the OpenAI getOpenAISession function during testing -jest.mock("../llm/open_ai", () => { +vi.mock("llamaindex/llm/open_ai", () => { return { - getOpenAISession: jest.fn().mockImplementation(() => null), + getOpenAISession: vi.fn().mockImplementation(() => null), }; }); @@ -66,7 +78,7 @@ describe("[MetadataExtractor]: Extractors should populate the metadata", () => { }); afterAll(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); test("[MetadataExtractor] KeywordExtractor returns excerptKeywords metadata", async () => { diff --git a/packages/core/src/tests/Node.test.ts b/packages/core/tests/Node.test.ts similarity index 79% rename from packages/core/src/tests/Node.test.ts rename to packages/core/tests/Node.test.ts index 43768730ea2560b82d7e0d7c9637d5ba0090057d..34a65a2c2c2ad589b24d5ff41358a726bbfeeaae 100644 --- a/packages/core/src/tests/Node.test.ts +++ b/packages/core/tests/Node.test.ts @@ -1,4 +1,5 @@ -import { TextNode } from "../Node"; +import { TextNode } from "llamaindex/Node"; +import { beforeEach, describe, expect, test } from "vitest"; describe("TextNode", () => { let node: TextNode; diff --git a/packages/core/src/tests/OutputParser.test.ts b/packages/core/tests/OutputParser.test.ts similarity index 95% rename from packages/core/src/tests/OutputParser.test.ts rename to packages/core/tests/OutputParser.test.ts index 6ec61d4dc518fe27af06f9261da0e8b287329376..f092a78f2f7348d23ab3b8c8fb91d07e256b1e15 100644 --- a/packages/core/src/tests/OutputParser.test.ts +++ b/packages/core/tests/OutputParser.test.ts @@ -1,4 +1,5 @@ -import { SubQuestionOutputParser } from "../OutputParser"; +import { SubQuestionOutputParser } from "llamaindex/OutputParser"; +import { describe, expect, test } from "vitest"; //This parser is really important, so make sure to add tests // as the parser sees through more iterations. diff --git a/packages/core/src/tests/Selectors.test.ts b/packages/core/tests/Selectors.test.ts similarity index 68% rename from packages/core/src/tests/Selectors.test.ts rename to packages/core/tests/Selectors.test.ts index a615f03fbf9642151037b848d026054d5d17d0b0..2d4c2273413728d3990e58301819fdbdc84ec99b 100644 --- a/packages/core/src/tests/Selectors.test.ts +++ b/packages/core/tests/Selectors.test.ts @@ -1,13 +1,14 @@ +import { describe, expect, test, vi } from "vitest"; // from unittest.mock import patch -import { serviceContextFromDefaults } from "../ServiceContext"; -import { OpenAI } from "../llm"; -import { LLMSingleSelector } from "../selectors"; -import { mocStructuredkLlmGeneration } from "./utility/mockOpenAI"; +import { serviceContextFromDefaults } from "llamaindex/ServiceContext"; +import { OpenAI } from "llamaindex/llm/index"; +import { LLMSingleSelector } from "llamaindex/selectors/index"; +import { mocStructuredkLlmGeneration } from "./utility/mockOpenAI.js"; -jest.mock("../llm/open_ai", () => { +vi.mock("llamaindex/llm/open_ai", () => { return { - getOpenAISession: jest.fn().mockImplementation(() => null), + getOpenAISession: vi.fn().mockImplementation(() => null), }; }); diff --git a/packages/core/src/tests/StorageContext.test.ts b/packages/core/tests/StorageContext.test.ts similarity index 53% rename from packages/core/src/tests/StorageContext.test.ts rename to packages/core/tests/StorageContext.test.ts index dd16d0dd8794fbb621a50c9fdee16439cedfcd4b..c1702a90534907869f339d69873bc1329a49c981 100644 --- a/packages/core/src/tests/StorageContext.test.ts +++ b/packages/core/tests/StorageContext.test.ts @@ -1,11 +1,12 @@ -import { existsSync, rmSync } from "fs"; -import { storageContextFromDefaults } from "../storage/StorageContext"; +import { storageContextFromDefaults } from "llamaindex/storage/StorageContext"; +import { existsSync, rmSync } from "node:fs"; +import { describe, expect, test, vi, vitest } from "vitest"; -jest.spyOn(console, "error"); +vitest.spyOn(console, "error"); describe("StorageContext", () => { test("initializes", async () => { - jest.mocked(console.error).mockImplementation(() => {}); // silence console.error + vi.mocked(console.error).mockImplementation(() => {}); // silence console.error const storageContext = await storageContextFromDefaults({ persistDir: "/tmp/test_dir", diff --git a/packages/core/src/tests/TextSplitter.test.ts b/packages/core/tests/TextSplitter.test.ts similarity index 95% rename from packages/core/src/tests/TextSplitter.test.ts rename to packages/core/tests/TextSplitter.test.ts index baa37cc995be3ca6006ab21672b2119c3c01ed75..90ae962a0578a2dc670a2f30e7cbbb7ff5f48b6e 100644 --- a/packages/core/src/tests/TextSplitter.test.ts +++ b/packages/core/tests/TextSplitter.test.ts @@ -1,4 +1,8 @@ -import { cjkSentenceTokenizer, SentenceSplitter } from "../TextSplitter"; +import { + SentenceSplitter, + cjkSentenceTokenizer, +} from "llamaindex/TextSplitter"; +import { describe, expect, test } from "vitest"; describe("SentenceSplitter", () => { test("initializes", () => { diff --git a/packages/core/src/tests/VectorStore.test.ts b/packages/core/tests/VectorStore.test.ts similarity index 90% rename from packages/core/src/tests/VectorStore.test.ts rename to packages/core/tests/VectorStore.test.ts index 734a6aa56fc26f7be1d11eb8cc865d4b190035f9..290e1e992957d06c959dca869ab44ee27c4d0120 100644 --- a/packages/core/src/tests/VectorStore.test.ts +++ b/packages/core/tests/VectorStore.test.ts @@ -1,8 +1,9 @@ -import { Document, MetadataMode } from "../Node"; +import { Document, MetadataMode } from "llamaindex/Node"; import { metadataDictToNode, nodeToMetadata, -} from "../storage/vectorStore/utils"; +} from "llamaindex/storage/vectorStore/utils"; +import { beforeEach, describe, expect, test } from "vitest"; describe("Testing VectorStore utils", () => { let node: Document; diff --git a/packages/core/src/tests/agent/OpenAIAgent.test.ts b/packages/core/tests/agent/OpenAIAgent.test.ts similarity index 76% rename from packages/core/src/tests/agent/OpenAIAgent.test.ts rename to packages/core/tests/agent/OpenAIAgent.test.ts index 071740a0a96b44ee250b58b3f6161adcdd4b58be..f7f2edf66bee102ca62bbeefb827e0900ee327f3 100644 --- a/packages/core/src/tests/agent/OpenAIAgent.test.ts +++ b/packages/core/tests/agent/OpenAIAgent.test.ts @@ -1,8 +1,9 @@ -import { OpenAIAgent } from "../../agent"; -import { CallbackManager } from "../../callbacks/CallbackManager"; -import { OpenAI } from "../../llm"; -import { FunctionTool } from "../../tools"; -import { mockLlmToolCallGeneration } from "../utility/mockOpenAI"; +import { OpenAIAgent } from "llamaindex/agent/index"; +import { CallbackManager } from "llamaindex/callbacks/CallbackManager"; +import { OpenAI } from "llamaindex/llm/index"; +import { FunctionTool } from "llamaindex/tools/index"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { mockLlmToolCallGeneration } from "../utility/mockOpenAI.js"; // Define a function to sum two numbers function sumNumbers({ a, b }: { a: number; b: number }): number { @@ -24,9 +25,9 @@ const sumJSON = { required: ["a", "b"], }; -jest.mock("../../llm/open_ai", () => { +vi.mock("llamaindex/llm/open_ai", () => { return { - getOpenAISession: jest.fn().mockImplementation(() => null), + getOpenAISession: vi.fn().mockImplementation(() => null), }; }); diff --git a/packages/core/src/tests/agent/runner/AgentRunner.test.ts b/packages/core/tests/agent/runner/AgentRunner.test.ts similarity index 83% rename from packages/core/src/tests/agent/runner/AgentRunner.test.ts rename to packages/core/tests/agent/runner/AgentRunner.test.ts index 27702ad9e687ddb030aa135e1f71b01636942a9e..ceed52ce3e30f55ea223e20e2fa7834ce00d047e 100644 --- a/packages/core/src/tests/agent/runner/AgentRunner.test.ts +++ b/packages/core/tests/agent/runner/AgentRunner.test.ts @@ -1,16 +1,17 @@ -import { OpenAIAgentWorker } from "../../../agent"; -import { AgentRunner } from "../../../agent/runner/base"; -import { CallbackManager } from "../../../callbacks/CallbackManager"; -import { OpenAI } from "../../../llm/LLM"; +import { OpenAIAgentWorker } from "llamaindex/agent/index"; +import { AgentRunner } from "llamaindex/agent/runner/base"; +import { CallbackManager } from "llamaindex/callbacks/CallbackManager"; +import { OpenAI } from "llamaindex/llm/LLM"; +import { beforeEach, describe, expect, it, vi } from "vitest"; import { DEFAULT_LLM_TEXT_OUTPUT, mockLlmGeneration, -} from "../../utility/mockOpenAI"; +} from "../../utility/mockOpenAI.js"; -jest.mock("../../../llm/open_ai", () => { +vi.mock("llamaindex/llm/open_ai", () => { return { - getOpenAISession: jest.fn().mockImplementation(() => null), + getOpenAISession: vi.fn().mockImplementation(() => null), }; }); diff --git a/packages/core/src/tests/ingestion/IngestionCache.test.ts b/packages/core/tests/ingestion/IngestionCache.test.ts similarity index 89% rename from packages/core/src/tests/ingestion/IngestionCache.test.ts rename to packages/core/tests/ingestion/IngestionCache.test.ts index bc4ee1733bd2b4b32484c65673c632f238860dd9..278ef53cf70e687002eae7c5dde891427f6bf38f 100644 --- a/packages/core/src/tests/ingestion/IngestionCache.test.ts +++ b/packages/core/tests/ingestion/IngestionCache.test.ts @@ -1,10 +1,11 @@ -import { BaseNode, TextNode } from "../../Node"; -import { TransformComponent } from "../../ingestion"; +import { BaseNode, TextNode } from "llamaindex/Node"; import { IngestionCache, getTransformationHash, -} from "../../ingestion/IngestionCache"; -import { SimpleNodeParser } from "../../nodeParsers"; +} from "llamaindex/ingestion/IngestionCache"; +import { TransformComponent } from "llamaindex/ingestion/index"; +import { SimpleNodeParser } from "llamaindex/nodeParsers/index"; +import { beforeAll, describe, expect, test } from "vitest"; describe("IngestionCache", () => { let cache: IngestionCache; diff --git a/packages/core/src/tests/mocks/TestableQdrantVectorStore.ts b/packages/core/tests/mocks/TestableQdrantVectorStore.ts similarity index 80% rename from packages/core/src/tests/mocks/TestableQdrantVectorStore.ts rename to packages/core/tests/mocks/TestableQdrantVectorStore.ts index c88ff3d5e331b8729e9643d82b8fb17864f4210c..306d0484641ccb83325d161f950d47936563a540 100644 --- a/packages/core/src/tests/mocks/TestableQdrantVectorStore.ts +++ b/packages/core/tests/mocks/TestableQdrantVectorStore.ts @@ -1,5 +1,5 @@ -import { BaseNode } from "../../Node"; -import { QdrantVectorStore } from "../../storage"; +import { BaseNode } from "llamaindex/Node"; +import { QdrantVectorStore } from "llamaindex/storage/index"; export class TestableQdrantVectorStore extends QdrantVectorStore { public nodes: BaseNode[] = []; diff --git a/packages/core/src/tests/nodeParsers/MarkdownNodeParser.test.ts b/packages/core/tests/nodeParsers/MarkdownNodeParser.test.ts similarity index 92% rename from packages/core/src/tests/nodeParsers/MarkdownNodeParser.test.ts rename to packages/core/tests/nodeParsers/MarkdownNodeParser.test.ts index 456b110d169301bd0e9defb58d6bc5827e6a23e0..b54272341c150cb1eb822dae21e9df414e705b13 100644 --- a/packages/core/src/tests/nodeParsers/MarkdownNodeParser.test.ts +++ b/packages/core/tests/nodeParsers/MarkdownNodeParser.test.ts @@ -1,5 +1,6 @@ -import { Document, MetadataMode } from "../../Node"; -import { MarkdownNodeParser } from "../../nodeParsers"; +import { Document, MetadataMode } from "llamaindex/Node"; +import { MarkdownNodeParser } from "llamaindex/nodeParsers/index"; +import { describe, expect, test } from "vitest"; describe("MarkdownNodeParser", () => { test("test_header_splits", () => { diff --git a/packages/core/src/tests/nodeParsers/SentenceWindowNodeParser.test.ts b/packages/core/tests/nodeParsers/SentenceWindowNodeParser.test.ts similarity index 87% rename from packages/core/src/tests/nodeParsers/SentenceWindowNodeParser.test.ts rename to packages/core/tests/nodeParsers/SentenceWindowNodeParser.test.ts index 143a01932752c1d126a1187a80c37159689baaa2..2ac5a1a3b61c14926dd63dc848bc5624ea53f570 100644 --- a/packages/core/src/tests/nodeParsers/SentenceWindowNodeParser.test.ts +++ b/packages/core/tests/nodeParsers/SentenceWindowNodeParser.test.ts @@ -1,8 +1,9 @@ -import { Document, MetadataMode } from "../../Node"; +import { Document, MetadataMode } from "llamaindex/Node"; import { DEFAULT_WINDOW_METADATA_KEY, SentenceWindowNodeParser, -} from "../../nodeParsers"; +} from "llamaindex/nodeParsers/index"; +import { describe, expect, test } from "vitest"; describe("Tests for the SentenceWindowNodeParser class", () => { test("testing the constructor", () => { diff --git a/packages/core/src/tests/nodeParsers/SimpleNodeParser.test.ts b/packages/core/tests/nodeParsers/SimpleNodeParser.test.ts similarity index 87% rename from packages/core/src/tests/nodeParsers/SimpleNodeParser.test.ts rename to packages/core/tests/nodeParsers/SimpleNodeParser.test.ts index 59eaad92fd6e16418140c60a911861a147eb280c..521d009f58bf737797bd37c7d52b6cac7a4cb8b1 100644 --- a/packages/core/src/tests/nodeParsers/SimpleNodeParser.test.ts +++ b/packages/core/tests/nodeParsers/SimpleNodeParser.test.ts @@ -1,5 +1,6 @@ -import { Document } from "../../Node"; -import { SimpleNodeParser } from "../../nodeParsers"; +import { Document } from "llamaindex/Node"; +import { SimpleNodeParser } from "llamaindex/nodeParsers/index"; +import { beforeEach, describe, expect, test } from "vitest"; describe("SimpleNodeParser", () => { let simpleNodeParser: SimpleNodeParser; diff --git a/packages/core/src/tests/objects/ObjectIndex.test.ts b/packages/core/tests/objects/ObjectIndex.test.ts similarity index 90% rename from packages/core/src/tests/objects/ObjectIndex.test.ts rename to packages/core/tests/objects/ObjectIndex.test.ts index b46616486e0e492150c016a9d8020fc64f3a0667..10a46e771b56d19b41960fd923b85cc659ddb1cf 100644 --- a/packages/core/src/tests/objects/ObjectIndex.test.ts +++ b/packages/core/tests/objects/ObjectIndex.test.ts @@ -7,12 +7,16 @@ import { SimpleToolNodeMapping, VectorStoreIndex, serviceContextFromDefaults, -} from "../../index"; -import { mockEmbeddingModel, mockLlmGeneration } from "../utility/mockOpenAI"; +} from "llamaindex"; +import { beforeAll, describe, expect, test, vi } from "vitest"; +import { + mockEmbeddingModel, + mockLlmGeneration, +} from "../utility/mockOpenAI.js"; -jest.mock("../../llm/open_ai", () => { +vi.mock("llamaindex/llm/open_ai", () => { return { - getOpenAISession: jest.fn().mockImplementation(() => null), + getOpenAISession: vi.fn().mockImplementation(() => null), }; }); diff --git a/packages/core/tests/package.json b/packages/core/tests/package.json new file mode 100644 index 0000000000000000000000000000000000000000..43e89c42fedc36198d3a62140268c58d8d86d10a --- /dev/null +++ b/packages/core/tests/package.json @@ -0,0 +1,14 @@ +{ + "name": "@llamaindex/core-test", + "private": true, + "type": "module", + "scripts": { + "test": "vitest run" + }, + "dependencies": { + "llamaindex": "workspace:*" + }, + "devDependencies": { + "vitest": "^1.3.1" + } +} diff --git a/packages/core/src/tests/postprocessors/MetadataReplacementPostProcessor.test.ts b/packages/core/tests/postprocessors/MetadataReplacementPostProcessor.test.ts similarity index 82% rename from packages/core/src/tests/postprocessors/MetadataReplacementPostProcessor.test.ts rename to packages/core/tests/postprocessors/MetadataReplacementPostProcessor.test.ts index 1e6f16c9d647648eb48f12c4b74185d533f6adf5..360b242c6feb757fda8e555ef476d798d8abe0c0 100644 --- a/packages/core/src/tests/postprocessors/MetadataReplacementPostProcessor.test.ts +++ b/packages/core/tests/postprocessors/MetadataReplacementPostProcessor.test.ts @@ -1,5 +1,6 @@ -import { MetadataMode, NodeWithScore, TextNode } from "../../Node"; -import { MetadataReplacementPostProcessor } from "../../postprocessors"; +import { MetadataMode, NodeWithScore, TextNode } from "llamaindex/Node"; +import { MetadataReplacementPostProcessor } from "llamaindex/postprocessors/index"; +import { beforeEach, describe, expect, test } from "vitest"; describe("MetadataReplacementPostProcessor", () => { let postProcessor: MetadataReplacementPostProcessor; diff --git a/packages/core/src/tests/prompts/Mixin.test.ts b/packages/core/tests/prompts/Mixin.test.ts similarity index 96% rename from packages/core/src/tests/prompts/Mixin.test.ts rename to packages/core/tests/prompts/Mixin.test.ts index ba9293ce619695f1accab8629776bf7a92c8cbd6..4af1976337b2268301cd88aabc833fa9bf554ce9 100644 --- a/packages/core/src/tests/prompts/Mixin.test.ts +++ b/packages/core/tests/prompts/Mixin.test.ts @@ -1,4 +1,5 @@ -import { PromptMixin } from "../../prompts"; +import { PromptMixin } from "llamaindex/prompts/index"; +import { describe, expect, it } from "vitest"; type MockPrompt = { context: string; diff --git a/packages/core/src/tests/readers/DocxReader.test.ts b/packages/core/tests/readers/DocxReader.test.ts similarity index 73% rename from packages/core/src/tests/readers/DocxReader.test.ts rename to packages/core/tests/readers/DocxReader.test.ts index dc6ae4eb912752e63bf47776feb27f5f9d71569f..4025d334857db87629d792ce94a8f62d2b7c93cf 100644 --- a/packages/core/src/tests/readers/DocxReader.test.ts +++ b/packages/core/tests/readers/DocxReader.test.ts @@ -1,4 +1,5 @@ -import { DocxReader } from "../../readers/DocxReader"; +import { DocxReader } from "llamaindex/readers/DocxReader"; +import { beforeEach, describe, expect, it } from "vitest"; describe("DocxReader", () => { let docxReader: DocxReader; @@ -9,7 +10,7 @@ describe("DocxReader", () => { describe("loadData", () => { it("should load data from a docx file, return an array of documents and contain text", async () => { - const filePath = "../../examples/data/stars.docx"; + const filePath = "../../../examples/data/stars.docx"; const docs = await docxReader.loadData(filePath); const docContent = docs.map((doc) => doc.text).join(""); diff --git a/packages/core/src/tests/readers/MarkdownReader.test.ts b/packages/core/tests/readers/MarkdownReader.test.ts similarity index 73% rename from packages/core/src/tests/readers/MarkdownReader.test.ts rename to packages/core/tests/readers/MarkdownReader.test.ts index 7ab4f22bec7789a88c6be1127d3dfef7cd2606c9..c95c25a9bb88bf5eb400111ce821a91d3f98a6a6 100644 --- a/packages/core/src/tests/readers/MarkdownReader.test.ts +++ b/packages/core/tests/readers/MarkdownReader.test.ts @@ -1,4 +1,5 @@ -import { MarkdownReader } from "../../readers/MarkdownReader"; +import { MarkdownReader } from "llamaindex/readers/MarkdownReader"; +import { beforeEach, describe, expect, it } from "vitest"; describe("MarkdownReader", () => { let markdownReader: MarkdownReader; @@ -9,7 +10,7 @@ describe("MarkdownReader", () => { describe("loadData", () => { it("should load data from a markdown file, return an array of documents and contain text", async () => { - const filePath = "../../examples/data/planets.md"; + const filePath = "../../../examples/data/planets.md"; const docs = await markdownReader.loadData(filePath); const docContent = docs.map((doc) => doc.text).join(""); diff --git a/packages/core/src/tests/tools/Tools.test.ts b/packages/core/tests/tools/Tools.test.ts similarity index 82% rename from packages/core/src/tests/tools/Tools.test.ts rename to packages/core/tests/tools/Tools.test.ts index 767a8608a910b7b00e8eab2e999c5505d1d56a0c..e2edfbe610322d89ae32a48ab5126831e7748150 100644 --- a/packages/core/src/tests/tools/Tools.test.ts +++ b/packages/core/tests/tools/Tools.test.ts @@ -1,5 +1,6 @@ -import { FunctionTool, ToolOutput } from "../../tools"; -import { callToolWithErrorHandling } from "../../tools/utils"; +import { FunctionTool, ToolOutput } from "llamaindex/tools/index"; +import { callToolWithErrorHandling } from "llamaindex/tools/utils"; +import { describe, expect, it } from "vitest"; function sumNumbers({ a, b }: { a: number; b: number }): number { return a + b; diff --git a/packages/core/tests/tsconfig.json b/packages/core/tests/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..6576baf06d4a003462ff40e8fa45a75900ef3f6a --- /dev/null +++ b/packages/core/tests/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./lib", + "module": "node16", + "moduleResolution": "node16", + "target": "ESNext" + }, + "include": ["./**/*.ts"] +} diff --git a/packages/core/tests/utility/mockOpenAI.ts b/packages/core/tests/utility/mockOpenAI.ts new file mode 100644 index 0000000000000000000000000000000000000000..b2d684686c4db1eb48cc8d89105cc82707c1ea12 --- /dev/null +++ b/packages/core/tests/utility/mockOpenAI.ts @@ -0,0 +1,171 @@ +import { globalsHelper } from "llamaindex/GlobalsHelper"; +import { CallbackManager } from "llamaindex/callbacks/CallbackManager"; +import { OpenAIEmbedding } from "llamaindex/embeddings/index"; +import { OpenAI } from "llamaindex/llm/LLM"; +import { LLMChatParamsBase } from "llamaindex/llm/types"; +import { vi } from "vitest"; + +export const DEFAULT_LLM_TEXT_OUTPUT = "MOCK_TOKEN_1-MOCK_TOKEN_2"; + +export function mockLlmGeneration({ + languageModel, + callbackManager, +}: { + languageModel: OpenAI; + callbackManager?: CallbackManager; +}) { + vi.spyOn(languageModel, "chat").mockImplementation( + async ({ messages, parentEvent }: LLMChatParamsBase) => { + const text = DEFAULT_LLM_TEXT_OUTPUT; + const event = globalsHelper.createEvent({ + parentEvent, + type: "llmPredict", + }); + if (callbackManager?.onLLMStream) { + const chunks = text.split("-"); + for (let i = 0; i < chunks.length; i++) { + const chunk = chunks[i]; + callbackManager?.onLLMStream({ + event, + index: i, + token: { + id: "id", + object: "object", + created: 1, + model: "model", + choices: [ + { + index: 0, + delta: { + content: chunk, + }, + finish_reason: null, + }, + ], + }, + }); + } + callbackManager?.onLLMStream({ + event, + index: chunks.length, + isDone: true, + }); + } + return new Promise((resolve) => { + resolve({ + message: { + content: text, + role: "assistant", + }, + }); + }); + }, + ); +} + +export function mockLlmToolCallGeneration({ + languageModel, + callbackManager, +}: { + languageModel: OpenAI; + callbackManager: CallbackManager; +}) { + vi.spyOn(languageModel, "chat").mockImplementation( + () => + new Promise((resolve) => + resolve({ + message: { + content: "The sum is 2", + role: "assistant", + }, + }), + ), + ); +} + +export function mockEmbeddingModel( + embedModel: OpenAIEmbedding, + embeddingsLength: number = 1, +) { + vi.spyOn(embedModel, "getTextEmbedding").mockImplementation(async (x) => { + return new Promise((resolve) => { + resolve([1, 0, 0, 0, 0, 0]); + }); + }); + vi.spyOn(embedModel, "getTextEmbeddings").mockImplementation(async (x) => { + return new Promise((resolve) => { + if (x.length > 1) { + resolve(Array(x.length).fill([1, 0, 0, 0, 0, 0])); + } + resolve([[1, 0, 0, 0, 0, 0]]); + }); + }); + vi.spyOn(embedModel, "getQueryEmbedding").mockImplementation(async (x) => { + return new Promise((resolve) => { + resolve([0, 1, 0, 0, 0, 0]); + }); + }); +} + +const structuredOutput = JSON.stringify([ + { + choice: 1, + reason: "apple", + }, +]); + +export function mocStructuredkLlmGeneration({ + languageModel, + callbackManager, +}: { + languageModel: OpenAI; + callbackManager: CallbackManager; +}) { + vi.spyOn(languageModel, "chat").mockImplementation( + async ({ messages, parentEvent }: LLMChatParamsBase) => { + const text = structuredOutput; + const event = globalsHelper.createEvent({ + parentEvent, + type: "llmPredict", + }); + if (callbackManager?.onLLMStream) { + const chunks = text.split("-"); + for (let i = 0; i < chunks.length; i++) { + const chunk = chunks[i]; + callbackManager?.onLLMStream({ + event, + index: i, + token: { + id: "id", + object: "object", + created: 1, + model: "model", + choices: [ + { + index: 0, + delta: { + content: chunk, + }, + finish_reason: null, + }, + ], + }, + }); + } + callbackManager?.onLLMStream({ + event, + index: chunks.length, + isDone: true, + }); + } + return new Promise((resolve) => { + resolve({ + message: { + content: text, + role: "assistant", + }, + }); + }); + }, + ); +} diff --git a/packages/core/src/tests/vectorStores/QdrantVectorStore.test.ts b/packages/core/tests/vectorStores/QdrantVectorStore.test.ts similarity index 86% rename from packages/core/src/tests/vectorStores/QdrantVectorStore.test.ts rename to packages/core/tests/vectorStores/QdrantVectorStore.test.ts index 01833e18380de93caf8eb96583c2ce8f32ecf868..67cda1b46d1d6b775526b43fad076a8bd035dad8 100644 --- a/packages/core/src/tests/vectorStores/QdrantVectorStore.test.ts +++ b/packages/core/tests/vectorStores/QdrantVectorStore.test.ts @@ -1,17 +1,18 @@ -import { BaseNode, TextNode } from "../../Node"; +import { BaseNode, TextNode } from "llamaindex/Node"; +import { Mocked, beforeEach, describe, expect, it, vi } from "vitest"; import { QdrantClient } from "@qdrant/js-client-rest"; -import { VectorStoreQueryMode } from "../../storage"; -import { TestableQdrantVectorStore } from "../mocks/TestableQdrantVectorStore"; +import { VectorStoreQueryMode } from "llamaindex/storage/index"; +import { TestableQdrantVectorStore } from "../mocks/TestableQdrantVectorStore.js"; -jest.mock("@qdrant/js-client-rest"); +vi.mock("@qdrant/js-client-rest"); describe("QdrantVectorStore", () => { let store: TestableQdrantVectorStore; - let mockQdrantClient: jest.Mocked<QdrantClient>; + let mockQdrantClient: Mocked<QdrantClient>; beforeEach(() => { - mockQdrantClient = new QdrantClient() as jest.Mocked<QdrantClient>; + mockQdrantClient = new QdrantClient() as Mocked<QdrantClient>; store = new TestableQdrantVectorStore({ client: mockQdrantClient, collectionName: "testCollection", @@ -41,11 +42,11 @@ describe("QdrantVectorStore", () => { describe("[QdrantVectorStore] add", () => { it("should add nodes to the vector store", async () => { // Mocking the dependent methods and Qdrant client responses - const mockInitializeCollection = jest + const mockInitializeCollection = vi .spyOn(store, "initializeCollection") .mockResolvedValue(); - const mockBuildPoints = jest + const mockBuildPoints = vi .spyOn(store, "buildPoints") .mockResolvedValue({ points: [{ id: "1", payload: {}, vector: [0.1, 0.2] }], @@ -78,9 +79,9 @@ describe("QdrantVectorStore", () => { describe("[QdrantVectorStore] delete", () => { it("should delete from the vector store", async () => { - jest.spyOn(store, "initializeCollection").mockResolvedValue(); + vi.spyOn(store, "initializeCollection").mockResolvedValue(); - jest.spyOn(store, "buildPoints").mockResolvedValue({ + vi.spyOn(store, "buildPoints").mockResolvedValue({ points: [{ id: "1", payload: {}, vector: [0.1, 0.2] }], ids: ["1"], }); diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 8ef1bfbe6d0c747563a7ec7654efa1c1b614a4ac..535cfc3a83c8e883b8d117b454ecd03639d960f7 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,18 +1,16 @@ { "compilerOptions": { - "rootDir": ".", - "outDir": "./lib/", + "rootDir": "./src", + "outDir": "./dist/type", + "declaration": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "module": "esnext", - "moduleResolution": "node", - "preserveWatchOutput": true, + "module": "node16", + "moduleResolution": "node16", "skipLibCheck": true, "strict": true, - "lib": ["es2015", "dom"], - "target": "ES2015", - "resolveJsonModule": true + "lib": ["ESNext", "dom"], + "target": "ESNext" }, "include": ["./src"], "exclude": ["node_modules"] diff --git a/packages/env/.cjs.swcrc b/packages/env/.cjs.swcrc new file mode 100644 index 0000000000000000000000000000000000000000..14193839df49abbada7bcc60e6fe4bc73a477b42 --- /dev/null +++ b/packages/env/.cjs.swcrc @@ -0,0 +1,11 @@ +{ + "jsc": { + "parser": { + "syntax": "typescript" + }, + "target": "esnext" + }, + "module": { + "type": "commonjs" + } +} diff --git a/packages/env/.swcrc b/packages/env/.swcrc new file mode 100644 index 0000000000000000000000000000000000000000..60e144e7209dd5b8297d793f22a7a9c1cc49c215 --- /dev/null +++ b/packages/env/.swcrc @@ -0,0 +1,8 @@ +{ + "jsc": { + "parser": { + "syntax": "typescript" + }, + "target": "esnext" + } +} diff --git a/packages/env/package.json b/packages/env/package.json new file mode 100644 index 0000000000000000000000000000000000000000..02a07b9bd6ba177ea8e0a45a731983b2717f4979 --- /dev/null +++ b/packages/env/package.json @@ -0,0 +1,61 @@ +{ + "name": "@llamaindex/env", + "description": "environment wrapper", + "version": "0.0.1", + "type": "module", + "types": "dist/type/index.d.ts", + "main": "dist/cjs/index.cjs", + "exports": { + ".": { + "workerd": { + "types": "./dist/type/index.d.ts", + "default": "./dist/index.polyfill.js" + }, + "edge-light": { + "types": "./dist/type/index.d.ts", + "default": "./dist/index.polyfill.js" + }, + "import": { + "types": "./dist/type/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/type/index.d.ts", + "default": "./dist/cjs/index.cjs" + } + }, + "./*": { + "import": { + "types": "./dist/type/*.d.ts", + "default": "./dist/*.js" + }, + "require": { + "types": "./dist/type/*.d.ts", + "default": "./dist/cjs/*.js" + } + } + }, + "repository": { + "type": "git", + "url": "https://github.com/himself65/LlamaIndexTS.git", + "directory": "packages/env" + }, + "scripts": { + "build": "rm -rf ./dist && pnpm run build:esm && pnpm run build:cjs && pnpm run build:type", + "build:esm": "swc src -d dist --strip-leading-paths --config-file .swcrc", + "build:cjs": "swc src -d dist/cjs --strip-leading-paths --config-file .cjs.swcrc --out-file-extension cjs", + "build:type": "tsc -p tsconfig.json", + "dev": "concurrently \"pnpm run build:esm --watch\" \"pnpm run build:cjs --watch\" \"pnpm run build:type --watch\"" + }, + "devDependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@swc/cli": "^0.3.9", + "@swc/core": "^1.4.2", + "@types/lodash": "^4.14.202", + "@types/node": "^20.11.20", + "pathe": "^1.1.2" + }, + "dependencies": { + "lodash": "^4.17.21" + } +} diff --git a/packages/core/src/env/index.edge-light.ts b/packages/env/src/index.polyfill.ts similarity index 92% rename from packages/core/src/env/index.edge-light.ts rename to packages/env/src/index.polyfill.ts index 522fcca3e3b4cdc2d5982aa2af9b2a30504ad55d..db252082031d278acb2173396b5cd2604193a50c 100644 --- a/packages/core/src/env/index.edge-light.ts +++ b/packages/env/src/index.polyfill.ts @@ -1,6 +1,6 @@ import { Sha256 } from "@aws-crypto/sha256-js"; import pathe from "pathe"; -import { CompleteFileSystem, InMemoryFileSystem } from "../storage"; +import { CompleteFileSystem, InMemoryFileSystem } from "./type.js"; export { pathe as path }; diff --git a/packages/core/src/env/index.ts b/packages/env/src/index.ts similarity index 89% rename from packages/core/src/env/index.ts rename to packages/env/src/index.ts index 286efe6836f3342773ec5e9e68b41fa08028babd..9ab472d92af6a888e71350d3a84e02117335390c 100644 --- a/packages/core/src/env/index.ts +++ b/packages/env/src/index.ts @@ -3,8 +3,8 @@ import { createHash, randomUUID } from "node:crypto"; import fs from "node:fs/promises"; import { EOL } from "node:os"; import path from "node:path"; -import type { CompleteFileSystem } from "../storage"; -import type { SHA256 } from "./index.edge-light"; +import type { SHA256 } from "./index.polyfill.js"; +import type { CompleteFileSystem } from "./type.js"; export function createSHA256(): SHA256 { const hash = createHash("sha256"); diff --git a/packages/env/src/type.ts b/packages/env/src/type.ts new file mode 100644 index 0000000000000000000000000000000000000000..00fb0a613dbde09f39a3d38cdbfc4d18bb95ca2c --- /dev/null +++ b/packages/env/src/type.ts @@ -0,0 +1,77 @@ +import _ from "lodash"; + +/** + * A filesystem interface that is meant to be compatible with + * the 'fs' module from Node.js. + * Allows for the use of similar inteface implementation on + * browsers. + */ +export type GenericFileSystem = { + writeFile(path: string, content: string): Promise<void>; + /** + * Reads a file and returns its content as a raw buffer. + */ + readRawFile(path: string): Promise<Buffer>; + /** + * Reads a file and returns its content as an utf-8 string. + */ + readFile(path: string): Promise<string>; + access(path: string): Promise<void>; + mkdir( + path: string, + options: { + recursive: boolean; + }, + ): Promise<string | undefined>; + mkdir(path: string): Promise<void>; +}; +export type WalkableFileSystem = { + readdir(path: string): Promise<string[]>; + stat(path: string): Promise<any>; +}; +export type CompleteFileSystem = GenericFileSystem & WalkableFileSystem; + +/** + * A filesystem implementation that stores files in memory. + */ +export class InMemoryFileSystem implements CompleteFileSystem { + private files: Record<string, any> = {}; + + async writeFile( + path: string, + content: string, + options?: unknown, + ): Promise<void> { + this.files[path] = _.cloneDeep(content); + } + + async readFile(path: string): Promise<string> { + if (!(path in this.files)) { + throw new Error(`File ${path} does not exist`); + } + return _.cloneDeep(this.files[path]); + } + + async access(path: string): Promise<void> { + if (!(path in this.files)) { + throw new Error(`File ${path} does not exist`); + } + } + + async mkdir(path: string) { + this.files[path] = _.get(this.files, path, null); + return undefined; + } + + async readdir(path: string): Promise<string[]> { + throw new Error("Not implemented"); + } + + async stat(path: string): Promise<any> { + throw new Error("Not implemented"); + } + + async readRawFile(path: string): Promise<Buffer> { + throw new Error("Not implemented"); + } +} diff --git a/packages/env/tsconfig.json b/packages/env/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..419912df410d8c10eb89f4f88c80ffc0fc75640a --- /dev/null +++ b/packages/env/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist/type", + "declaration": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "module": "node16", + "moduleResolution": "node16", + "skipLibCheck": true, + "strict": true, + "lib": ["ESNext", "dom"], + "types": ["node"], + "target": "ESNext" + }, + "include": ["./src"], + "exclude": ["node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b853adf3fc860bbfb56bd2ffde3010f3f777777..bc0f6a230ce71450e085bb2b05d5c59866843fba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,9 +15,6 @@ importers: '@changesets/cli': specifier: ^2.27.1 version: 2.27.1 - '@types/jest': - specifier: ^29.5.12 - version: 29.5.12 eslint: specifier: ^8.56.0 version: 8.56.0 @@ -27,9 +24,6 @@ importers: husky: specifier: ^9.0.10 version: 9.0.10 - jest: - specifier: ^29.7.0 - version: 29.7.0 lint-staged: specifier: ^15.2.2 version: 15.2.2 @@ -39,9 +33,6 @@ importers: prettier-plugin-organize-imports: specifier: ^3.2.4 version: 3.2.4(prettier@3.2.5)(typescript@5.3.3) - ts-jest: - specifier: ^29.1.2 - version: 29.1.2(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.3.3) turbo: specifier: ^1.12.3 version: 1.12.3 @@ -168,9 +159,18 @@ importers: '@anthropic-ai/sdk': specifier: ^0.13.0 version: 0.13.0 + '@aws-crypto/sha256-js': + specifier: ^5.2.0 + version: 5.2.0 '@datastax/astra-db-ts': specifier: ^0.1.4 version: 0.1.4 + '@llamaindex/cloud': + specifier: ^0.0.1 + version: 0.0.1 + '@llamaindex/env': + specifier: workspace:* + version: link:../env '@mistralai/mistralai': specifier: ^0.0.10 version: 0.0.10 @@ -250,18 +250,12 @@ importers: specifier: ^1.14.3 version: 1.14.3 devDependencies: - '@aws-crypto/sha256-js': - specifier: ^5.2.0 - version: 5.2.0 - '@llamaindex/cloud': - specifier: ^0.0.1 - version: 0.0.1 - '@types/edit-json-file': - specifier: ^1.7.3 - version: 1.7.3 - '@types/jest': - specifier: ^29.5.12 - version: 29.5.12 + '@swc/cli': + specifier: ^0.3.9 + version: 0.3.9(@swc/core@1.4.2) + '@swc/core': + specifier: ^1.4.2 + version: 1.4.2 '@types/lodash': specifier: ^4.14.202 version: 4.14.202 @@ -274,12 +268,12 @@ importers: '@types/pg': specifier: ^8.11.0 version: 8.11.0 - bunchee: - specifier: ^4.4.6 - version: 4.4.6(typescript@5.3.3) - edit-json-file: - specifier: ^1.8.0 - version: 1.8.0 + concurrently: + specifier: ^8.2.2 + version: 8.2.2 + glob: + specifier: ^10.3.10 + version: 10.3.10 madge: specifier: ^6.1.0 version: 6.1.0(typescript@5.3.3) @@ -287,6 +281,16 @@ importers: specifier: ^5.3.3 version: 5.3.3 + packages/core/tests: + dependencies: + llamaindex: + specifier: workspace:* + version: link:.. + devDependencies: + vitest: + specifier: ^1.3.1 + version: 1.3.1 + packages/create-llama: devDependencies: '@playwright/test': @@ -368,6 +372,31 @@ importers: specifier: ^1.1.0 version: 1.1.0 + packages/env: + dependencies: + lodash: + specifier: ^4.17.21 + version: 4.17.21 + devDependencies: + '@aws-crypto/sha256-js': + specifier: ^5.2.0 + version: 5.2.0 + '@swc/cli': + specifier: ^0.3.9 + version: 0.3.9(@swc/core@1.4.2) + '@swc/core': + specifier: ^1.4.2 + version: 1.4.2 + '@types/lodash': + specifier: ^4.14.202 + version: 4.14.202 + '@types/node': + specifier: ^20.11.20 + version: 20.11.20 + pathe: + specifier: ^1.1.2 + version: 1.1.2 + packages/eslint-config-custom: dependencies: eslint-config-next: @@ -385,7 +414,7 @@ importers: devDependencies: next: specifier: ^13.5.6 - version: 13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) + version: 13.5.6(react-dom@18.2.0)(react@18.2.0) packages/tsconfig: {} @@ -563,7 +592,6 @@ packages: '@aws-crypto/util': 5.2.0 '@aws-sdk/types': 3.496.0 tslib: 2.6.2 - dev: true /@aws-crypto/util@5.2.0: resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} @@ -571,7 +599,6 @@ packages: '@aws-sdk/types': 3.496.0 '@smithy/util-utf8': 2.1.1 tslib: 2.6.2 - dev: true /@aws-sdk/types@3.496.0: resolution: {integrity: sha512-umkGadK4QuNQaMoDICMm7NKRI/mYSXiyPjcn3d53BhsuArYU/52CebGQKdt4At7SwwsiVJZw9RNBHyN5Mm0HVw==} @@ -579,7 +606,6 @@ packages: dependencies: '@smithy/types': 2.9.1 tslib: 2.6.2 - dev: true /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} @@ -878,15 +904,6 @@ packages: '@babel/core': 7.23.9 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.9): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: @@ -1795,10 +1812,6 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true - /@changesets/apply-release-plan@7.0.0: resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} dependencies: @@ -2895,6 +2908,213 @@ packages: - uglify-js - webpack-cli + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2933,10 +3153,6 @@ packages: engines: {node: '>=14'} dev: false - /@fastify/deepmerge@1.3.0: - resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==} - dev: true - /@hapi/hoek@9.3.0: resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -2979,241 +3195,30 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: true - - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true - - /@jest/console@29.7.0: - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - dev: true + '@sinclair/typebox': 0.27.8 - /@jest/core@29.7.0: - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 '@types/node': 20.11.17 - ansi-escapes: 4.3.2 + '@types/yargs': 17.0.32 chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.11.17) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.5 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - dev: true - /@jest/environment@29.7.0: - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - jest-mock: 29.7.0 - dev: true - - /@jest/expect-utils@29.7.0: - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.6.3 - dev: true - - /@jest/expect@29.7.0: - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/fake-timers@29.7.0: - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.11.17 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - dev: true - - /@jest/globals@29.7.0: - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/reporters@29.7.0: - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.22 - '@types/node': 20.11.17 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.1 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.27.8 - - /@jest/source-map@29.6.3: - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jridgewell/trace-mapping': 0.3.22 - callsites: 3.1.0 - graceful-fs: 4.2.11 - dev: true - - /@jest/test-result@29.7.0: - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - dev: true - - /@jest/test-sequencer@29.7.0: - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - dev: true - - /@jest/transform@29.7.0: - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/core': 7.23.9 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.22 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.5 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.17 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.22 /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} @@ -3250,7 +3255,7 @@ packages: /@llamaindex/cloud@0.0.1: resolution: {integrity: sha512-7FrLAbY459B4rcG4NaqANatDT5zKvZxIRyrY+nnTSXqu9ZMzkm1Co8IIRYx2/9feps/OLOhXsv7VKGGUr7scNQ==} - dev: true + dev: false /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} @@ -3319,6 +3324,20 @@ packages: - encoding dev: false + /@mole-inc/bin-wrapper@8.0.1: + resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + bin-check: 4.1.0 + bin-version-check: 5.1.0 + content-disposition: 0.5.4 + ext-name: 5.0.0 + file-type: 17.1.6 + filenamify: 5.1.1 + got: 11.8.6 + os-filter-obj: 2.0.0 + dev: true + /@mongodb-js/saslprep@1.1.1: resolution: {integrity: sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ==} dependencies: @@ -3560,195 +3579,104 @@ packages: engines: {node: '>=12.0.0', pnpm: '>=8'} dev: false - /@rollup/plugin-commonjs@25.0.7(rollup@4.9.5): - resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.68.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.9.5) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 8.1.0 - is-reference: 1.2.1 - magic-string: 0.30.7 - rollup: 4.9.5 - dev: true - - /@rollup/plugin-json@6.1.0(rollup@4.9.5): - resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.9.5) - rollup: 4.9.5 - dev: true - - /@rollup/plugin-node-resolve@15.2.3(rollup@4.9.5): - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.9.5) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 4.9.5 - dev: true - - /@rollup/plugin-replace@5.0.5(rollup@4.9.5): - resolution: {integrity: sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.9.5) - magic-string: 0.30.7 - rollup: 4.9.5 - dev: true - - /@rollup/plugin-wasm@6.2.2(rollup@4.9.5): - resolution: {integrity: sha512-gpC4R1G9Ni92ZIRTexqbhX7U+9estZrbhP+9SRb0DW9xpB9g7j34r+J2hqrcW/lRI7dJaU84MxZM0Rt82tqYPQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.9.5) - rollup: 4.9.5 - dev: true - - /@rollup/pluginutils@5.1.0(rollup@4.9.5): - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - rollup: 4.9.5 - dev: true - - /@rollup/rollup-android-arm-eabi@4.9.5: - resolution: {integrity: sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==} + /@rollup/rollup-android-arm-eabi@4.12.0: + resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.9.5: - resolution: {integrity: sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==} + /@rollup/rollup-android-arm64@4.12.0: + resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.9.5: - resolution: {integrity: sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==} + /@rollup/rollup-darwin-arm64@4.12.0: + resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.9.5: - resolution: {integrity: sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==} + /@rollup/rollup-darwin-x64@4.12.0: + resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.9.5: - resolution: {integrity: sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==} + /@rollup/rollup-linux-arm-gnueabihf@4.12.0: + resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.9.5: - resolution: {integrity: sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==} + /@rollup/rollup-linux-arm64-gnu@4.12.0: + resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.9.5: - resolution: {integrity: sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==} + /@rollup/rollup-linux-arm64-musl@4.12.0: + resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.9.5: - resolution: {integrity: sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==} + /@rollup/rollup-linux-riscv64-gnu@4.12.0: + resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.9.5: - resolution: {integrity: sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==} + /@rollup/rollup-linux-x64-gnu@4.12.0: + resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.9.5: - resolution: {integrity: sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==} + /@rollup/rollup-linux-x64-musl@4.12.0: + resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.9.5: - resolution: {integrity: sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==} + /@rollup/rollup-win32-arm64-msvc@4.12.0: + resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.9.5: - resolution: {integrity: sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==} + /@rollup/rollup-win32-ia32-msvc@4.12.0: + resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.9.5: - resolution: {integrity: sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==} + /@rollup/rollup-win32-x64-msvc@4.12.0: + resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==} cpu: [x64] os: [win32] requiresBuild: true @@ -3794,18 +3722,6 @@ packages: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} - /@sinonjs/commons@3.0.1: - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - dependencies: - type-detect: 4.0.8 - dev: true - - /@sinonjs/fake-timers@10.3.0: - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - dependencies: - '@sinonjs/commons': 3.0.1 - dev: true - /@slorber/remark-comment@1.0.0: resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} dependencies: @@ -3826,14 +3742,12 @@ packages: engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 - dev: true /@smithy/types@2.9.1: resolution: {integrity: sha512-vjXlKNXyprDYDuJ7UW5iobdmyDm6g8dDG+BFUncAg/3XJaN45Gy5RWWWUVgrzIK7S4R1KWgIX5LeJcfvSI24bw==} engines: {node: '>=14.0.0'} dependencies: tslib: 2.6.2 - dev: true /@smithy/util-buffer-from@2.1.1: resolution: {integrity: sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==} @@ -3841,7 +3755,6 @@ packages: dependencies: '@smithy/is-array-buffer': 2.1.1 tslib: 2.6.2 - dev: true /@smithy/util-utf8@2.1.1: resolution: {integrity: sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==} @@ -3849,7 +3762,6 @@ packages: dependencies: '@smithy/util-buffer-from': 2.1.1 tslib: 2.6.2 - dev: true /@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.23.9): resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} @@ -3990,8 +3902,31 @@ packages: transitivePeerDependencies: - supports-color - /@swc/core-darwin-arm64@1.3.107: - resolution: {integrity: sha512-47tD/5vSXWxPd0j/ZllyQUg4bqalbQTsmqSw0J4dDdS82MWqCAwUErUrAZPRjBkjNQ6Kmrf5rpCWaGTtPw+ngw==} + /@swc/cli@0.3.9(@swc/core@1.4.2): + resolution: {integrity: sha512-e5grxGEyNT0fYZEFmhSrRYL1kFAZAXlv+WjfQ35J6J9Hl0EtrMVymAEbGabetg2Q/2FX6HiRcjgc9LrdUCBk4A==} + engines: {node: '>= 16.14.0'} + hasBin: true + peerDependencies: + '@swc/core': ^1.2.66 + chokidar: ^3.5.1 + peerDependenciesMeta: + chokidar: + optional: true + dependencies: + '@mole-inc/bin-wrapper': 8.0.1 + '@swc/core': 1.4.2 + '@swc/counter': 0.1.3 + commander: 7.2.0 + fast-glob: 3.3.1 + minimatch: 9.0.3 + piscina: 4.3.2 + semver: 7.6.0 + slash: 3.0.0 + source-map: 0.7.4 + dev: true + + /@swc/core-darwin-arm64@1.4.2: + resolution: {integrity: sha512-1uSdAn1MRK5C1m/TvLZ2RDvr0zLvochgrZ2xL+lRzugLlCTlSA+Q4TWtrZaOz+vnnFVliCpw7c7qu0JouhgQIw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -3999,8 +3934,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.3.107: - resolution: {integrity: sha512-hwiLJ2ulNkBGAh1m1eTfeY1417OAYbRGcb/iGsJ+LuVLvKAhU/itzsl535CvcwAlt2LayeCFfcI8gdeOLeZa9A==} + /@swc/core-darwin-x64@1.4.2: + resolution: {integrity: sha512-TYD28+dCQKeuxxcy7gLJUCFLqrwDZnHtC2z7cdeGfZpbI2mbfppfTf2wUPzqZk3gEC96zHd4Yr37V3Tvzar+lQ==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -4008,8 +3943,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.107: - resolution: {integrity: sha512-I2wzcC0KXqh0OwymCmYwNRgZ9nxX7DWnOOStJXV3pS0uB83TXAkmqd7wvMBuIl9qu4Hfomi9aDM7IlEEn9tumQ==} + /@swc/core-linux-arm-gnueabihf@1.4.2: + resolution: {integrity: sha512-Eyqipf7ZPGj0vplKHo8JUOoU1un2sg5PjJMpEesX0k+6HKE2T8pdyeyXODN0YTFqzndSa/J43EEPXm+rHAsLFQ==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -4017,8 +3952,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.3.107: - resolution: {integrity: sha512-HWgnn7JORYlOYnGsdunpSF8A+BCZKPLzLtEUA27/M/ZuANcMZabKL9Zurt7XQXq888uJFAt98Gy+59PU90aHKg==} + /@swc/core-linux-arm64-gnu@1.4.2: + resolution: {integrity: sha512-wZn02DH8VYPv3FC0ub4my52Rttsus/rFw+UUfzdb3tHMHXB66LqN+rR0ssIOZrH6K+VLN6qpTw9VizjyoH0BxA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -4026,8 +3961,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.3.107: - resolution: {integrity: sha512-vfPF74cWfAm8hyhS8yvYI94ucMHIo8xIYU+oFOW9uvDlGQRgnUf/6DEVbLyt/3yfX5723Ln57U8uiMALbX5Pyw==} + /@swc/core-linux-arm64-musl@1.4.2: + resolution: {integrity: sha512-3G0D5z9hUj9bXNcwmA1eGiFTwe5rWkuL3DsoviTj73TKLpk7u64ND0XjEfO0huVv4vVu9H1jodrKb7nvln/dlw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -4035,8 +3970,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.3.107: - resolution: {integrity: sha512-uBVNhIg0ip8rH9OnOsCARUFZ3Mq3tbPHxtmWk9uAa5u8jQwGWeBx5+nTHpDOVd3YxKb6+5xDEI/edeeLpha/9g==} + /@swc/core-linux-x64-gnu@1.4.2: + resolution: {integrity: sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -4044,8 +3979,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.3.107: - resolution: {integrity: sha512-mvACkUvzSIB12q1H5JtabWATbk3AG+pQgXEN95AmEX2ZA5gbP9+B+mijsg7Sd/3tboHr7ZHLz/q3SHTvdFJrEw==} + /@swc/core-linux-x64-musl@1.4.2: + resolution: {integrity: sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -4053,8 +3988,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.3.107: - resolution: {integrity: sha512-J3P14Ngy/1qtapzbguEH41kY109t6DFxfbK4Ntz9dOWNuVY3o9/RTB841ctnJk0ZHEG+BjfCJjsD2n8H5HcaOA==} + /@swc/core-win32-arm64-msvc@1.4.2: + resolution: {integrity: sha512-HlVIiLMQkzthAdqMslQhDkoXJ5+AOLUSTV6fm6shFKZKqc/9cJvr4S8UveNERL9zUficA36yM3bbfo36McwnvQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -4062,8 +3997,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.3.107: - resolution: {integrity: sha512-ZBUtgyjTHlz8TPJh7kfwwwFma+ktr6OccB1oXC8fMSopD0AxVnQasgun3l3099wIsAB9eEsJDQ/3lDkOLs1gBA==} + /@swc/core-win32-ia32-msvc@1.4.2: + resolution: {integrity: sha512-WCF8faPGjCl4oIgugkp+kL9nl3nUATlzKXCEGFowMEmVVCFM0GsqlmGdPp1pjZoWc9tpYanoXQDnp5IvlDSLhA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -4071,8 +4006,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.3.107: - resolution: {integrity: sha512-Eyzo2XRqWOxqhE1gk9h7LWmUf4Bp4Xn2Ttb0ayAXFp6YSTxQIThXcT9kipXZqcpxcmDwoq8iWbbf2P8XL743EA==} + /@swc/core-win32-x64-msvc@1.4.2: + resolution: {integrity: sha512-oV71rwiSpA5xre2C5570BhCsg1HF97SNLsZ/12xv7zayGzqr3yvFALFJN8tHKpqUdCB4FGPjoP3JFdV3i+1wUw==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -4080,8 +4015,8 @@ packages: dev: true optional: true - /@swc/core@1.3.107(@swc/helpers@0.5.3): - resolution: {integrity: sha512-zKhqDyFcTsyLIYK1iEmavljZnf4CCor5pF52UzLAz4B6Nu/4GLU+2LQVAf+oRHjusG39PTPjd2AlRT3f3QWfsQ==} + /@swc/core@1.4.2: + resolution: {integrity: sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -4090,24 +4025,23 @@ packages: '@swc/helpers': optional: true dependencies: - '@swc/counter': 0.1.2 - '@swc/helpers': 0.5.3 + '@swc/counter': 0.1.3 '@swc/types': 0.1.5 optionalDependencies: - '@swc/core-darwin-arm64': 1.3.107 - '@swc/core-darwin-x64': 1.3.107 - '@swc/core-linux-arm-gnueabihf': 1.3.107 - '@swc/core-linux-arm64-gnu': 1.3.107 - '@swc/core-linux-arm64-musl': 1.3.107 - '@swc/core-linux-x64-gnu': 1.3.107 - '@swc/core-linux-x64-musl': 1.3.107 - '@swc/core-win32-arm64-msvc': 1.3.107 - '@swc/core-win32-ia32-msvc': 1.3.107 - '@swc/core-win32-x64-msvc': 1.3.107 + '@swc/core-darwin-arm64': 1.4.2 + '@swc/core-darwin-x64': 1.4.2 + '@swc/core-linux-arm-gnueabihf': 1.4.2 + '@swc/core-linux-arm64-gnu': 1.4.2 + '@swc/core-linux-arm64-musl': 1.4.2 + '@swc/core-linux-x64-gnu': 1.4.2 + '@swc/core-linux-x64-musl': 1.4.2 + '@swc/core-win32-arm64-msvc': 1.4.2 + '@swc/core-win32-ia32-msvc': 1.4.2 + '@swc/core-win32-x64-msvc': 1.4.2 dev: true - /@swc/counter@0.1.2: - resolution: {integrity: sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==} + /@swc/counter@0.1.3: + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} dev: true /@swc/helpers@0.5.2: @@ -4116,12 +4050,6 @@ packages: tslib: 2.6.2 dev: true - /@swc/helpers@0.5.3: - resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==} - dependencies: - tslib: 2.6.2 - dev: true - /@swc/types@0.1.5: resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} dev: true @@ -4141,7 +4069,6 @@ packages: /@tokenizer/token@0.3.0: resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - dev: false /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} @@ -4178,52 +4105,23 @@ packages: '@types/retry': 0.12.5 dev: true - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.5 - dev: true - - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - dependencies: - '@babel/types': 7.23.9 - dev: true - - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 - dev: true - - /@types/babel__traverse@7.20.5: - resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} - dependencies: - '@babel/types': 7.23.9 - dev: true - /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.11.14 + '@types/node': 20.11.17 /@types/bonjour@3.5.13: resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.11.14 + '@types/node': 20.11.17 '@types/responselike': 1.0.3 dev: true @@ -4235,17 +4133,17 @@ packages: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: '@types/express-serve-static-core': 4.17.42 - '@types/node': 20.11.14 + '@types/node': 20.11.17 /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 /@types/cross-spawn@6.0.0: resolution: {integrity: sha512-evp2ZGsFw9YKprDbg8ySgC9NA15g3YgiI8ANkGmKKvvi0P2aDGYLPxQIC5qfeKNUOe3TjABVGuah6omPRpIYhg==} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 dev: true /@types/debug@4.1.12: @@ -4253,13 +4151,6 @@ packages: dependencies: '@types/ms': 0.7.34 - /@types/edit-json-file@1.7.3: - resolution: {integrity: sha512-88OYHTiVq7PNN50T+CIm+65Sl0aRweoXvTuTz4JhoQfy1FeK+wTCC9Peu1dljOqslRaqqSFlDee3wgkWMpxKHg==} - dependencies: - '@types/node': 18.19.14 - '@types/set-value': 4.0.3 - dev: true - /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: @@ -4283,7 +4174,7 @@ packages: /@types/express-serve-static-core@4.17.42: resolution: {integrity: sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 '@types/qs': 6.9.11 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -4296,12 +4187,6 @@ packages: '@types/qs': 6.9.11 '@types/serve-static': 1.15.5 - /@types/graceful-fs@4.1.9: - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - dependencies: - '@types/node': 20.11.17 - dev: true - /@types/gtag.js@0.0.12: resolution: {integrity: sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==} dev: true @@ -4326,7 +4211,7 @@ packages: /@types/http-proxy@1.17.14: resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 /@types/istanbul-lib-coverage@2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -4341,13 +4226,6 @@ packages: dependencies: '@types/istanbul-lib-report': 3.0.3 - /@types/jest@29.5.12: - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true - /@types/json-schema@7.0.13: resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} @@ -4360,7 +4238,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 dev: true /@types/lodash-es@4.17.12: @@ -4400,14 +4278,14 @@ packages: /@types/node-fetch@2.6.9: resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 form-data: 4.0.0 dev: false /@types/node-forge@1.3.11: resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} @@ -4432,12 +4310,19 @@ packages: resolution: {integrity: sha512-w3yWCcwULefjP9DmDDsgUskrMoOy5Z8MiwKHr1FvqGPtx7CvJzQvxD7eKpxNtklQxLruxSXWddyeRtyud0RcXQ==} dependencies: undici-types: 5.26.5 + dev: true /@types/node@20.11.17: resolution: {integrity: sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==} dependencies: undici-types: 5.26.5 + /@types/node@20.11.20: + resolution: {integrity: sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==} + dependencies: + undici-types: 5.26.5 + dev: true + /@types/node@20.11.7: resolution: {integrity: sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A==} dependencies: @@ -4451,7 +4336,7 @@ packages: /@types/papaparse@5.3.14: resolution: {integrity: sha512-LxJ4iEFcpqc6METwp9f6BV6VVc43m6MfH0VqFosHvrUgfXiFe6ww7R3itkOQ+TCK6Y+Iv/+RnnvtRZnkc5Kc9g==} dependencies: - '@types/node': 18.19.14 + '@types/node': 20.11.17 dev: true /@types/parse-json@4.0.2: @@ -4460,7 +4345,7 @@ packages: /@types/pg@8.11.0: resolution: {integrity: sha512-sDAlRiBNthGjNFfvt0k6mtotoVYVQ63pA8R4EMWka7crawSR60waVYR0HAgmPRs/e2YaeJTD/43OoZ3PFw80pw==} dependencies: - '@types/node': 18.19.14 + '@types/node': 20.11.17 pg-protocol: 1.6.0 pg-types: 4.0.1 dev: true @@ -4488,7 +4373,7 @@ packages: resolution: {integrity: sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.48 + '@types/react': 18.2.55 '@types/react-router': 5.1.20 dev: true @@ -4512,7 +4397,7 @@ packages: resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.48 + '@types/react': 18.2.55 dev: true /@types/react@18.2.48: @@ -4529,14 +4414,10 @@ packages: '@types/scheduler': 0.16.8 csstype: 3.1.3 - /@types/resolve@1.20.2: - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - dev: true - /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 dev: true /@types/retry@0.12.0: @@ -4549,7 +4430,7 @@ packages: /@types/sax@1.2.7: resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 dev: true /@types/scheduler@0.16.4: @@ -4566,7 +4447,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.11.14 + '@types/node': 20.11.17 /@types/serve-index@1.9.4: resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} @@ -4578,25 +4459,17 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.11.14 - - /@types/set-value@4.0.3: - resolution: {integrity: sha512-tSuUcLl6kMzI+l0gG7FZ04xbIcynxNIYgWFj91LPAvRcn7W3L1EveXNdVjqFDgAZPjY1qCOsm8Sb1C70SxAPHw==} - dev: true + '@types/node': 20.11.17 /@types/sockjs@0.3.36: resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: - '@types/node': 20.11.14 - - /@types/stack-utils@2.0.3: - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - dev: true + '@types/node': 20.11.17 /@types/tar@6.1.5: resolution: {integrity: sha512-qm2I/RlZij5RofuY7vohTpYNaYcrSQlN2MyjucQc7ZweDwaEWkdN/EeNh6e9zjK6uEm6PwjdMXkcj05BxZdX1Q==} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 minipass: 4.2.8 dev: true @@ -4627,7 +4500,7 @@ packages: /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 /@types/yargs-parser@21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -4777,6 +4650,45 @@ packages: hasBin: true dev: true + /@vitest/expect@1.3.1: + resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} + dependencies: + '@vitest/spy': 1.3.1 + '@vitest/utils': 1.3.1 + chai: 4.4.1 + dev: true + + /@vitest/runner@1.3.1: + resolution: {integrity: sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==} + dependencies: + '@vitest/utils': 1.3.1 + p-limit: 5.0.0 + pathe: 1.1.2 + dev: true + + /@vitest/snapshot@1.3.1: + resolution: {integrity: sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==} + dependencies: + magic-string: 0.30.7 + pathe: 1.1.2 + pretty-format: 29.7.0 + dev: true + + /@vitest/spy@1.3.1: + resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} + dependencies: + tinyspy: 2.2.1 + dev: true + + /@vitest/utils@1.3.1: + resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + /@webassemblyjs/ast@1.11.6: resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} dependencies: @@ -5023,13 +4935,6 @@ packages: engines: {node: '>=6'} dev: true - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - dev: true - /ansi-escapes@5.0.0: resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} engines: {node: '>=12'} @@ -5096,6 +5001,10 @@ packages: resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} dev: true + /arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + dev: true + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true @@ -5230,6 +5139,10 @@ packages: - utf-8-validate dev: false + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + /ast-module-types@2.7.1: resolution: {integrity: sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==} dev: true @@ -5329,24 +5242,6 @@ packages: resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} dev: false - /babel-jest@29.7.0(@babel/core@7.23.9): - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.23.9 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.9) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /babel-loader@9.1.3(@babel/core@7.23.9)(webpack@5.90.0): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} @@ -5364,29 +5259,6 @@ packages: dependencies: object.assign: 4.1.5 - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - dependencies: - '@babel/helper-plugin-utils': 7.22.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.5 - dev: true - /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.9): resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} peerDependencies: @@ -5420,37 +5292,6 @@ packages: transitivePeerDependencies: - supports-color - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.9): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.23.9): - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.9 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) - dev: true - /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -5477,6 +5318,31 @@ packages: /big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + /bin-check@4.1.0: + resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==} + engines: {node: '>=4'} + dependencies: + execa: 0.7.0 + executable: 4.1.1 + dev: true + + /bin-version-check@5.1.0: + resolution: {integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==} + engines: {node: '>=12'} + dependencies: + bin-version: 6.0.0 + semver: 7.6.0 + semver-truncate: 3.0.0 + dev: true + + /bin-version@6.0.0: + resolution: {integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + find-versions: 5.1.0 + dev: true + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -5579,19 +5445,6 @@ packages: node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.3) - /bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - dependencies: - fast-json-stable-stringify: 2.1.0 - dev: true - - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - dependencies: - node-int64: 0.4.0 - dev: true - /bson@6.2.0: resolution: {integrity: sha512-ID1cI+7bazPDyL9wYy9GaQ8gEEohWvcUl/Yf0dIdutJxnmInEEyCsb4awy/OiBfall7zBA179Pahi3vCdFze3Q==} engines: {node: '>=16.20.1'} @@ -5620,48 +5473,10 @@ packages: dev: false optional: true - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true - /builtins@1.0.3: resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} dev: true - /bunchee@4.4.6(typescript@5.3.3): - resolution: {integrity: sha512-sRYDasLVGtxv/KmnRrlFpCCt23l3tZHi2ZhBlzJLmuT7c5ULorf2iJfFJzoH0g5hCgtgwkvPuO49EGFCVCVlWQ==} - engines: {node: '>= 18.0.0'} - hasBin: true - peerDependencies: - typescript: ^4.1 || ^5.0 - peerDependenciesMeta: - '@swc/helpers': - optional: true - typescript: - optional: true - dependencies: - '@rollup/plugin-commonjs': 25.0.7(rollup@4.9.5) - '@rollup/plugin-json': 6.1.0(rollup@4.9.5) - '@rollup/plugin-node-resolve': 15.2.3(rollup@4.9.5) - '@rollup/plugin-replace': 5.0.5(rollup@4.9.5) - '@rollup/plugin-wasm': 6.2.2(rollup@4.9.5) - '@rollup/pluginutils': 5.1.0(rollup@4.9.5) - '@swc/core': 1.3.107(@swc/helpers@0.5.3) - '@swc/helpers': 0.5.3 - arg: 5.0.2 - clean-css: 5.3.3 - magic-string: 0.30.7 - pretty-bytes: 5.6.0 - rimraf: 5.0.5 - rollup: 4.9.5 - rollup-plugin-dts: 6.1.0(rollup@4.9.5)(typescript@5.3.3) - rollup-plugin-swc3: 0.11.0(@swc/core@1.3.107)(rollup@4.9.5) - rollup-preserve-directives: 1.1.1(rollup@4.9.5) - tslib: 2.6.2 - typescript: 5.3.3 - dev: true - /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -5677,6 +5492,11 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: true + /cacheable-lookup@2.0.1: resolution: {integrity: sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==} engines: {node: '>=10'} @@ -5685,6 +5505,11 @@ packages: keyv: 4.5.4 dev: true + /cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + dev: true + /cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -5767,6 +5592,19 @@ packages: /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -5810,6 +5648,12 @@ packages: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} dev: false + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + /cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} dependencies: @@ -5909,10 +5753,6 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - dev: true - /clean-css@5.3.3: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} @@ -6005,11 +5845,6 @@ packages: resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} engines: {node: '>=6'} - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true - /codsen-utils@1.6.4: resolution: {integrity: sha512-PDyvQ5f2PValmqZZIJATimcokDt4JjIev8cKbZgEOoZm+U1IJDYuLeTcxZPQdep99R/X0RIlQ6ReQgPOVnPbNw==} engines: {node: '>=14.18.0'} @@ -6032,10 +5867,6 @@ packages: /collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - /collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - dev: true - /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -6112,10 +5943,10 @@ packages: /commander@2.20.0: resolution: {integrity: sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==} - dev: true /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true /commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} @@ -6164,6 +5995,22 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + /concurrently@8.2.2: + resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} + engines: {node: ^14.13.0 || >=16.0.0} + hasBin: true + dependencies: + chalk: 4.1.2 + date-fns: 2.30.0 + lodash: 4.17.21 + rxjs: 7.8.1 + shell-quote: 1.8.1 + spawn-command: 0.0.2 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + dev: true + /conf@10.2.0: resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} engines: {node: '>=12'} @@ -6297,25 +6144,6 @@ packages: path-type: 4.0.0 typescript: 5.3.3 - /create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.11.17) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true @@ -6555,6 +6383,13 @@ packages: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: false + /date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + dependencies: + '@babel/runtime': 7.23.9 + dev: true + /debounce-fn@4.0.0: resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} engines: {node: '>=10'} @@ -6628,13 +6463,11 @@ packages: dependencies: mimic-response: 3.1.0 - /dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 dev: true /deep-extend@0.6.0: @@ -6750,11 +6583,6 @@ packages: engines: {node: '>=8'} dev: false - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true - /detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} @@ -7081,27 +6909,12 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /edit-json-file@1.8.0: - resolution: {integrity: sha512-IBOpbe2aQufNl5oZ4jsr2AmNVUy5bO7jS5hk0cCyWhOLdH59Xv41B3XQObE/JB89Ae5qDY9hVsq13/hgGhFBZg==} - dependencies: - find-value: 1.0.12 - iterate-object: 1.3.4 - r-json: 1.3.0 - set-value: 4.1.0 - w-json: 1.3.10 - dev: true - /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} /electron-to-chromium@1.4.648: resolution: {integrity: sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg==} - /emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - dev: true - /emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} dev: true @@ -7315,6 +7128,37 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -7335,11 +7179,6 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true - /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -7730,10 +7569,6 @@ packages: '@types/estree-jsx': 1.0.3 '@types/unist': 3.0.2 - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true - /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: @@ -7755,7 +7590,7 @@ packages: resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} engines: {node: '>= 0.8'} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 require-like: 0.1.2 /event-target-shim@5.0.1: @@ -7774,6 +7609,19 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + /execa@0.7.0: + resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} + engines: {node: '>=4'} + dependencies: + cross-spawn: 5.1.0 + get-stream: 3.0.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + dev: true + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -7803,9 +7651,11 @@ packages: strip-final-newline: 3.0.0 dev: true - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} + /executable@4.1.1: + resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} + engines: {node: '>=4'} + dependencies: + pify: 2.3.0 dev: true /expand-template@2.0.3: @@ -7813,17 +7663,6 @@ packages: engines: {node: '>=6'} dev: false - /expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - dev: true - /express@4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} @@ -7862,6 +7701,21 @@ packages: transitivePeerDependencies: - supports-color + /ext-list@2.2.2: + resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} + engines: {node: '>=0.10.0'} + dependencies: + mime-db: 1.52.0 + dev: true + + /ext-name@5.0.0: + resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} + engines: {node: '>=4'} + dependencies: + ext-list: 2.2.2 + sort-keys-length: 1.0.1 + dev: true + /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -7900,7 +7754,6 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} @@ -7939,12 +7792,6 @@ packages: dependencies: websocket-driver: 0.7.4 - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - dependencies: - bser: 2.1.1 - dev: true - /fecha@4.2.3: resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} dev: false @@ -7972,6 +7819,15 @@ packages: schema-utils: 3.3.0 webpack: 5.90.0 + /file-type@17.1.6: + resolution: {integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + readable-web-to-node-stream: 3.0.2 + strtok3: 7.0.0 + token-types: 5.0.1 + dev: true + /file-type@18.7.0: resolution: {integrity: sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==} engines: {node: '>=14.16'} @@ -7981,6 +7837,20 @@ packages: token-types: 5.0.1 dev: false + /filename-reserved-regex@3.0.0: + resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /filenamify@5.1.1: + resolution: {integrity: sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==} + engines: {node: '>=12.20'} + dependencies: + filename-reserved-regex: 3.0.0 + strip-outer: 2.0.0 + trim-repeated: 2.0.0 + dev: true + /filesize@8.0.7: resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} engines: {node: '>= 0.4.0'} @@ -8062,8 +7932,11 @@ packages: locate-path: 7.2.0 path-exists: 5.0.0 - /find-value@1.0.12: - resolution: {integrity: sha512-OCpo8LTk8eZ2sdDCwbU2Lc3ivYsdM6yod6jP2jHcNEFcjPhkgH0+POzTIol7xx1LZgtbI5rkO5jqxsG5MWtPjQ==} + /find-versions@5.1.0: + resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} + engines: {node: '>=12'} + dependencies: + semver-regex: 4.0.5 dev: true /find-yarn-workspace-root2@1.2.16: @@ -8149,7 +8022,7 @@ packages: memfs: 3.5.3 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.5.4 + semver: 7.6.0 tapable: 1.1.3 typescript: 5.3.3 webpack: 5.90.0 @@ -8333,6 +8206,10 @@ packages: engines: {node: '>=18'} dev: true + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + /get-intrinsic@1.2.2: resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: @@ -8344,9 +8221,9 @@ packages: /get-own-enumerable-property-symbols@3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} + /get-stream@3.0.0: + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} + engines: {node: '>=4'} dev: true /get-stream@5.2.0: @@ -8376,6 +8253,7 @@ packages: resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} dependencies: resolve-pkg-maps: 1.0.0 + dev: false /github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} @@ -8432,17 +8310,6 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - dev: true - /global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} @@ -8495,7 +8362,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 - fast-glob: 3.3.2 + fast-glob: 3.3.1 ignore: 5.3.0 merge2: 1.4.1 slash: 4.0.0 @@ -8536,6 +8403,23 @@ packages: type-fest: 0.10.0 dev: true + /got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + dev: true + /got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} engines: {node: '>=14.16'} @@ -8916,6 +8800,14 @@ packages: transitivePeerDependencies: - debug + /http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: true + /http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -9005,15 +8897,6 @@ packages: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - dev: true - /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -9142,13 +9025,6 @@ packages: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: false - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - dependencies: - builtin-modules: 3.3.0 - dev: true - /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -9214,11 +9090,6 @@ packages: get-east-asian-width: 1.2.0 dev: true - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true - /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -9251,10 +9122,6 @@ packages: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: false - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true - /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -9312,17 +9179,6 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - /is-primitive@3.0.1: - resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==} - engines: {node: '>=0.10.0'} - dev: true - - /is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - dependencies: - '@types/estree': 1.0.5 - dev: true - /is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} dependencies: @@ -9356,6 +9212,11 @@ packages: dependencies: call-bind: 1.0.5 + /is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + dev: true + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -9367,523 +9228,119 @@ packages: /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - - /is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} - dependencies: - better-path-resolve: 1.0.0 - dev: true - - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.13 - - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true - - /is-url-superb@4.0.0: - resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} - engines: {node: '>=10'} - dev: true - - /is-url@1.2.4: - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - dev: true - - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: false - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.5 - - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: false - - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true - - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - - /is-yarn-global@0.4.1: - resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} - engines: {node: '>=12'} - - /isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - - /isomorphic-fetch@3.0.0: - resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} - dependencies: - node-fetch: 2.7.0(encoding@0.1.13) - whatwg-fetch: 3.6.20 - transitivePeerDependencies: - - encoding - dev: false - - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: true - - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.23.9 - '@babel/parser': 7.23.9 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-instrument@6.0.1: - resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} - engines: {node: '>=10'} - dependencies: - '@babel/core': 7.23.9 - '@babel/parser': 7.23.9 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - dev: true - - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - dev: true - - /iterate-object@1.3.4: - resolution: {integrity: sha512-4dG1D1x/7g8PwHS9aK6QV5V94+ZvyP4+d19qDv43EzImmrndysIl4prmJ1hWWIGCqrZHyaHBm6BSEWHOLnpoNw==} - dev: true - - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.2 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 - dev: false - - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - dev: true - - /jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - dev: true - - /jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.5.1 - is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.0.4 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - dev: true - - /jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0 - exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.11.17) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - - /jest-config@29.7.0(@types/node@20.11.17): - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - dependencies: - '@babel/core': 7.23.9 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - babel-jest: 29.7.0(@babel/core@7.23.9) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - dev: true - - /jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - dev: true + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 - /jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} dependencies: - detect-newline: 3.1.0 + better-path-resolve: 1.0.0 dev: true - /jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - dev: true + has-symbols: 1.0.3 - /jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - jest-mock: 29.7.0 - jest-util: 29.7.0 - dev: true + which-typed-array: 1.1.13 - /jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - /jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.11.17 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.5 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} dev: true - /jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 + /is-url-superb@4.0.0: + resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} + engines: {node: '>=10'} dev: true - /jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 + /is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} dev: true - /jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/code-frame': 7.23.5 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: false - /jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - jest-util: 29.7.0 - dev: true + call-bind: 1.0.5 - /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: - jest-resolve: 29.7.0 - dev: true + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + dev: false - /jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} dev: true - /jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - dev: true + is-docker: 2.2.1 - /jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) - jest-util: 29.7.0 - jest-validate: 29.7.0 - resolve: 1.22.8 - resolve.exports: 2.0.2 - slash: 3.0.0 - dev: true + /is-yarn-global@0.4.1: + resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} + engines: {node: '>=12'} - /jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + /isomorphic-fetch@3.0.0: + resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 + node-fetch: 2.7.0(encoding@0.1.13) + whatwg-fetch: 3.6.20 transitivePeerDependencies: - - supports-color - dev: true + - encoding + dev: false - /jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - chalk: 4.1.2 - cjs-module-lexer: 1.2.3 - collect-v8-coverage: 1.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: true + define-properties: 1.2.1 + get-intrinsic: 1.2.2 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 + dev: false - /jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} dependencies: - '@babel/core': 7.23.9 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) - '@babel/types': 7.23.9 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 dev: true /jest-util@29.7.0: @@ -9897,37 +9354,11 @@ packages: graceful-fs: 4.2.11 picomatch: 2.3.1 - /jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - dev: true - - /jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.17 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - dev: true - /jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -9935,32 +9366,11 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.11.14 + '@types/node': 20.11.17 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - /jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 29.7.0 - '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - dev: true - /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true @@ -9987,6 +9397,10 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + /js-tokens@8.0.3: + resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==} + dev: true + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -10220,6 +9634,14 @@ packages: resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} engines: {node: '>= 12.13.0'} + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.6.0 + pkg-types: 1.0.3 + dev: true + /locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -10321,6 +9743,12 @@ packages: underscore: 1.13.6 dev: false + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: @@ -10406,23 +9834,10 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - dependencies: - semver: 7.6.0 - dev: true - /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - dependencies: - tmpl: 1.0.5 - dev: true - /mammoth@1.6.0: resolution: {integrity: sha512-jOwbj6BwJzxCf6jr2l1zmSemniIkLnchvELXnDJCANlJawhzyIKObIq48B8kWEPLgUUh57k7FtEO3DHFQMnjMg==} engines: {node: '>=12.0.0'} @@ -11150,13 +10565,6 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -11215,6 +10623,15 @@ packages: hasBin: true dev: true + /mlly@1.6.0: + resolution: {integrity: sha512-YOvg9hfYQmnaB56Yb+KrJE2u0Yzz5zR+sLejEvF4fzwzV1Al6hkf2vyHTwqCRyv0hCi9rVCqVoXpyYevQIRwLQ==} + dependencies: + acorn: 8.11.3 + pathe: 1.1.2 + pkg-types: 1.0.3 + ufo: 1.4.0 + dev: true + /module-definition@3.4.0: resolution: {integrity: sha512-XxJ88R1v458pifaSkPNLUTdSPNVGMP2SXVncVmApGO+gAfrLANiYe6JofymCzVceGOMwQE2xogxBSc8uB7XegA==} engines: {node: '>=6.0'} @@ -11238,7 +10655,7 @@ packages: engines: {node: '>=10.13.0'} hasBin: true dependencies: - commander: 2.20.3 + commander: 2.20.0 debug: 4.3.4 glob: 7.2.3 requirejs: 2.3.6 @@ -11333,7 +10750,7 @@ packages: /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - /next@13.5.6(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0): + /next@13.5.6(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==} engines: {node: '>=16.14.0'} hasBin: true @@ -11355,7 +10772,7 @@ packages: postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.23.9)(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) watchpack: 2.4.0 optionalDependencies: '@next/swc-darwin-arm64': 13.5.6 @@ -11372,6 +10789,16 @@ packages: - babel-plugin-macros dev: true + /nice-napi@1.0.2: + resolution: {integrity: sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==} + os: ['!win32'] + requiresBuild: true + dependencies: + node-addon-api: 3.2.1 + node-gyp-build: 4.8.0 + dev: true + optional: true + /no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: @@ -11385,6 +10812,12 @@ packages: semver: 7.6.0 dev: false + /node-addon-api@3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + requiresBuild: true + dev: true + optional: true + /node-addon-api@6.1.0: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} dev: false @@ -11420,9 +10853,12 @@ packages: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + /node-gyp-build@4.8.0: + resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} + hasBin: true + requiresBuild: true dev: true + optional: true /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -11475,6 +10911,13 @@ packages: - encoding dev: false + /npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + dependencies: + path-key: 2.0.1 + dev: true + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -11735,6 +11178,13 @@ packages: wcwidth: 1.0.1 dev: true + /os-filter-obj@2.0.0: + resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==} + engines: {node: '>=4'} + dependencies: + arch: 2.2.0 + dev: true + /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -11790,6 +11240,13 @@ packages: dependencies: yocto-queue: 1.0.0 + /p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -11851,7 +11308,7 @@ packages: got: 12.6.1 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.5.4 + semver: 7.6.0 /packet-reader@1.0.0: resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} @@ -11948,6 +11405,11 @@ packages: /path-is-inside@1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + /path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + dev: true + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -11985,7 +11447,10 @@ packages: /pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - dev: false + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true /pdf2json@3.0.5: resolution: {integrity: sha512-Un1yLbSlk/zfwrltgguskExIioXZlFSFwsyXU0cnBorLywbTbcdzmJJEebh+U2cFCtR7y8nDs5lPHAe7ldxjZg==} @@ -12000,7 +11465,6 @@ packages: /peek-readable@5.0.0: resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==} engines: {node: '>=14.16'} - dev: false /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} @@ -12107,14 +11571,20 @@ packages: hasBin: true dev: true + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} dev: true - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} + /piscina@4.3.2: + resolution: {integrity: sha512-aXPak3A1LgbfDFrsmgYhQS4J7ElHRFL7iUkUqaiLNDRE69YQSFGqIZiHaXOH4NyC6EdD+awZVeE7MG0zVm9L4Q==} + optionalDependencies: + nice-napi: 1.0.2 dev: true /pkg-dir@4.2.0: @@ -12130,6 +11600,14 @@ packages: dependencies: find-up: 6.3.0 + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.6.0 + pathe: 1.1.2 + dev: true + /pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} @@ -12567,6 +12045,15 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 + /postcss@8.4.35: + resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -12720,11 +12207,6 @@ packages: hasBin: true dev: true - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: true - /pretty-error@4.0.0: resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} dependencies: @@ -12819,7 +12301,7 @@ packages: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 18.19.14 + '@types/node': 20.11.17 long: 4.0.0 dev: false @@ -12857,10 +12339,6 @@ packages: dependencies: escape-goat: 4.0.0 - /pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} - dev: true - /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} @@ -12899,12 +12377,6 @@ packages: resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} dev: true - /r-json@1.3.0: - resolution: {integrity: sha512-xesd+RHCpymPCYd9DvDvUr1w1IieSChkqYF1EpuAYrvCfLXji9NP36DvyYZJZZB5soVDvZ0WUtBoZaU1g5Yt9A==} - dependencies: - w-json: 1.3.10 - dev: true - /rake-modified@1.0.8: resolution: {integrity: sha512-rj/1t+EyI8Ly52eaCeSy5hoNpdNnDlNQ/+jll2DypR6nkuxotMbaupzwbuMSaXzuSL1I2pYVYy7oPus/Ls49ag==} dependencies: @@ -13207,7 +12679,6 @@ packages: engines: {node: '>=8'} dependencies: readable-stream: 3.6.2 - dev: false /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -13467,13 +12938,6 @@ packages: /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - dev: true - /resolve-dependency-path@2.0.0: resolution: {integrity: sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==} engines: {node: '>=6.0.0'} @@ -13493,11 +12957,7 @@ packages: /resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - /resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - dev: true + dev: false /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} @@ -13583,64 +13043,26 @@ packages: glob: 10.3.10 dev: true - /rollup-plugin-dts@6.1.0(rollup@4.9.5)(typescript@5.3.3): - resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==} - engines: {node: '>=16'} - peerDependencies: - rollup: ^3.29.4 || ^4 - typescript: ^4.5 || ^5.0 - dependencies: - magic-string: 0.30.7 - rollup: 4.9.5 - typescript: 5.3.3 - optionalDependencies: - '@babel/code-frame': 7.23.5 - dev: true - - /rollup-plugin-swc3@0.11.0(@swc/core@1.3.107)(rollup@4.9.5): - resolution: {integrity: sha512-luB9Ngb1YieWPpJttKvkmjN3lG5l28SmASLbf2CoScUB2+EImU0bE8wX4EYKEqv5clVulhWRQHQvE+H33X/03g==} - engines: {node: '>=12'} - peerDependencies: - '@swc/core': '>=1.2.165' - rollup: ^2.0.0 || ^3.0.0 || ^4.0.0 - dependencies: - '@fastify/deepmerge': 1.3.0 - '@rollup/pluginutils': 5.1.0(rollup@4.9.5) - '@swc/core': 1.3.107(@swc/helpers@0.5.3) - get-tsconfig: 4.7.2 - rollup: 4.9.5 - rollup-preserve-directives: 1.1.1(rollup@4.9.5) - dev: true - - /rollup-preserve-directives@1.1.1(rollup@4.9.5): - resolution: {integrity: sha512-+eQafbuEfDPfxQ9hQPlwaROfin4yiVRxap8hnrvvvcSGoukv1tTiYpAW9mvm3uR8J+fe4xd8FdVd5rz9q7jZ+Q==} - peerDependencies: - rollup: ^2.0.0 || ^3.0.0 || ^4.0.0 - dependencies: - magic-string: 0.30.7 - rollup: 4.9.5 - dev: true - - /rollup@4.9.5: - resolution: {integrity: sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==} + /rollup@4.12.0: + resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.9.5 - '@rollup/rollup-android-arm64': 4.9.5 - '@rollup/rollup-darwin-arm64': 4.9.5 - '@rollup/rollup-darwin-x64': 4.9.5 - '@rollup/rollup-linux-arm-gnueabihf': 4.9.5 - '@rollup/rollup-linux-arm64-gnu': 4.9.5 - '@rollup/rollup-linux-arm64-musl': 4.9.5 - '@rollup/rollup-linux-riscv64-gnu': 4.9.5 - '@rollup/rollup-linux-x64-gnu': 4.9.5 - '@rollup/rollup-linux-x64-musl': 4.9.5 - '@rollup/rollup-win32-arm64-msvc': 4.9.5 - '@rollup/rollup-win32-ia32-msvc': 4.9.5 - '@rollup/rollup-win32-x64-msvc': 4.9.5 + '@rollup/rollup-android-arm-eabi': 4.12.0 + '@rollup/rollup-android-arm64': 4.12.0 + '@rollup/rollup-darwin-arm64': 4.12.0 + '@rollup/rollup-darwin-x64': 4.12.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.12.0 + '@rollup/rollup-linux-arm64-gnu': 4.12.0 + '@rollup/rollup-linux-arm64-musl': 4.12.0 + '@rollup/rollup-linux-riscv64-gnu': 4.12.0 + '@rollup/rollup-linux-x64-gnu': 4.12.0 + '@rollup/rollup-linux-x64-musl': 4.12.0 + '@rollup/rollup-win32-arm64-msvc': 4.12.0 + '@rollup/rollup-win32-ia32-msvc': 4.12.0 + '@rollup/rollup-win32-x64-msvc': 4.12.0 fsevents: 2.3.3 dev: true @@ -13663,6 +13085,12 @@ packages: dependencies: queue-microtask: 1.2.3 + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.2 + dev: true + /safe-array-concat@1.1.0: resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} @@ -13707,7 +13135,7 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - commander: 2.20.3 + commander: 2.20.0 dev: true /sax@1.3.0: @@ -13769,7 +13197,19 @@ packages: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} engines: {node: '>=12'} dependencies: - semver: 7.5.4 + semver: 7.6.0 + + /semver-regex@4.0.5: + resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} + engines: {node: '>=12'} + dev: true + + /semver-truncate@3.0.0: + resolution: {integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==} + engines: {node: '>=12'} + dependencies: + semver: 7.6.0 + dev: true /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} @@ -13882,14 +13322,6 @@ packages: functions-have-names: 1.2.3 has-property-descriptors: 1.0.1 - /set-value@4.1.0: - resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==} - engines: {node: '>=11.0'} - dependencies: - is-plain-object: 2.0.4 - is-primitive: 3.0.1 - dev: true - /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: false @@ -13974,6 +13406,10 @@ packages: get-intrinsic: 1.2.2 object-inspect: 1.13.1 + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -14081,17 +13517,24 @@ packages: resolution: {integrity: sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==} engines: {node: '>= 6.3.0'} - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + /sort-keys-length@1.0.1: + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} engines: {node: '>=0.10.0'} + dependencies: + sort-keys: 1.1.2 + dev: true - /source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + /sort-keys@1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 + is-plain-obj: 1.1.0 dev: true + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -14115,6 +13558,10 @@ packages: memory-pager: 1.5.0 dev: false + /spawn-command@0.0.2: + resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} + dev: true + /spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} dependencies: @@ -14189,11 +13636,8 @@ packages: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} dev: false - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 2.0.0 + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true /statuses@1.5.0: @@ -14249,14 +13693,6 @@ packages: rfdc: 1.3.1 dev: false - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - dev: true - /string-strip-html@13.4.6: resolution: {integrity: sha512-I1uUTS/BGQ/3jj+9WF6GENATSUPy9UruqVHdvAikOqlvFvlOAQL8M3qjoLu60Usp2x3yJpnAYtUTzDYiDdqXqg==} engines: {node: '>=14.18.0'} @@ -14418,9 +13854,9 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} + /strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} dev: true /strip-final-newline@2.0.0: @@ -14447,13 +13883,23 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + /strip-literal@2.0.0: + resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} + dependencies: + js-tokens: 8.0.3 + dev: true + + /strip-outer@2.0.0: + resolution: {integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /strtok3@7.0.0: resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} engines: {node: '>=14.16'} dependencies: '@tokenizer/token': 0.3.0 peek-readable: 5.0.0 - dev: false /style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} @@ -14465,7 +13911,7 @@ packages: dependencies: inline-style-parser: 0.2.2 - /styled-jsx@5.1.1(@babel/core@7.23.9)(react@18.2.0): + /styled-jsx@5.1.1(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -14478,7 +13924,6 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.23.9 client-only: 0.0.1 react: 18.2.0 dev: true @@ -14498,7 +13943,7 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - commander: 2.20.3 + commander: 2.20.0 debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -14673,18 +14118,9 @@ packages: dependencies: '@jridgewell/source-map': 0.3.5 acorn: 8.11.3 - commander: 2.20.3 + commander: 2.20.0 source-map-support: 0.5.21 - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: true - /text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} dev: false @@ -14714,6 +14150,20 @@ packages: /tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + /tinybench@2.6.0: + resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} + dev: true + + /tinypool@0.8.2: + resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + dev: true + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -14721,10 +14171,6 @@ packages: os-tmpdir: 1.0.2 dev: true - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true - /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -14750,7 +14196,6 @@ packages: dependencies: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - dev: false /totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} @@ -14767,6 +14212,11 @@ packages: punycode: 2.3.1 dev: false + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + /trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -14775,6 +14225,13 @@ packages: engines: {node: '>=8'} dev: true + /trim-repeated@2.0.0: + resolution: {integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==} + engines: {node: '>=12'} + dependencies: + escape-string-regexp: 5.0.0 + dev: true + /triple-beam@1.4.1: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} @@ -14797,40 +14254,6 @@ packages: engines: {node: '>=14.16'} dev: true - /ts-jest@29.1.2(@babel/core@7.23.9)(jest@29.7.0)(typescript@5.3.3): - resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} - engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - dependencies: - '@babel/core': 7.23.9 - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - jest: 29.7.0 - jest-util: 29.7.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.6.0 - typescript: 5.3.3 - yargs-parser: 21.1.1 - dev: true - /ts-node@10.9.2(@types/node@18.19.10)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true @@ -15043,11 +14466,6 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true - /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} @@ -15157,6 +14575,10 @@ packages: engines: {node: '>=14.17'} hasBin: true + /ufo@1.4.0: + resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==} + dev: true + /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} @@ -15366,15 +14788,6 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} - engines: {node: '>=10.12.0'} - dependencies: - '@jridgewell/trace-mapping': 0.3.22 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - dev: true - /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -15414,6 +14827,117 @@ packages: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 + /vite-node@1.3.1: + resolution: {integrity: sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + pathe: 1.1.2 + picocolors: 1.0.0 + vite: 5.1.4 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite@5.1.4: + resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.19.12 + postcss: 8.4.35 + rollup: 4.12.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitest@1.3.1: + resolution: {integrity: sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 1.3.1 + '@vitest/ui': 1.3.1 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@vitest/expect': 1.3.1 + '@vitest/runner': 1.3.1 + '@vitest/snapshot': 1.3.1 + '@vitest/spy': 1.3.1 + '@vitest/utils': 1.3.1 + acorn-walk: 8.3.2 + chai: 4.4.1 + debug: 4.3.4 + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.7 + pathe: 1.1.2 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 2.0.0 + tinybench: 2.6.0 + tinypool: 0.8.2 + vite: 5.1.4 + vite-node: 1.3.1 + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vscode-oniguruma@1.7.0: resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} dev: true @@ -15422,10 +14946,6 @@ packages: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: true - /w-json@1.3.10: - resolution: {integrity: sha512-XadVyw0xE+oZ5FGApXsdswv96rOhStzKqL53uSe5UaTadABGkWIg1+DTx8kiZ/VqTZTBneoL0l65RcPe4W3ecw==} - dev: true - /wait-port@1.1.0: resolution: {integrity: sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==} engines: {node: '>=10'} @@ -15443,12 +14963,6 @@ packages: engines: {node: '>=6.0.0'} dev: true - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - dependencies: - makeerror: 1.0.12 - dev: true - /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} @@ -15790,6 +15304,15 @@ packages: dependencies: isexe: 2.0.0 + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + /widest-line@4.0.1: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} engines: {node: '>=12'} @@ -15878,14 +15401,6 @@ packages: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - dev: true - /ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ba8101a4589d6459fcd9dfc03e26803d85851834..7d4e0da24087f4c18084b92100a692a4ce54b1b0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,6 @@ packages: - "apps/*" - "packages/*" + - "packages/core/tests" - "examples/" - "examples/*" diff --git a/tsconfig.json b/tsconfig.json index b63bcb9ca6b4be46b218c40cebb7717abb72615b..a4123d728d76f0dfa862aecd55a88c324c53cadb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,7 +18,13 @@ "path": "./apps/docs/tsconfig.json" }, { - "path": "./packages/core" + "path": "./packages/core/tsconfig.json" + }, + { + "path": "./packages/core/tests/tsconfig.json" + }, + { + "path": "./packages/env/tsconfig.json" }, { "path": "./packages/create-llama" diff --git a/turbo.json b/turbo.json index 6f914705c09d71c2c77829abf624934f37d4b202..1a3afa7f49b47ce01796fb4d046ce7ef26dbe65f 100644 --- a/turbo.json +++ b/turbo.json @@ -7,7 +7,9 @@ "outputs": ["dist/**", "build/**"] }, "lint": {}, - "test": {}, + "test": { + "dependsOn": ["^build"] + }, "dev": { "cache": false, "persistent": true